使用lm(poly)获取公式系数

6
我正在尝试使用lm(poly)为某些点获取多项式回归,但对它返回的回归公式系数有一些疑问。
像这样的示例:
x = seq(1,100)
y = x ^ 2 + 3 * x + 7
fit = lm(y〜poly(x,2))
结果是: lm(formula = y〜poly(x,2)) 系数:
(Intercept)poly(x,2)1 poly(x,2)2
3542 30021 7452
为什么系数不是7,3,2?
非常感谢!

1
尝试一下:lm(y~x+I(x^2))lm(y~poly(x, 2, raw=TRUE)) - Ferdinand.kraft
@Ferdinand.kraft 抱歉,我不知道,那我们就关闭这个问题吧。 - dickoa
危险!危险,威尔·罗宾逊 ::: 如果您正在使用多项式回归进行推论目的,则使用原始变量将非常误导。 - IRTFM
@42- 你能解释一下为什么吗,或者提供一个解释的链接吗? - Gimelist
查找“正交多项式”。 - IRTFM
1个回答

11

如果您不想使用默认的正交多项式,需要将raw参数设置为TRUE。

set.seed(101)
N <- 100
x <- rnorm(N, 10, 3)
epsilon <- rnorm(N)
y <- 7 + 3 * x + x^2 + epsilon

coef(lm(y ~ poly(x, 2, raw = TRUE)))

##             (Intercept) poly(x, 2, raw = TRUE)1 
##                  7.8104                  2.7538 
## poly(x, 2, raw = TRUE)2 
##                  1.0150

通过 poly 函数的帮助文件,您已经获得了:

描述:

 Returns or evaluates orthogonal polynomials of degree 1 to
 ‘degree’ over the specified set of points ‘x’. These are all
 orthogonal to the constant polynomial of degree 0.  Alternatively,
 evaluate raw polynomials.

如果真的需要,可以使用原始多项式而非正交多项式。

但你也可以使用 Ferdinand 建议的方法,它同样有效。

coef(lm(y ~ x + I(x^2)))
## (Intercept)           x      I(x^2) 
##      7.8104      2.7538      1.0150 

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