2
我正试图在R上实现一个Marquardt算法。我看了一下nls.lm函数的例子,并试图根据它来编写一些东西。这里是我的代码。(RESULT1是262个值的专栏中,我需要做一个最适合的指数平滑过度)R的Marquardt算法
n=seq(1:262)
x=result1
#observed values
obs<-function(nn) x[nn+1]
#exponentially smoothed values
pred<-function(p, nn) ifelse(nn==1, obs(0), p*obs(nn-1)+(1-p)*Recall(p, nn-1))
#residuals
resFun<-function(p, nn) obs(n)-pred(p, nn)
nls.out<-nls.lm(par=0.33, resFun, nn=n, control = nls.lm.control(nprint=1)))
但它不断给我这个错误。
Error in x[n + 1] : only 0's may be mixed with negative subscripts
我意识到这一定是在某处的功能定义一个可笑的愚蠢的错误,但请看看,如果你能看到我在做什么错。 当我在excel中解决这个问题时,我开始使用p = 0.33和求解器得到top = 0.55114,这基本上是我想要做的,因为它从0.33开始找到最佳值0.55114。
非常感谢您的宝贵时间。 Arpine
它的工作原理!非常感谢!唯一的是我没有包含x <-rnorm(20),它弄乱了我的x值,所以我不认为你需要它。我也必须与索引玩一下,但它的一个小东西,它完美的作品,并接近我想要的:〜0.55。 再次感谢! – 2012-04-12 11:08:13