Stata系列-如何处理多重共线性
什么是多重共线性呢?
如果在解释变量中,有某一解释变量可由其他解释变量线性表出,则称存在“严重多重共线性”。
多重共线性有什么影响呢?
当存在多重共线性时,数据矩阵X不列满秩,(X’X)-1 不存在,因此无法定义OLS估计量 β hat
多重共线性有什么表现“症状”?
1.整个方程的R2 较大,F检验也很显著,但是单个系数的t检验不显著
2.增减解释变量使得系数估计值发生较大变化
以上用数学语言刻画将表述如下:
方差 说明 说明
为此,我们定义解释变量xk的“方差膨胀因子”(VIF):
关于该因子有以下经验规则:
经验规则如何处理“多重共线性”?
- 如果不关心具体的回归系数,只关心整个方程预测被解释变量的能力,则通常不用理会多重共线性(假设整个方程是显著的)。因为多重共线性的主要后果是导致对单个变量的估计不准
- 如果关心具体的回归系数,但多重共线性并不影响所关心变量的显著性,也不用理会。
- 如果多重共线性影响到所关心变量的显著性,则应设法处理。
- 增加样本容量
- 剔除导致严重共线性的变量
- 将变量标准化
- 对模型假定进行修改
VIF*导入数据集
use grilic.dta, clear
*回归分析
qui reg lnw s expr tenure iq smsa rns
*计算VIF
estat vif
由上表可知,最大的VIF为1.2,远远小于10,因此不用担心存在多重共线性
回归分析*引入教育年限的平方项
gen s2 = s^2
*回归分析
reg lnw s s2 expr tenure smsa rns
从上表可以看出,教育年限和其平方项均不显著
VIF*计算VIF
estat vif
从上表可以看出,s和s2对应的VIF分别达到167.07和166.30,远远大于10,因此存在多重共线性
进一步看看s2和s关系如何
s2和s*将s2对s回归
reg s2 s
从上表中可以看到,R2 = 0.9939,即s可以解释s2 99.9%的变动。这说明了s和s2包含的信息基本相同,因此导致严重的多重共线性
关于变量标准化
如果回归方程中包含解释变量的多项式,则通常会导致多重共线性,一个可能解决的办法就是将变量标准化:
VIF*导入数据集
use grilic.dta, clear
*查看s的有关信息
sum s
*生成标准化变量sd
gen sd = (s-r(mean))/r(sd)
*生成标准化变量的平方项
gen sd2 = sd^2
*回归分析
qui reg lnw sd sd2 expr tenure smsa rns
*计算VIF
estat vif
由上表可以看出,VIF最大值为1.32,远小于10,可以认为不存在多重共线性
VIF*将sd2对sd回归
reg sd2 sd
从上表中可以看到,R2 = 0.1745 相对于先前的大大下降,此外由回归分析
可知sd2不显著,因此接下来去掉sd2,保留sd,再次做回归分析
回归分析*回归分析
reg lnw sd expr tenure smsa rns
由上表可知sd的回归系数为0.2291,因为sd为标准化标量,sd变化一单位,等价于s变化一个标准差,即2.231828
sd对比未将s标准化的回归
对比显然,是否将变量s标准化,对于回归结果没有任何实质性影响