机器学习之线性回归(2) — 多变量线性回归

这次多变量线性回归模型用的数据集是在alr3包名叫water的数据集。

library(alr3)
data("water")
str(water)
'data.frame': 43 obs. of 8 variables:
Year : int 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 ... APMAM : num 9.13 5.28 4.2 4.6 7.15 9.7 5.02 6.7 10.5 9.1 ...
APSAB : num 3.58 4.82 3.77 4.46 4.99 5.65 1.45 7.44 5.85 6.13 ... APSLAKE: num 3.91 5.2 3.67 3.93 4.88 4.91 1.77 6.51 3.38 4.08 ...
OPBPC : num 4.1 7.55 9.52 11.14 16.34 ... OPRC : num 7.43 11.11 12.2 15.15 20.05 ...
OPSLAKE: num 6.47 10.26 11.35 11.13 22.81 ... BSAAM : int 54235 67567 66161 68094 107080 67594 65356 67909 92715 70024 ...
head(water)
Year APMAM APSAB APSLAKE OPBPC OPRC OPSLAKE BSAAM
1 1948 9.13 3.58 3.91 4.10 7.43 6.47 54235
2 1949 5.28 4.82 5.20 7.55 11.11 10.26 67567
3 1950 4.20 3.77 3.67 9.52 12.20 11.35 66161
4 1951 4.60 4.46 3.93 11.14 15.15 11.13 68094
5 1952 7.15 4.99 4.88 16.34 20.05 22.81 107080
6 1953 9.70 5.65 4.91 8.88 8.15 7.41 67594

water数据集一共有8个变量,43行观测值,最后一个特征BSAAM是响应变量,其中第一个变量是年份,与模型需要预测的响应变量无关,去除后得到新的数据集。

socal.water <-water[,-1]
head(socal.water)
APMAM APSAB APSLAKE OPBPC OPRC OPSLAKE BSAAM
1 9.13 3.58 3.91 4.10 7.43 6.47 54235
2 5.28 4.82 5.20 7.55 11.11 10.26 67567
3 4.20 3.77 3.67 9.52 12.20 11.35 66161
4 4.60 4.46 3.93 11.14 15.15 11.13 68094
5 7.15 4.99 4.88 16.34 20.05 22.81 107080
6 9.70 5.65 4.91 8.88 8.15 7.41 67594

所有数据都是数值类型,为了避免多重共线性,需要做自变量的相关性检查。

library(corrplot)
water.cor <- cor(socal.water)
corrplot(water.cor,method = "number")

water01.png

前三个自变量的特征高度相关,后三个自变量的特征也高度相关。
除了corrplot,另外一种常用的可视化的相关性检查可以通过pairs()函数。

pairs(~.,data = socal.water)

water02.png

可以看到前三个自变量的散点图呈线性分布,后三个自变量也是。
先忽略多重共线性,对数据做一次回归,后面再做特征选择。

fit <- lm(BSAAM~.,data = socal.water)
summary(fit)
Call:
lm(formula = BSAAM ~ ., data = socal.water)
Residuals:
Min 1Q Median 3Q Max
-12690 -4936 -1424 4173 18542
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 15944.7 4099.8 3.89 0.00042 ***
APMAM -12.8 708.9 -0.02 0.98572
APSAB -664.4 1522.9 -0.44 0.66524
APSLAKE 2270.7 1341.3 1.69 0.09911 .
OPBPC 69.7 461.7 0.15 0.88084
OPRC 1916.5 641.4 2.99 0.00503 **
OPSLAKE 2211.6 752.7 2.94 0.00573 **


Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7560 on 36 degrees of freedom
Multiple R-squared: 0.925, Adjusted R-squared: 0.912
F-statistic: 73.8 on 6 and 36 DF, p-value: <2e-16

第一、二、四个变量不通过假设检验,对于特征选择,我们可以选择leaps包的最优子集回归。

sub.fit <- regsubsets(BSAAM~.,data = socal.water)
best.summary <- summary(sub.fit)
names(best.summary)
[1] "which" "rsq" "rss" "adjr2" "cp" "bic" "outmat" "obj"

最常用的特征选择统计方法有四个,赤池信息量准则(AIC),马洛斯的Cp,贝叶斯信息量准则(BIC)和修正R方(Adjusted R-squared)。
AIC和Cp最求最小化,修正R方追求最大化。
最优子集回归输出了Cp、bic和修正R方三种统计方法。

which.max(best.summaryadjr2) [1] 3 which.min(best.summarybic)
[1] 3

修正R方和BIC都显示最优模型的特征数量是3个,我们可以通过Cp画出统计图。

par(mfrow=c(1,2))
plot(best.summary$cp,xlab = "number of features",ylab = "Cp")
plot(sub.fit,scale = "Cp")

最终得到的是,第三、五、六个特征生成的模型拥有最小的Cp,且通过之前的假设检验。
我们再用这三个特征生成模型观察结果。

best.fit <- lm(BSAAM~APSLAKE+OPRC+OPSLAKE,data = socal.water)
summary(best.fit)
Call:
lm(formula = BSAAM ~ APSLAKE + OPRC + OPSLAKE, data = socal.water)
Residuals:
Min 1Q Median 3Q Max
-12964 -5140 -1252 4446 18649
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 15425 3638 4.24 0.00013 ***
APSLAKE 1712 500 3.42 0.00148 **
OPRC 1798 568 3.17 0.00300 **
OPSLAKE 2390 447 5.35 4.2e-06 ***


Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7280 on 39 degrees of freedom
Multiple R-squared: 0.924, Adjusted R-squared: 0.919
F-statistic: 159 on 3 and 39 DF, p-value: <2e-16

模型拟合得很好,我们plot一下观察是否通过线性回归的统计假设检验。

par(mfrow=c(2,2))
plot(best.fit)

water04.png

通过假设检验,我们再看看之前的多重共线性问题。
多重共线性可以通过car包的vif()函数,输出方差膨胀因子(VIF)这个统计量。
VIF值最小值为1,表示根本不存在多重共线性,,一般认为VIF值超过5则说明存在严重的多重共线性。

vif(best.fit)
APSLAKE OPRC OPSLAKE
1.011 6.453 6.445

很明显,OPRC和OPSLAKE存在严重的多重共线性。
解决共线性最简单的方式就是,再不影响预测能力的前提下去除这个变量。
我们可以看看最优子集回归的best.summary。

par(mfrow=c(1,1))
plot(sub.fit,scale = "adjr2")


water05.png

统计图显示,去除了OPRC特征之后,adjr2(修正R方)仍然具有0.9的预测能力。
再次用去除OPRC之后的特征拟合模型。

fit.2 <- lm(BSAAM~APSLAKE+OPSLAKE,data = socal.water)
summary(fit.2)

Call:
lm(formula = BSAAM ~ APSLAKE + OPSLAKE, data = socal.water)

Residuals:
Min 1Q Median 3Q Max
-13336 -5893 -172 4220 19500

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 19145 3812 5.02 1.1e-05 ***
APSLAKE 1769 554 3.19 0.0027 **
OPSLAKE 3690 196 18.83 < 2e-16 ***


Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8060 on 40 degrees of freedom
Multiple R-squared: 0.905, Adjusted R-squared: 0.9
F-statistic: 190 on 2 and 40 DF, p-value: <2e-16

再plot一下看是否通过统计假设检验。

par(mfrow = c(2,2))
plot(fit.2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容