我有

library(ISLR)
attach(Wage)

# Polynomial Regression and Step Functions

fit=lm(wage~poly(age,4),data=Wage)
coef(summary(fit))

fit2=lm(wage~poly(age,4,raw=T),data=Wage)
coef(summary(fit2))

plot(age, wage)
lines(20:350, predict(fit, newdata = data.frame(age=20:350)), lwd=3, col="darkred")
lines(20:350, predict(fit2, newdata = data.frame(age=20:350)), lwd=3, col="darkred")

预测线似乎是相同的,但为什么系数如此不同?你如何在raw=Traw=F中理解它们.

我看到poly(...,raw=T)产生的系数与~age+I(age^2)+I(age^3)+I(age^4)匹配.

如果我想使用系数"手动"(不使用predict()函数)获得预测,有什么我应该注意的吗?如何解释poly()中正交多项式的系数.

推荐答案

默认情况下,使用raw = FALSEpoly()计算正交多项式.它用原始编码x,x^2,x^3...首先,然后zoom 列,使每列与前一列正交.这不会改变拟合值,但有一个优点,即可以看到多项式中的某个阶数是否显著改善了较低阶数的回归.

考虑简单的cars数据,响应停止distANCE和驱动speed.物理上,这应该是一个二次关系,但在这个(旧)数据集中,二次项并不重要:

m1 <- lm(dist ~ poly(speed, 2), data = cars)
m2 <- lm(dist ~ poly(speed, 2, raw = TRUE), data = cars)

在正交编码中,在summary(m1)中可以得到以下系数:

                Estimate Std. Error t value Pr(>|t|)    
(Intercept)       42.980      2.146  20.026  < 2e-16 ***
poly(speed, 2)1  145.552     15.176   9.591 1.21e-12 ***
poly(speed, 2)2   22.996     15.176   1.515    0.136    

这表明存在非常显著的线性效应,而二阶效应不显著.后一个p值(即多项式中的最高阶之一)与原始编码中的p值相同:

                            Estimate Std. Error t value Pr(>|t|)
(Intercept)                  2.47014   14.81716   0.167    0.868
poly(speed, 2, raw = TRUE)1  0.91329    2.03422   0.449    0.656
poly(speed, 2, raw = TRUE)2  0.09996    0.06597   1.515    0.136

但较低阶的p值变化很大.原因是,在模型m1中,回归系数是正交的,而在m2中,回归系数是高度相关的:

cor(model.matrix(m1)[, 2], model.matrix(m1)[, 3])
## [1] 4.686464e-17
cor(model.matrix(m2)[, 2], model.matrix(m2)[, 3])
## [1] 0.9794765

因此,在原始编码中,只有在模型中保留speed^2时,才能解释p值speed.由于这两个回归系数高度相关,其中一个可以忽略.然而,在正交编码中,speed^2仅捕获尚未被线性项捕获的二次部分.然后很明显,线性部分是显著的,而二次部分没有额外的显著性.

R相关问答推荐

在ubuntu 22.04上更新到R4.4后包安装出现编译错误

使用sensemakr和fixest feols模型(R)

格点中指数、双曲和反双曲模型曲线的正确绘制

为什么在ggplot2中添加geom_text这么慢?

计算具有奇数日期的运行金额

以更少间隔的较小表中的聚合离散频率表

有效识别长载体中的高/低命中

R Select()可以测试不存在的子集列

按时间顺序对不同事件进行分组

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

如何移除GGPlot中超出与面相交的任何格网像元

将多个变量组合成宽格式

无法将条件case_when()应用于使用!!创建的新变量Mutations

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

使用ifElse语句在ggploy中设置aes y值

R没有按顺序显示我的有序系数?

如何在访问之前下载的输入时同时上传和处理所有指定的shiny 输入?

具有由向量定义的可变步长的序列

在直方图中显示两个变量

根据用户输入更改标记大小和 colored颜色 (R)