R 中 I(x^3) 和 poly(x,3) 之间的差异进行回归

run*_*rds 4 statistics r

我是 R 的初学者,所以请原谅。我对文档没有足够的理解来区分这三种形式的 I() 和 poly() 工作方式之间的区别

使用 mtcars 数据集...

xx=lm(mpg~hp+I(hp^2)+I(hp^3), data=mtcars)
yy=lm(mpg~I(hp^3), data=mtcars)
zz=lm(mpg~poly(hp,3), data=mtcars)
summary(xx)
summary(yy)
summary(zz)
Run Code Online (Sandbox Code Playgroud)

所有返回差异结果。我以为 ZZ 会给我与 XX 甚至 YY 相同的结果,但事实并非如此。再一次,如果有人能向我解释这一点,那就太好了

Jam*_*mes 5

I(x^3)生成一个三阶项,其系数将由 估计lm

poly(x,3)将生成三阶多项式,因此将为 的线性、二阶和三阶项提供系数x。但是,默认情况下,这些将是0 次常数多项式的正交多项式,并且系数不会是您所期望的。为避免这种情况,请使用参数raw=TRUE

coef(xx) ## All terms
  (Intercept)            hp       I(hp^2)       I(hp^3) 
 4.422493e+01 -2.945289e-01  9.114683e-04 -8.701086e-07 
coef(yy) ## Only the intercept and third order term
  (Intercept)       I(hp^3) 
 2.241691e+01 -4.312463e-07 
coef(zz) ## Orthogonal polynomials
 (Intercept) poly(hp, 3)1 poly(hp, 3)2 poly(hp, 3)3 
   20.090625   -26.045592    13.154568    -2.241893 
coef(lm(mpg~poly(hp,3,raw=TRUE),data=mtcars)) ## Same as coef(xx)
             (Intercept) poly(hp, 3, raw = TRUE)1 poly(hp, 3, raw = TRUE)2 
            4.422493e+01            -2.945289e-01             9.114683e-04 
poly(hp, 3, raw = TRUE)3 
           -8.701086e-07 
Run Code Online (Sandbox Code Playgroud)

但是,如果您不使用正交多项式,您可能会遇到术语之间的相关性问题,这就是默认设置的原因。