ISLR实验:线性模型扩展
本文源自《统计学习导论:基于R语言应用》(ISLR) 中《3.6 实验:线性回归》章节
标准线性回归模型有两个最重要的假设:
- 可加性 (additive):预测变量 X_j 的变化对响应变量 Y 产生的影响与其他预测变量的取值无关。
- 线性 (linear):无论 X_j 取何值,X_j 变化一个单位引起的响应变量 Y 的变化是恒定的。
上述假设在实际问题中常常被违背。
本文介绍一些扩展的线性模型,继续使用 Boston 数据集。
library(MASS)
library(ISLR)
交互项
交互项 (interaction) 去除可加性假设,考虑变量之间的交互作用 (interaction)。
使用两个变量的乘积作为一个交互项。
lm()
支持交互项。
lstat:black
将 lstat 和 black 的交互项加入到模型中。
lstat*age
将 lstat,age 和交互项 lstat * age 作为预测变量,是 lstat + age + lstat:age
的简写
lm.fit.inter <- lm(medv~lstat * age, data=Boston)
lm.fit.inter
Call:
lm(formula = medv ~ lstat * age, data = Boston)
Coefficients:
(Intercept) lstat age lstat:age
36.0885359 -1.3921168 -0.0007209 0.0041560
summary(lm.fit.inter)
Call:
lm(formula = medv ~ lstat * age, data = Boston)
Residuals:
Min 1Q Median 3Q Max
-15.806 -4.045 -1.333 2.085 27.552
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.0885359 1.4698355 24.553 < 2e-16 ***
lstat -1.3921168 0.1674555 -8.313 8.78e-16 ***
age -0.0007209 0.0198792 -0.036 0.9711
lstat:age 0.0041560 0.0018518 2.244 0.0252 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.149 on 502 degrees of freedom
Multiple R-squared: 0.5557, Adjusted R-squared: 0.5531
F-statistic: 209.3 on 3 and 502 DF, p-value: < 2.2e-16
实验分层原则 (hierarchical principle) 规定:
如果模型中含有交互项,那么即使主效应的系数的 p 值不显著,也应包含在模型中。
虽然上述模型中 age
的 p 值较大,但 age
也应该包含在模型中。
预测变量的非线性变换
一种简单的非线性关系就是 多项式回归 (polynomial regression)。
lm()
函数支持预测变量的非线性变换。
对于预测变量 X,可以使用 I(X^2)
创建预测变量 X^2。
建立 medv 对 lstat 和 lstat^2 的回归
lm.fit.power <- lm(medv~lstat + I(lstat^2), data=Boston)
lm.fit.power
Call:
lm(formula = medv ~ lstat + I(lstat^2), data = Boston)
Coefficients:
(Intercept) lstat I(lstat^2)
42.86201 -2.33282 0.04355
summary(lm.fit.power)
Call:
lm(formula = medv ~ lstat + I(lstat^2), data = Boston)
Residuals:
Min 1Q Median 3Q Max
-15.2834 -3.8313 -0.5295 2.3095 25.4148
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 42.862007 0.872084 49.15 <2e-16 ***
lstat -2.332821 0.123803 -18.84 <2e-16 ***
I(lstat^2) 0.043547 0.003745 11.63 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.524 on 503 degrees of freedom
Multiple R-squared: 0.6407, Adjusted R-squared: 0.6393
F-statistic: 448.5 on 2 and 503 DF, p-value: < 2.2e-16
二次项的 p 值接近零,表示它使模型得到改进。
验证
使用 anova()
函数量化二次拟合在何种程度上优于线性组合。
lm.fit <- lm(medv~lstat, data=Boston)
summary(lm.fit)
Call:
lm(formula = medv ~ lstat, data = Boston)
Residuals:
Min 1Q Median 3Q Max
-15.168 -3.990 -1.318 2.034 24.500
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 34.55384 0.56263 61.41 <2e-16 ***
lstat -0.95005 0.03873 -24.53 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.216 on 504 degrees of freedom
Multiple R-squared: 0.5441, Adjusted R-squared: 0.5432
F-statistic: 601.6 on 1 and 504 DF, p-value: < 2.2e-16
anova(lm.fit, lm.fit.power)
Analysis of Variance Table
Model 1: medv ~ lstat
Model 2: medv ~ lstat + I(lstat^2)
Res.Df RSS Df Sum of Sq F Pr(>F)
1 504 19472
2 503 15347 1 4125.1 135.2 < 2.2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
模型 1 是线性模型,模型 2 是包含一次项和二次项的二次模型
anova()
通过假设检验比较两个模型。
- 零假设:这两个模型拟合效果相当
- 备择假设:二次模型效果更优
上述结果中,F 统计量为 135,p 值几乎为 0,表明二次模型远远优于一次模型。
绘图
par(mfrow=c(2, 2))
plot(lm.fit.power)
残差中可识别的规律很少
多项式拟合
使用 poly()
和 lm()
可以创建多项式拟合
5 阶多项式拟合
lm.fit.5 <- lm(medv~poly(lstat, 5), data=Boston)
summary(lm.fit.5)
Call:
lm(formula = medv ~ poly(lstat, 5), data = Boston)
Residuals:
Min 1Q Median 3Q Max
-13.5433 -3.1039 -0.7052 2.0844 27.1153
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.5328 0.2318 97.197 < 2e-16 ***
poly(lstat, 5)1 -152.4595 5.2148 -29.236 < 2e-16 ***
poly(lstat, 5)2 64.2272 5.2148 12.316 < 2e-16 ***
poly(lstat, 5)3 -27.0511 5.2148 -5.187 3.10e-07 ***
poly(lstat, 5)4 25.4517 5.2148 4.881 1.42e-06 ***
poly(lstat, 5)5 -19.2524 5.2148 -3.692 0.000247 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.215 on 500 degrees of freedom
Multiple R-squared: 0.6817, Adjusted R-squared: 0.6785
F-statistic: 214.2 on 5 and 500 DF, p-value: < 2.2e-16
上述结果表明,5 阶以下的多项式改善了模型的效果。
更高阶模型
lm.fit.8 <- lm(medv~poly(lstat, 8), data=Boston)
summary(lm.fit.8)
Call:
lm(formula = medv ~ poly(lstat, 8), data = Boston)
Residuals:
Min 1Q Median 3Q Max
-13.7394 -3.1475 -0.7329 2.0959 26.9915
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.5328 0.2317 97.233 < 2e-16 ***
poly(lstat, 8)1 -152.4595 5.2129 -29.247 < 2e-16 ***
poly(lstat, 8)2 64.2272 5.2129 12.321 < 2e-16 ***
poly(lstat, 8)3 -27.0511 5.2129 -5.189 3.08e-07 ***
poly(lstat, 8)4 25.4517 5.2129 4.882 1.41e-06 ***
poly(lstat, 8)5 -19.2524 5.2129 -3.693 0.000246 ***
poly(lstat, 8)6 6.5088 5.2129 1.249 0.212404
poly(lstat, 8)7 1.9416 5.2129 0.372 0.709703
poly(lstat, 8)8 -6.7299 5.2129 -1.291 0.197302
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.213 on 497 degrees of freedom
Multiple R-squared: 0.6838, Adjusted R-squared: 0.6787
F-statistic: 134.4 on 8 and 497 DF, p-value: < 2.2e-16
5 阶以上的多项式的 p 值不显著
对数变换
lm()
也支持其他种类的非线性变换,比如对数变换
lm.fit.log <- lm(medv~log(rm), data=Boston)
summary(lm.fit.log)
Call:
lm(formula = medv ~ log(rm), data = Boston)
Residuals:
Min 1Q Median 3Q Max
-19.487 -2.875 -0.104 2.837 39.816
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -76.488 5.028 -15.21 <2e-16 ***
log(rm) 54.055 2.739 19.73 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.915 on 504 degrees of freedom
Multiple R-squared: 0.4358, Adjusted R-squared: 0.4347
F-statistic: 389.3 on 1 and 504 DF, p-value: < 2.2e-16
定性预测变量
研究 Carseats 数据集(汽车座椅)。
head(Carseats)
names(Carseats)
[1] "Sales" "CompPrice" "Income" "Advertising" "Population" "Price"
[7] "ShelveLoc" "Age" "Education" "Urban" "US"
ShelveLoc 是定性变量,也称为 因子 (factor),表示每个地区搁架位置的质量指标,即在每个地区汽车座椅在商店内的展示空间。 有三个可能的取值,称为 水平 (levels):
- 坏:
Bad
- 中等:
Medium
- 好:
good
数据集中已指定 ShelveLoc 为 factor 类型,R 将自动生成虚拟变量。
构建一个包含交互项的多元回归模型
lm.fit.factor <- lm(
Sales~.+Income:Advertising + Price:Age,
data=Carseats
)
summary(lm.fit.factor)
Call:
lm(formula = Sales ~ . + Income:Advertising + Price:Age, data = Carseats)
Residuals:
Min 1Q Median 3Q Max
-2.9208 -0.7503 0.0177 0.6754 3.3413
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.5755654 1.0087470 6.519 2.22e-10 ***
CompPrice 0.0929371 0.0041183 22.567 < 2e-16 ***
Income 0.0108940 0.0026044 4.183 3.57e-05 ***
Advertising 0.0702462 0.0226091 3.107 0.002030 **
Population 0.0001592 0.0003679 0.433 0.665330
Price -0.1008064 0.0074399 -13.549 < 2e-16 ***
ShelveLocGood 4.8486762 0.1528378 31.724 < 2e-16 ***
ShelveLocMedium 1.9532620 0.1257682 15.531 < 2e-16 ***
Age -0.0579466 0.0159506 -3.633 0.000318 ***
Education -0.0208525 0.0196131 -1.063 0.288361
UrbanYes 0.1401597 0.1124019 1.247 0.213171
USYes -0.1575571 0.1489234 -1.058 0.290729
Income:Advertising 0.0007510 0.0002784 2.698 0.007290 **
Price:Age 0.0001068 0.0001333 0.801 0.423812
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.011 on 386 degrees of freedom
Multiple R-squared: 0.8761, Adjusted R-squared: 0.8719
F-statistic: 210 on 13 and 386 DF, p-value: < 2.2e-16
constrasts()
函数返回 R 虚拟变量的编码
contrasts(Carseats$ShelveLoc)
R 创建两个 哑变量 (dummy variable):
ShelveLocGood
:值为 1 时表示 GoodShelveLocMedium
:值为 1 是表示 Medium
两个变量值均为 0 时,表示 Bad
注意:这两个变量不能同时为 1
回归模型中,ShelveLocGood
系数为正,表明好的货架位置与高销售额相关。
ShelveLocMedium
系数为较小的正值,表明中等水平货架位置的销量比坏位置高,但比一个好位置差。
参考
https://github.com/perillaroc/islr-study
ISLR实验系列文章
线性回归
分类
重抽样方法
线性模型选择与正则化