首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nls问题:缺少值或在评估模型时产生无穷大

nls问题:缺少值或在评估模型时产生无穷大
EN

Stack Overflow用户
提问于 2015-10-22 01:18:38
回答 3查看 21.4K关注 0票数 11

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

代码语言:javascript
复制
Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

我已经多次改变了起始值,但仍然没有成功。帮助?提前谢谢你。下面是示例数据集。

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-22 01:33:09

minpack.lm拯救了我们:

代码语言:javascript
复制
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)))

如果你将start = list(Am = 8, Rd = 1, LCP = -20)传递给nls,你也会得到一个成功的拟合。

考虑到背后的科学原理,我不知道参数值是否是合理的估计。LCP可能是负的吗?

票数 19
EN

Stack Overflow用户

发布于 2020-06-04 02:03:47

问题是:

我们需要更好的初始values

  • according到
  • 的评论,我们需要约束LCP是积极的。

要做到这一点,我们可以使用nls2来获得更好的起始值,然后使用nls和端口算法来强制实施LCP的下限。请注意,LCP命中约束边界。

代码语言:javascript
复制
library(nls2)

# get starting value fit
st <- data.frame(Am = c(1, 10), Rd = c(-10, 10), LCP = c(0.5, 10))
fo <- photolrc ~ Am*(1-((1-(Rd/Am))^(1-(PARlrc/LCP))))
fm2 <- nls2(fo, start = st, alg = "brute")

# nls fit
fm <- nls(fo, start = coef(fm2), lower = c(-Inf, -Inf, 0.1), algorithm = "port")

给予:

代码语言:javascript
复制
> fm
Nonlinear regression model
  model: photolrc ~ Am * (1 - ((1 - (Rd/Am))^(1 - (PARlrc/LCP))))
   data: parent.frame()
       Am        Rd       LCP 
 7.919374 -0.007101  0.100000 
 residual sum-of-squares: 0.1858

Algorithm "port", convergence message: relative convergence (4)
票数 1
EN

Stack Overflow用户

发布于 2020-06-02 22:58:08

尝试删除所有带有零的行观察值,特别是在预测变量中,并尝试nls函数。这对我很管用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33265467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档