作者LIAR (玻璃做的大叔)
看板R_Language
标题[问题] 测试资料太乾净反而找不出解?
时间Sun Aug 12 22:43:19 2018
我最近有一堆压力的资料要分析,因为推测模式是 y ~ a/(x+b),所以想用nls解。
我先用假的资料
> x=seq(-4,-1.5,0.1)
> y=-1.58/(x-3.78)
> plot(x,y)
> m<-nls(y~a/(x+b))
Error in nls(y ~ a/(x + b)) : number of iterations exceeded maximum of 50
In addition: Warning message:
In nls(y ~ a/(x + b)) : No starting values specified for some parameters.
Initializing ‘a’, ‘b’ to '1.'.
Consider specifying 'start' or using a selfStart model
这样会有错误。
但是如果我把y加上一些noise
> y=-1.58/(x-3.78)+rnorm(length(x),0,0.01)
> m<-nls(y~a/(x+b))
Warning message:
In nls(y ~ a/(x + b)) : No starting values specified for some parameters.
Initializing ‘a’, ‘b’ to '1.'.
Consider specifying 'start' or using a selfStart model
> m
Nonlinear regression model
model: y ~ a/(x + b)
data: parent.frame()
a b
-1.698 -4.339
residual sum-of-squares: 0.001832
Number of iterations to convergence: 9
Achieved convergence tolerance: 3.167e-06
>
这样就可以解出a,b(理论值是-1.58,-3.78)
我想请问为何太乾净的资料反而会跑不出来?
不加rnorm的y我甚至有试过直接带入正确答案当起始值:
start = list(a=-1.58,b=-3.78),但是还是一样有
number of iterations exceeded maximum of 50
请问测试资料太乾净反而抓不出模型是正常的吗?
--
起初,他们追杀共产主义者,我没有说话,因为我不是共产主义者;
接着,他们追杀犹太人,我没有说话,因为我不是犹太人;
後来,他们追杀工会成员,我没有说话,因为我不是工会成员;
此後,他们追杀天主教徒,我没有说话,因为我是新教教徒;
最後,他们奔我而来,却再也没有人站起来为我说话了。
《First They Came(他们首次来时)》,Martin Niemoller牧师(1892-1984)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.176.35.82
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1534085006.A.B47.html
1F:→ x88776544pc: 这点在 nls 的说明中 warning这块有说, 与其方法有关 08/12 23:10
2F:→ LIAR: 看到了,虽然看不懂XD,eps是甚麽啊? 08/13 23:17
3F:→ LIAR: residual sum-of-squares在不同参数下应该会变化吧?为何 08/13 23:18
4F:→ LIAR: 这样还是需要noise这点我不懂。 08/13 23:18
5F:→ andrew43: 牛顿法的过程需要超过一个方程式,但若只要单一个方程式 08/14 00:24
6F:→ andrew43: 就可以完美解释所有资料,也就不存在另一个不同的方程式 08/14 00:24
7F:→ bmka: 没搞清楚什麽是statistical model 08/15 13:08