nls麻烦:评估模型时产生的缺失值或无穷大

Pla*_*pus 7 r nls

我是一个R新手试图将植物光合作用光响应曲线(饱和,曲线)适合专家接受的特定模型.目标是获得Am,Rd和LCP的估计系数值.这是我一直得到的错误:

Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model
Run Code Online (Sandbox Code Playgroud)

我已多次切换起始值,但仍然没有运气.救命?提前谢谢你.下面的示例数据集.

photolrc= c(3.089753, 6.336478, 7.737142, 8.004812, 8.031599)
PARlrc= c(48.69624, 200.08539, 499.29840, 749.59222, 1250.09363)
curvelrc<-data.frame(PARlrc,photolrc)
curve.nlslrc = nls(photolrc ~ Am*(1-((1-(Rd/Am))^(1-(PARlrc/LCP)))),start=list(Am=(max(photolrc)-min(photolrc)),Rd=-min(photolrc),LCP= (max(photolrc)-1)))
coef(curve.nlslrc)
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 15

minpack.lm救援:

library(minpack.lm)
curve.nlslrc = nlsLM(photolrc ~ Am*(1-((1-(Rd/Am))^(1-(PARlrc/LCP)))),
                   start=list(Am=(max(photolrc)-min(photolrc)),
                              Rd=-min(photolrc),
                              LCP= (max(photolrc)-1)),
                   data = curvelrc)
coef(curve.nlslrc)
  #      Am         Rd        LCP 
  #8.011311   1.087484 -20.752957

plot(photolrc ~ PARlrc, data = curvelrc)
lines(0:1300, 
      predict(curve.nlslrc, 
              newdata = data.frame(PARlrc = 0:1300)))
Run Code Online (Sandbox Code Playgroud)

结果情节

如果你传递start = list(Am = 8, Rd = 1, LCP = -20)nls你也可以获得成功.

考虑到背后的科学原因,我不知道参数值是否是合理的估计值.LCP可以消极吗?

  • 在 R 中尝试了许多 nls 例程(nls、nlmrt 并且还使用了 optim),我使用 minpack.lm 取得了迄今为止最好的成功。 (2认同)
  • 但使用时要注意假收敛! (2认同)