使用R对内置longley数据集进行回归分析,如果以GNP.deflator作为因变量y,问这个数据集是否存在多重共线性问题?应该选择哪些变量参与回归?
>>>>
## 查看longley的数据结构
str(longley)
## 'data.frame':
##
##
##
##
##
##
##
longly数据集中有7个变量16个观测值,7个变量均属于数值型。
首先建立全量回归模型
lm1 <- lm(GNP.deflator ~ ., data = longley)
summary(lm1)
##
## Call:
## lm(formula = GNP.deflator ~ ., data = longley)
##
## Residuals:
##
## -2.009
-0.515
##
## Coefficients:
##
##
(Intercept)
## GNP
## Unemployed
## Armed.Forces
## Population
## Year
## Employed
## ---
## Signif. codes:
##
## Residual standard error: 1.19 on 9 degrees of freedom
## Multiple
R-squared:
## F-statistic:
建立的模型结果是令人沮丧的,6个变量的显著性p值只有两个有一颗星,说明有些变量不适合用于建模。
看各自变量是否存在共线性问题。此处利用方差膨胀因子进行判断:方差膨胀因子VIF是指回归系数的估计量由于自变量共线性使得方差增加的一个相对度量。一般建议,如VIF>10,表明模型中有很强的共线性问题。
library(car)
vif(lm1, digits = 3)
##
##
##
##
从结果看,所有自变量的vif值均超过了10,其中GNP、Year更是高达四位数,存在严重的多种共线性。接下来,利用cor()函数查看各自变量间的相关系数。
plot(longley[, 2:7])
cor(longley[, 2:7])
##
## GNP
## Unemployed
## Armed.Forces 0.4464
## Population
## Year
## Employed
从散点分布图和相关系数,均可以得知,自变量间存在严重共线性。
接下来利用step()函数进行变量的初步筛选。
lm1.step <- step(lm1, direction = "backward")
## Start:
## GNP.deflator ~ GNP Unemployed Armed.Forces Population
##
##
##
## - Employed
## - Year
## -
Armed.Forces
##
## - Unemployed
## - GNP
## - Population
##
## Step:
## GNP.deflator ~ GNP Unemployed Armed.Forces Population
##
##
##
## - Year
##
## -
Armed.Forces
## - Unemployed
## - GNP
## - Population
##
## Step:
## GNP.deflator ~ GNP Unemployed Armed.Forces Population
##
##
## -
Armed.Forces
##
## - Population
## - Unemployed
## - GNP
##
## Step:
## GNP.deflator ~ GNP Unemployed Population
##
##