【问题标题】:R: How to get rid of .lin in plinear nlsR:如何摆脱线形 nls 中的 .lin
【发布时间】:2014-03-08 21:17:45
【问题描述】:

说明

我正在尝试为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 上关于模型的一些问答,他们在其中讨论了加性噪声与乘性噪声(=> 误差估计?),我不太了解,因为我只有统计的基本知识。由于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

【问题讨论】:

  • 为此使用默认算法(即高斯-牛顿算法)。

标签: r regression linear-regression


【解决方案1】:

关于 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")

【讨论】:

  • 这只是从物理实验中随机选择的数据切片,其中测量了材料不同厚度的五条曲线,因此每个切片有五个点,通过一个接一个地拟合所有切片(如此处所示在其中一个上)产生另一种关系。我正在 stats.SE 上解决一个更复杂的问题,我认为它属于其中的大部分。
  • 如果数据可用,请查看两个模型的残差,如果其中一个模型的残差在零附近形成条带,但另一个模型呈扇形散开或扇入,则条带更符合假设恒定方差。
  • 我在stats.SE 上问过一个关于此的问题。残差分析很困难,因为我有 300 多个这样的拟合并且不知道要查找哪些数字。
  • 尝试绘制点,两个模型都适合同一张图。
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2017-01-19
  • 2012-11-19
  • 2016-04-14
相关资源
最近更新 更多