主成分回归克服多重共线性的R语言实现

2015-05-30 19:30汪朋
科技资讯 2015年28期
关键词:R语言

汪朋

摘要:多重共线性是回归分析中容易出现的一类重要问题,现有的克服多重共线性的方法有很多,这其中主成分回归是非常有效的一种,但该方法计算复杂,必须借助于计算软件才能完成。为此,本文在已有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.

猜你喜欢
R语言
基于Holt—Winters时间序列的图书选题预测模型
基于R语言的轿车销量分析基于R语言的轿车销量分析
基于R语言时间序列的轿车销量分析及预测
R语言在统计分析中的使用技巧
基于R语言的学生成绩分析
基于GPS轨迹数据进行分析改善城市交通拥挤
基于R语言的Moodle平台数据挖掘技术的研究
基于R语言的湖南产业结构对其经济增长贡献分析
注重统计思维培养与应用为主导的生物统计学课程建设
人民币汇率的均值回复检验及Hurst指数计算