使用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
##
##