参考资料:R语言实战【第2版】
1、线性模型假设的综合验证
gvlma包中的gvlma()函数,能对线性模型进行综合验真,同时还能做偏斜度、峰度和异方差性的评价。也就是说,它给模型提供了一个单独的综合验证(通过/不通过)。
# 加载gvlma包
library(gvlma)
# 获取数据
states<-as.data.frame(state.x77[,c("Murder","Population",
"Illiteracy","Income","Frost")])
# 拟合多元线性模型
fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
# gvlma综合验证
gvlma(fit)
结果显示:Global stat 的p值为0.597,即数据满足OLS(普通最小二乘法)回归模型所有的统计假设。如果Global stat 的p值小于0.05,我们则需要对数据进行逐项排查与验证(正态性、误差独立性、线性、同方差性等)
2、多重共线性
假设我们正在进行一项握力研究,自变量包括DOB( Date Of Birth,出生日期)和年龄。我们用握力对DOB和年龄进行回归, F检验显著, p<0.001。但是当我们观察DOB和年龄的回归系数时,却发现它们都不显著(也就是说无法证明它们与握力相关)。到底发生了什么呢?
原因是DOB与年龄在四舍五入后相关性极大。回归系数测量的是当其他预测变量不变时,某
个预测变量对响应变量的影响。那么此处就相当于假定年龄不变,然后测量握力与年龄的关系,这种问题就称作多重共线性( multicollinearity)。它会导致模型参数的置信区间过大,使单个系数解释起来很困难。
多重共线性可用统计量VIF(Variance Inflation Factor,方差膨胀因子)进行检验。VIF的平方根表示变量回归参数的置信区间能膨胀为与模型无关的预测变量的程度(因此而得名)。car包中的vif()函数提供了VIF值。一般原则下,VIF>4就表示存在多重共线性。
# 加载car包
library(car)
vif(fit)
vif(fit)>4
结果显示,自变量见不存在多重共线性。