R:如何摆脱线性nls中的.lin

时间:2014-03-08 21:17:45

标签: r regression linear-regression

说明

我正在尝试将指数曲线拟合为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

1 个答案:

答案 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")

enter image description here

enter image description here