R-Logistic和Gompertz曲线中非线性最小余弦的误差。

时间:2018-09-08 21:26:26

标签: r nls non-linear-regression convergence

我正在研究变量y的模型,其中打算将时间用作解释变量。我选择了Gompertz和logistic曲线作为候选,但是当我尝试估计系数(同时使用nls和nls2)时,最终会得到不同的误差(奇异性或阶跃因子降低到'minFactor'以下)。我真的很感谢您的帮助。这是我的代码和信息对象的代理版本。

我根据http://www.metla.fi/silvafennica/full/sf33/sf334327.pdf的条件选择了初始值

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.4/vue.min.js"></script>
<template id="example-component">
  <div>
    <p>The Queue has {{ this.queue.length }} items.</p>
    <input
      v-model="purchase.quantity"
      type="number"
      min="1"
      name="product"
      placeholder="Quantity"
    >
    <button @click="queuePurchase">
      Add to Queue
    </button>
    <pre>{{ JSON.stringify(this.queue, null, 2) }}</pre>
  </div>
</template>

<div class="page">
  <example-component></example-component>
</div>

我将不胜感激

1 个答案:

答案 0 :(得分:2)

"default"的{​​{1}}算法将使用nls2。您想指定nls或其他算法之一来查找初始值。起始值应该是两行的数据帧,这样它将填充用潜在起始值定义的超立方体。

然后将评估每个起始值的残差平方和,并返回公式给出最小平方和的起始值。

如果您发现"brute-force"返回的结果位于您定义的区域的边界,请扩大区域并重试。 (如果返回的起始值仍然足够好,则可能不需要此步骤。)

最后使用找到的起始值运行nls2

nls

screenshot

注意

请注意,对于所示数据,这两个2参数指数模型非常吻合,因此,如果您仅对指数增长的范围感兴趣,则可以考虑使用这些替代方法。 (下面的第一个较好,因为系数彼此更相似。第二个可能存在缩放问题。)

library(nls2)

## 1

fo1 <- y ~ alpha*exp(-beta*exp(-gamma*t))
st1 <- data.frame(alpha = c(10, 100), beta = c(1, 100), gamma = c(0.01, 0.20))
fm1.0 <- nls2(fo1, data = info, start = st1, algorithm = "brute-force")

fm1 <- nls(fo1, data = info, start = coef(fm1.0))

## 2

fo2 <- y ~ alpha/(1+beta*exp(-gamma*t))
st2 <- data.frame(alpha = c(10, 1000), beta = c(1, 10000), gamma = c(0.01, 0.20))
fm2.0 <- nls2(fo2, data = info, start = st2, algorithm = "brute-force")

fm2 <- nls(fo2, data = info, start = coef(fm2.0))

# plot both fits

plot(y ~ t, info)
lines(fitted(fm1) ~ t, info, col = "blue")
lines(fitted(fm2) ~ t, info, col = "red")