汪朋
摘要:多重共线性是回归分析中容易出现的一类重要问题,现有的克服多重共线性的方法有很多,这其中主成分回归是非常有效的一种,但该方法计算复杂,必须借助于计算软件才能完成。为此,本文在已有R函数的基础上,通过自编一定的R函数和代码,探讨了应用R语言实现主成分回归的过程。最后的案例表明,通过R语言实现主成分回归来克服模型的多重共线性,过程简单,效果明显,且容易被学习者和应用者掌握。
关键词:主成分回归 多重共线性 R语言
中图分类号: 文献标识码:A 文章编号:1672-3791(2015)03(b)-0000-00
1引言
回归模型是应用最为广泛的统计模型之一,常被用来处理多变量间相依关系问题,而多重共线性问题是回归分析中一个非常棘手的问题,最早是R.Frisch提出。大量实践表明,当模型存在严重的多重共线性时,模型的参数估计变得不够稳定,甚至出现估计的回归系数与其实际意义不相符,模型的显著性检验和预测功能失效等严重后果。正因如此,从20世纪六七十年代至今,人们提出了多种方法来克服模型的多重共线性,比较常用的有逐步回归法、岭回归法和主成分回归法等。逐步回归法是剔除变量,容易造成信息损失和结构分析的预期目的难以实现的问题;岭回归法要求选择比较准确的岭参数,而岭参数的选择主观性很强;相比之下,主成分回归法通过将自变量分解成几个不相关的主成分,能完全克服模型的多重共线性,且选择的主成分能基本上概括原变量的信息,使得主成分回归法成为克服多重共线性中的一种较为有效的方法,但该方法计算复杂,需要借助于计算软件才能完成。目前主流的统计软件虽一般提供了主成分分析的功能,都基本上没有直接实现主成分回归的模块,因此,本文在R语言提供的主成分分析的函数的基础上,通过自编相关的函数,来探讨如何快速简便地运用主成分回归法克服回归模型的多重共线性。
二、主成分回归法的R语言实现过程
主成分回归法是利用主成分分析找到解释变量的若干个主成份,由于主成份之间是互不相关的,因此考虑将被解释变量关于这些主成份进行回归,可以消除模型的多重共线性。
应用R语言克服模型的多重共线性,具体步骤如下:
(1)运用princomp( )函数进行主成分分析,使用方法如下:
pr = princomp(~X1+X2+…4+Xk, cor=TRUE )
这里cor =TRUE表示用样本的相关矩阵R作主成分分析,cor=FALSE(默认值),表示用样本的协方差作主成分分析。
在这一步中还可以使用summmary( )函数来提取因子载荷矩阵等模型的各项信息。
(2)根据(1)中得到的结果选定主成分z1,z2,…,zm,然后将被解释变量关于这些主成分进行回归,代码如下:
pre=predict(pr)
z1=pre[,1]
z2=pre[,2]
…………
zm=pre[,m]
model.pr=lm(Y~z1+z2+…+zm)
summary(model.pr)
(3)运用自编函数将主成分回归模型转换为关于原变量的回归模型,自编函数的代码如下:
prc.trans=function(formula, prc.object){
object=lm(formula); X=as.matrix(object$model)[,-1]
pr=princomp(~X, cor=TRUE); A=loadings(pr)
apha=coef(prc.object); n=length(apha)
if (n<=2){
beta=A[,1:n-1]*apha[2:n] }
else {
beta=A[,1:n-1]%*%apha[2:n] }
xbar=apply(X,2,mean); s=sd(X)
b=beta/s; b0=apha[1]-sum(b*xbar)
coefficients=c(b0,b)
coefficients=as.matrix(coefficients)
rownames(coefficients)=rownames(summary(object)$coefficients)
colnames(coefficients)="Estimate"
coefficients
}
該函数的prc.object参数为做主成分回归所返回的对象。
有了上面的prc.trans( )函数,就可、可以很方便地将进行系数转换了,转换代码如下:
prc.trans(Y~X1+X2+…+Xk, model.pr)
三、案例分析
为了验证上节内容的可行性,下面选取1991—2013年西藏第三产业及一些影响因素的数据来验证上节提出的方法和结论。
根据经济学的有关理论和经验知,第三产业的发展主要与第三产业的规模、最终消费、资本形成总额、本国交通运输规模等因素有关。为此考虑
——第三产业从业人员数(反映第三产业的规模);
——财政支出(最终消费的构成因素);
——全区居民消费水平(最终消费的影响因素);
——全社会的固定资产投资(GDP的影响因素);
——旅客周转量(反映交通运输规模)。
对西藏第三产业总产值Y的影响,从而寻找影响西藏第三产业发展的关键因素。有关数据见表1。
表1 西藏1991—2012年第三产业产值及其影响因素的数据
年份
第三产业总值(亿元)
第三产业从业人员数(万人)
财政支出(万元)
全区居民消费水平(元/人)
全社会固定资产投资(万元)
旅客周转量(亿人公里)
1991
10.03
16.67
129242
735
76105
3.90
1992
10.86
18.28
150018
839
105665
3.65
1993
12.24
19.47
166120
903
133297
4.08
1994
13.63
18.80
216012
931
181458
4.11
1995
16.97
21.92
302998
1110
211718
4.65
1996
19.39
19.96
348749
1202
369492
4.80
1997
26.46
22.14
381195
1312
303605
5.24
1998
31.13
23.08
390961
1471
345495
5.29
1999
39.99
24.08
461966
1551
427457
5.53
2000
47.86
25.26
544223
1669
566030
5.78
2001
54.37
25.85
616108
1823
665044
6.20
2002
69.65
28.52
1062067
1939
857725
6.42
2003
89.56
32.46
1398904
2725
1089868
6.71
2004
96.76
35.31
1481966
2825
1386165
6.49
2005
123.30
38.15
1360690
2950
1684361
7.09
2006
137.24
43.61
1891612
3019
1961916
18.40
2007
159.76
46.60
2023024
2990
2323503
22.00
2008
188.06
52.45
2793631
3215
2711811
27.00
2009
218.67
57.00
3840173
3504
3099304
30.39
2010
240.85
58.72
4711288
4027
3794158
30.00
2011
274.82
61.58
5625834
4326
4632585
42.94
2012
322.57
69.57
7756827
4730
5492690
45.17
2013
377.8
81.36
9339713
5340
7099822
47.29
數据来源:《西藏统计年鉴(2014)》
作出Y关于各解释变量之间的散点图如下:
图1 被解释变量Y与各解释变量之间的散点图
根据图1,可以发现,Y与各变量之间都大致成线性的关系,因此总体回归模型可设为
(8)
为检验模型是否存在多重共线性,可计算得到各解释变量之间相关系数矩阵如下:
表2 各解释变量之间的相关系数矩阵
X1
X2
X3
X4
X5
X1
1.0000000
0.9574153
0.9806276
0.9826848
0.9649556
X2
0.9574153
1.0000000
0.9282874
0.9906462
0.9600453
X3
0.9806276
0.9282874
1.0000000
0.9582267
0.9164908
X4
0.9826848
0.9906462
0.9582267
1.0000000
0.9707032
X5
0.9649556
0.9600453
0.9164908
0.9707032
1.0000000
由相关系数矩阵可以看出,各解释变量相互之间的相关系数较高,证实原模型确实存在严重多重共线性。
下面在R语言中应用主成分回归法来克服模型的多重共线性。
首先,进行主成分分析,运用的函数为princomp( ),对于本案例数据,代码如下:
pr=princomp(~X1+X2+X3+X4+X5, cor=TRUE)
summary(pr,loadings=TRUE)
运行结果如下:
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
Proportion of Variance 0.9689 0.0198 0.0092 0.0015 0.0006
Cumulative Proportion 0.9689 0.9887 0.9979 0.9994 1.0000
从这个结果中可以看到,前两个主成分的累计贡献率已达到98.6%,包含了原5个变量的绝大部分信息,因此可以舍去另外三个主成分。考虑Y与前两个主成分之间的回归,并将其转换为Y关于原解释变量的回归,所需代码如下:
pre=predict(pr)
z1=pre[,1]
z2=pre[,2]
model.pr=lm(Y~z1+z2)
prc.trans(Y~X1+X2+X3+X4+X5,model.pr)
运行结果为:
prc.trans(Y~X1+X2+X3+X4+X5,model.pr)
运行结果为:
Estimate
(Intercept) -4.049499e+01
X1 1.373448e+00
X2 6.272358e-06
X3 2.369798e-02
X4 1.038333e-05
X5 1.010673e+00
于是得到用主成分回归法得到的最终模型为:
(11)
从模型的结果上看,得到的回归系数基本上在合理的经济意义范围内。
四、结束语
主成分回归法是近些年应用得较多的一种新方法,相比于其他方法,能完全消除模型多重共线性,可以比较精准的作出关于所有解释变量的经济结构分析,但该方法相对较复杂,尤其是在将关于主成分的回归转换为关于原变量的回归上。因此,主成分回归的实现不应用计算软件是很难实现的,而大多数软件并没有提供直接实现主成分回归的功能,应用时较为困难。本文在已有R语言函数的基础上,通过自编系数转换函数prc.trans( ),较为完整地实现了主成分回归的过程。最后的案例表明,应用主成分回归来克服模型的多重共线性,结果十分理想,而应用R语言来实现主成分回归,过程简单,结果明确,易学易懂,且通過对R语言实现主成分回归的过程的把握和对相应结果的理解,有助于计量经济学习者和应用者把握主成分回归背后的思想和原理,这是其他计算软件,尤其是菜单式界面操作软件所不能比拟的。
参考文献
[1] 李子奈.计量经济学(第三版)[M].北京:高等教育出版社,2010:134-143.
[2] 何晓群.《多元统计分析》(第三版)[M].中国人民大学出版社,2004:114-125.
[3] 刘国旗.多重共线性的产生原因及其诊断处理[J].合肥工业大学学报:自然科学版,2001,24 (4):607-610.
[4] 马雄威.线性回归方程中多重共线性诊断方法及其实证分析[J].华中农业大学学报(社会科学版),2008,2:49-54.