我正在研究变量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>
我将不胜感激
答案 0 :(得分:2)
"default"
的{{1}}算法将使用nls2
。您想指定nls
或其他算法之一来查找初始值。起始值应该是两行的数据帧,这样它将填充用潜在起始值定义的超立方体。
然后将评估每个起始值的残差平方和,并返回公式给出最小平方和的起始值。
如果您发现"brute-force"
返回的结果位于您定义的区域的边界,请扩大区域并重试。 (如果返回的起始值仍然足够好,则可能不需要此步骤。)
最后使用找到的起始值运行nls2
。
nls
请注意,对于所示数据,这两个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")