使用已知截距拟合多项式

7

我正在使用lm(y~poly(x,2))来拟合我的数据的二次多项式。但是我找不到一种指定已知截距值的方法。如何使用lm拟合一个已知截距值(比如说'k')的多项式模型呢?


7
也许可以在公式中移除截距参数的 "-1",然后从数据中减去已知的截距? - BrodieG
谢谢@BrodieG。但正如Ben指出的那样,offset(k)更加明确。 - rm167
1个回答

11
 lm(y~-1+x+I(x^2)+offset(k))
  • -1 可以抑制拟合时的常数项
  • x 添加了线性项
  • I(x^2) 添加了二次项;需要用 I() 包含这个项,这样 R 才能正确解释 ^2 代表平方,而不是 x 和自己交互(按公式规则等价于仅包含 x
  • offset(k) 添加已知的常量截距

我不确定是否可以使用 poly(x,2)-1 去除截距,您可以尝试一下。从数据中减去截距应该也可以,但是使用 offset(k) 可能更加明确。您可能需要将 k 设为向量(即将其复制到数据集的长度,或者更好地将其作为列包含在数据集中,并通过 data=... 传递数据)。


“offset” 看起来是一个很好的函数来完成这个任务;但它的帮助文档有点令人困惑:“偏移量是要添加到线性预测器中的术语,例如在广义线性模型中,其已知系数为1而不是估计系数。” 已知系数1?这一定是个打字错误。 - kasterma
1
不,这只会让事情更加混乱。关键是方程变成了y=b0+b1*x1+b2*x2+1*offset而不是y=b0+b1*x1+b2*x2+b3*offset(其中b3将是“估计系数”)。 - Ben Bolker
谢谢@BenBolker。它有效了。但说实话,我并不完全理解这个公式,也找不到R的帮助。你能解释一下这个公式的每个元素或者指导我去哪里找到解释吗? - rm167
哦...我直到现在才注意到你编辑了答案。非常感谢。 - rm167
对我来说完美地工作了...除了我确实需要像你建议的那样生成一个k向量。 - guero64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接