我正在尝试将指数曲线拟合为theta = x0 * exp(-kappa*l)
形式的数据。
我首先使用linear = lm( I(-log(temp.theta/x0)) ~ l + 0 )
,然后获得系数(k = coef(linear)
),然后使用nls(temp.theta ~ I(x0 * exp(-k*l)) + 0, algorithm = "plinear" , start = list(k=k))
,因为我不确定错误是否与lm()
具有正确的性质
这个决定来自于在stats.stackexchange上阅读一些Q& A关于他们讨论加法与乘法噪声(=>误差估计?)的模型,我不太明白,因为我只有基本的知识统计数据。由于lm()
和nls()
给出了不同的误差估计值,我直观地认为后者可能更准确。
问题是nls(... , algorithm="plinear")
产生了我想要的系数,但是我理解的.lin
事物正在乘以等式的整个右侧,因此弄乱了我的模型,因为它有仅在x0
处有拦截感。
有没有办法设置.lin = 1
或以某种方式将其关闭?
或者说:lm()
模型是否足以让我得到合理的误差估计?
(抱歉不包括一个,我觉得最好以抽象的形式提问):
l = c(0.001 , 0.002 , 0.003 , 0.004 , 0.005)
temp.theta = c(84.405 , 70.265 , 58.689 , 49.428 , 41.188)
x0 = 100
temp.lm = lm( I(-log(temp.theta/x0)) ~ l + 0 )
k=coef(temp.lm)
temp.nls = nls(temp.theta ~ I(x0 * exp(-k*l)) + 0, algorithm="plinear", start=list(k=k))
kappa=coef(temp.nls)
kappa
答案 0 :(得分:0)
关于nls模型,似乎所需的模型没有线性分量,因为x0
是固定的,所以没有理由首先使用plinear:
temp2.nls <- nls(temp.theta ~ x0 * exp(-k*l), start=list(k=k))
关于lm或nls是否更好看一下残差。看一下剩余部分的图,第一点的残差似乎突然显示它可能不遵循任何一种模型;但是,只有5分,我们真的不能说太多。
plot(resid(temp.lm), pch = 20, cex = 2, main = "lm Residuals")
plot(resid(temp2.nls), pch = 20, cex = 2, main = "nls Residuals")