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

标签 r statistics

我是 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)

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

最佳答案

I(x^3) 生成一个三阶项,其中的系数将由 lm 估计。
poly(x,3) 将生成三阶多项式,因此将为 x 的线性、二阶和三阶项提供系数。但是,默认情况下,这些将是 orthogonal polynomials 到 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 

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

关于r - R 中 I(x^3) 和 poly(x,3) 之间的差异进行回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25161423/

相关文章:

statistics - 考虑先前的变化/改进率

apache-spark - 如何使用 KMeans 在 Spark 中对推文进行聚类?

r - 如何将密度对象转换为函数

r - 在运行时在 lapply 包装器中打印消息

R:如何写出一个 data.frame 以便我可以将它粘贴到 SO 中供其他人阅读?

r - `expss` 和 `data.table` 一起玩得不好

c++ - 如何查看用 C/C++ 编写的函数的源代码?

r - 对名称以模式开头的所有列求和的最有效方法是什么?

r - 为什么 Pearson 相关输出为 NaN?

R - 如何按组进行回归并获取预测值?