主成分分析法总结.docx
《主成分分析法总结.docx》由会员分享,可在线阅读,更多相关《主成分分析法总结.docx(25页珍藏版)》请在冰豆网上搜索。
主成分分析法总结
主成分分析法总结
在实际问题研究中,多变量问题是经常会遇到的。
变量太多,无疑会增加分析问题的难度与复杂性,而且在许多实际问题中,多个变量之间是具有一定的相关关系的。
因此,人们会很自然地想到,能否在相关分析的基础上,用较少的新变量代替原来较多的旧变量,而且使这些较少的新变量尽可能多地保留原来变量所反映的信息?
一、概述
在处理信息时,当两个变量之间有一定相关关系时,可以解释为这两个变量反映此课题的信息有一定的重叠,例如,高校科研状况评价中的立项课题数与项目经费、经费支出等之间会存在较高的相关性;学生综合评价研究中的专业基础课成绩与专业课成绩、获奖学金次数等之间也会存在较高的相关性。
而变量之间信息的高度重叠和高度相关会给统计方法的应用带来许多障碍。
为了解决这些问题,最简单和最直接的解决方案是削减变量的个数,但这必然又会导致信息丢失和信息不完整等问题的产生。
为此,人们希望探索一种更为有效的解决方法,它既能大大减少参与数据建模的变量个数,同时也不会造成信息的大量丢失。
主成分分析正式这样一种能够有效降低变量维数,并已得到广泛应用的分析方法。
主成分分析以最少的信息丢失为前提,将众多的原有变量综合成较少几个综合指标,通常综合指标(主成分)有以下几个特点:
主成分个数远远少于原有变量的个数
原有变量综合成少数几个因子之后,因子将可以替代原有变量参与数据建模,这将大大减少分析过程中的计算工作量。
主成分能够反映原有变量的绝大部分信息
因子并不是原有变量的简单取舍,而是原有变量重组后的结果,因此不会造成原有变量信息的大量丢失,并能够代表原有变量的绝大部分信息。
主成分之间应该互不相关
通过主成分分析得出的新的综合指标(主成分)之间互不相关,因子参与数据建模能够有效地解决变量信息重叠、多重共线性等给分析应用带来的诸多问题。
主成分具有命名解释性
总之,主成分分析法是研究如何以最少的信息丢失将众多原有变量浓缩成少数几个因子,如何使因子具有一定的命名解释性的多元统计分析方法。
主成分分析的具体步骤如下:
(1)计算协方差矩阵
计算样品数据的协方差矩阵:
Σ=(sij)p´p,其中
i,j=1,2,…,p
(2)求出Σ的特征值
及相应的正交化单位特征向量
Σ的前m个较大的特征值l1³l2³…lm>0,就是前m个主成分对应的方差,
对应的单位特征向量
就是主成分Fi的关于原变量的系数,则原变量的第i个主成分Fi为:
Fi=
X
主成分的方差(信息)贡献率用来反映信息量的大小,
为:
(3)选择主成分
最终要选择几个主成分,即F1,F2,……,Fm中m的确定是通过方差(信息)累计贡献率G(m)来确定
当累积贡献率大于85%时,就认为能足够反映原来变量的信息了,对应的m就是抽取的前m个主成分。
(4)计算主成分载荷
主成分载荷是反映主成分Fi与原变量Xj之间的相互关联程度,原来变量Xj(j=1,2,…,p)在诸主成分Fi(i=1,2,…,m)上的荷载lij(i=1,2,…,m;j=1,2,…,p)。
:
在SPSS软件中主成分分析后的分析结果中,“成分矩阵”反应的就是主成分载荷矩阵。
(5)计算主成分得分
计算样品在m个主成分上的得分:
i=1,2,…,m
实际应用时,指标的量纲往往不同,所以在主成分计算之前应先消除量纲的影响。
消除数据的量纲有很多方法,常用方法是将原始数据标准化,即做如下数据变换:
其中:
,
根据数学公式知道,①任何随机变量对其作标准化变换后,其协方差与其相关系数是一回事,即标准化后的变量协方差矩阵就是其相关系数矩阵。
②另一方面,根据协方差的公式可以推得标准化后的协方差就是原变量的相关系数,亦即,标准化后的变量的协方差矩阵就是原变量的相关系数矩阵。
也就是说,在标准化前后变量的相关系数矩阵不变化。
根据以上论述,为消除量纲的影响,将变量标准化后再计算其协方差矩阵,就是直接计算原变量的相关系数矩阵,所以主成分分析的实际常用计算步骤是:
☆计算相关系数矩阵
☆求出相关系数矩阵的特征值
及相应的正交化单位特征向量
☆选择主成分
☆计算主成分得分
总结:
原指标相关系数矩阵相应的特征值li为主成分方差的贡献,方差的贡献率为
,
越大,说明相应的主成分反映综合信息的能力越强,可根据li的大小来提取主成分。
每一个主成分的组合系数(原变量在该主成分上的载荷)
就是相应特征值li所对应的单位特征向量。
主成分分析法的计算步骤
1、原始指标数据的标准化采集p维随机向量x =(x1,X2,...,Xp)T)n个样品xi =(xi1,xi2,...,xip)T ,i=1,2,…,n,
n>p,构造样本阵,对样本阵元进行如下标准化变换:
其中
,得标准化阵Z。
2、对标准化阵Z求相关系数矩阵
其中,
。
3、解样本相关矩阵R的特征方程
得p个特征根,确定主成分
按
确定m值,使信息的利用率达85%以上,对每个λj,j=1,2,...,m,解方程组Rb =λjb得单位特征向量
。
4、将标准化后的指标变量转换为主成分
U1称为第一主成分,U2 称为第二主成分,…,Up 称为第p主成分。
5、对m个主成分进行综合评价
对m个主成分进行加权求和,即得最终评价值,权数为每个主成分的方差贡献率
二、主成分分析的计算步骤
1、计算相关系数矩阵
rij(i,j=1,2,…,p)为原变量xi与xj的相关系数,rij=rji,其计算公式为
2、计算特征值与特征向量
解特征方程 ,常用雅可比法(Jacobi)求出特征值,并使其按大小顺序排列;
分别求出对应于特征值的特征向量,要求=1,即
其中表示向量的第j个分量。
3、计算主成分贡献率及累计贡献率
贡献率:
累计贡献率:
一般取累计贡献率达85%-95%的特征值,所对应的第1、第2、…、第m(m≤p)个主成分。
4、计算主成分载荷
5、各主成分得分
三、主成分分析法在SPSS中的操作
1、指标数据选取、收集与录入(表1)
2、Analyze→DataReduction→FactorAnalysis,弹出FactorAnalysis对话框:
3、把指标数据选入Variables框,Descriptives:
CorrelationMatrix框组中选中Coefficients,然后点击Continue,返回FactorAnalysis对话框,单击OK。
注意:
SPSS在调用FactorAnalyze过程进行分析时,SPSS会自动对原始数据进行标准化处理,所以在得到计算结果后的变量都是指经过标准化处理后的变量,但SPSS并不直接给出标准化后的数据,如需要得到标准化数据,则需调用Descriptives过程进行计算。
从表3可知GDP与工业增加值,第三产业增加值、固定资产投资、基本建设投资、社会消费品零售总额、地方财政收入这几个指标存在着极其显著的关系,与海关出口总额存在着显著关系。
可见许多变量之间直接的相关性比较强,证明他们存在信息上的重叠。
主成分个数提取原则为主成分对应的特征值大于1的前m个主成分。
特征值在某种程度上可以被看成是表示主成分影响力度大小的指标,如果特征值小于1,说明该主成分的解释力度还不如直接引入一个原变量的平均解释力度大,因此一般可以用特征值大于1作为纳入标准。
通过表4(方差分解主成分提取分析)可知,提取2个主成分,即m=2,从表5(初始因子载荷矩阵)可知GDP、工业增加值、第三产业增加值、固定资产投资、基本建设投资、社会消费品零售总额、海关出口总额、地方财政收入在第一主成分上有较高载荷,说明第一主成分基本反映了这些指标的信息;人均GDP和农业增加值指标在第二主成分上有较高载荷,说明第二主成分基本反映了人均GDP和农业增加值两个指标的信息。
所以提取两个主成分是可以基本反映全部指标的信息,所以决定用两个新变量来代替原来的十个变量。
但这两个新变量的表达还不能从输出窗口中直接得到,因为“ComponentMatrix”是指初始因子载荷矩阵,每一个载荷量表示主成分与对应变量的相关系数。
用表5(主成分载荷矩阵)中的数据除以主成分相对应的特征值开平方根便得到两个主成分中每个指标所对应的系数。
将初始因子载荷矩阵中的两列数据输入(可用复制粘贴的方法)到数据编辑窗口(为变量B1、B2),然后利用“Transform→ComputeVariable”,在ComputeVariable对话框中输入“A1=B1/SQR(7.22)”[注:
第二主成分SQR后的括号中填1.235,即可得到特征向量A1(见表6)。
同理,可得到特征向量A2。
将得到的特征向量与标准化后的数据相乘,然后就可以得出主成分表达式[注:
因本例只是为了说明如何在SPSS进行主成分分析,故在此不对提取的主成分进行命名,有兴趣的读者可自行命名。
标准化:
通过Analyze→DescriptiveStatistics→Descriptives对话框来实现:
弹出Descriptives对话框后,把X1~X10选入Variables框,在Savestandardizedvaluesasvariables前的方框打上钩,点击“OK”,经标准化的数据会自动填入数据窗口中,并以Z开头命名。
以每个主成分所对应的特征值占所提取主成分总的特征值之和的比例作为权重计算主成分综合模型,即用第一主成分F1中每个指标所对应的系数乘上第一主成分F1所对应的贡献率再除以所提取两个主成分的两个贡献率之和,然后加上第二主成分F2中每个指标所对应的系数乘上第二主成分F2所对应的贡献率再除以所提取两个主成分的两个贡献率之和,即可得到综合得分模型:
根据主成分综合模型即可计算综合主成分值,并对其按综合主成分值进行排序,即可对各地区进行综合评价比较,结果见表8。
具体检验还需进一步探讨与学习
利用Matlab编程实现主成分分析
1.1主成分分析计算步骤
计算相关系数矩阵
(1)
在(3.5.3)式中,rij(i,j=1,2,…,p)为原变量的xi与xj之间的相关系数,其计算公式为
(2)
因为R是实对称矩阵(即rij=rji),所以只需计算上三角元素或下三角元素即可。
计算特征值与特征向量
首先解特征方程
,通常用雅可比法(Jacobi)求出特征值
,并使其按大小顺序排列,即
;然后分别求出对应于特征值
的特征向量
。
这里要求
=1,即
,其中
表示向量
的第j个分量。
计算主成分贡献率及累计贡献率
主成分
的贡献率为
累计贡献率为
一般取累计贡献率达85—95%的特征值
所对应的第一、第二,…,第m(m≤p)个主成分。
计算主成分载荷
其计算公式为
(3)
得到各主成分的载荷以后,还可以按照(3.5.2)式进一步计算,得到各主成分的得分
(4)
2.程序结构及函数作用
在软件Matlab中实现主成分分析可以采取两种方式实现:
一是通过编程来实现;二是直接调用Matlab种自带程序实现。
下面主要主要介绍利用Matlab的矩阵计算功能编程实现主成分分析。
2.1程序结构
主函数
子函数
2.2函数作用
Cwstd.m——用总和标准化法标准化矩阵
Cwfac.m——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分个数;计算主成分载荷
Cwscore.m——计算各主成分得分、综合得分并排序
Cwprint.m——读入数据文件;调用以上三个函数并输出结果
3.源程序
3.1cwstd.m
%cwstd.m,用总和标准化法标准化矩阵
functionstd=cwstd(vector)
cwsum=sum(vector,1);%对列求和
[a,b]=size(vector);%矩阵大小,a为行数,b为列数
fori=1:
a
forj=1:
b
std(i,j)=vector(i,j)/cwsum(j);
end
end
3.2cwfac.m
%cwfac.m
functionresult=cwfac(vector);
fprintf('相关系数矩阵:
\n')
std=CORRCOEF(vector)%计算相关系数矩阵
fprintf('特征向量(vec)及特征值(val):
\n')
[vec,val]=eig(std)%求特征值(val)及特征向量(vec)
newval=diag(val);
[y,i]=sort(newval);%对特征根进行排序,y为排序结果,i为索引
fprintf('特征根排序:
\n')
forz=1:
length(y)
newy(z)=y(length(y)+1-z);
end
fprintf('%g\n',newy)
rate=y/sum(y);
fprintf('\n贡献率:
\n')
newrate=newy/sum(newy)
sumrate=0;
newi=[];
fork=length(y):
-1:
1
sumrate=sumrate+rate(k);
newi(length(y)+1-k)=i(k);
ifsumrate>0.85break;
end
end%记下累积贡献率大85%的特征值的序号放入newi中
fprintf('主成分数:
%g\n\n',length(newi));
fprintf('主成分载荷:
\n')
forp=1:
length(newi)
forq=1:
length(y)
result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));
end
end%计算载荷
disp(result)
3.3cwscore.m
%cwscore.m,计算得分
functionscore=cwscore(vector1,vector2);
sco=vector1*vector2;
csum=sum(sco,2);
[newcsum,i]=sort(-1*csum);
[newi,j]=sort(i);
fprintf('计算得分:
\n')
score=[sco,csum,j]
%得分矩阵:
sco为各主成分得分;csum为综合得分;j为排序结果
3.4cwprint.m
%cwprint.m
functionprint=cwprint(filename,a,b);
%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数)
fid=fopen(filename,'r')
vector=fscanf(fid,'%g',[ab]);
fprintf('标准化结果如下:
\n')
v1=cwstd(vector)
result=cwfac(v1);
cwscore(v1,result);
4.程序测试
4.1原始数据
中国大陆35个大城市某年的10项社会经济统计指标数据见下表。
城市
名称
年底
总人口
(万人)
非农业
人口比(%)
农业
总产值
(万元)
工业
总产值
(万元)
客运总量
(万人)
货运总量
(万吨)
地方财政
预算内收入(万元)
城乡居民年底储蓄余额
(万元)
在岗职工人数(万人)
在岗职工工资总额
(万元)
北京
1249.90
0.5978
1843427
19999706
20323
45562
2790863
26806646
410.80
5773301
天津
910.17
0.5809
1501136
22645502
3259
26317
1128073
11301931
202.68
2254343
石家庄
875.40
0.2332
2918680
6885768
2929
1911
352348
7095875
95.60
758877
太原
299.92
0.6563
236038
2737750
1937
11895
203277
3943100
88.65
654023
呼和浩特
207.78
0.4412
365343
816452
2351
2623
105783
1396588
42.11
309337
沈阳
677.08
0.6299
1295418
5826733
7782
15412
567919
9016998
135.45
1152811
大连
545.31
0.4946
1879739
8426385
10780
19187
709227
7556796
94.15
965922
长春
691.23
0.4068
1853210
5966343
4810
9532
357096
4803744
102.63
884447
哈尔滨
927.09
0.4627
2663855
4186123
6720
7520
481443
6450020
172.79
1309151
上海
1313.12
0.7384
2069019
54529098
6406
44485
4318500
25971200
336.84
5605445
南京
537.44
0.5341
989199
13072737
14269
11193
664299
5680472
113.81
1357861
杭州
616.05
0.3556
1414737
12000796
17883
11684
449593
7425967
96.90
1180947
宁波
538.41
0.2547
1428235
10622866
22215
10298
501723
5246350
62.15
824034
合肥
429.95
0.3184
628764
2514125
4893
1517
233628
1622931
47.27
369577
福州
583.13
0.2733
2152288
6555351
8851
7190
467524
5030220
69.59
680607
厦门
128.99
0.4865
333374
5751124
3728
2570
418758
2108331
46.93
657484
南昌
424.20
0.3988
688289
2305881
3674
3189
167714
2640460
62.08
479,555
济南
557.63
0.4085
1486302
6285882
5915
11775
460690
4126970
83.31
756696
青岛
702.97
0.3693
2382320
11492036
13408
17038
658435
4978045
103.52
961704
郑州
615.36
0.3424
677425
5287601
10433
6768
387252
5135338
84.66
696848
武汉
740.20
0.5869
1211291
7506085
9793
15442
604658
5748055
149.20
1314766
长沙
582.47
0.3107
1146367
3098179
8706
5718
323660
3461244
69.57
596986
广州
685.00
0.6214
1600738
23348139
22007
23854
1761499
20401811
182.81
3047594
深圳
119.85
0.7931
299662
20368295
8754
4274
1847908
9519900
91.26
1890338
南宁
285.87
0.4064
720486
1149691
5130
3293
149700
2190918
45.09
371809
海口
54.38
0.8354
44815
717461
5345
2356
115174
1626800
19.01
198138
重庆
3072.34
0.2067
4168780
8585525
52441
25124
898,912
9090969
223.73
1606804
成都
1003.56
0.335
1935590
5894289
40140
19632
561189
7479684
132.89
1200671
贵阳
321.50
0.4557
362061
2247934
15703
4143
197908
1787748
55.28
419681
昆明
473.39
0.3865
793356
3605729
5604
12042
524216
4127900
88.11
842321
西安
674.50
0.4094
739905
3665942
10311
9766
408896
5863980
114.01
885169
兰州
287.59
0.5445
259444
2940884
1832
4749
169540
2641568
65.83
550890
西宁
133.95
0.5227
65848
711310
1746
1469
49134
855051
27.21
219251
银川
95.38
0.5709
171603
661226
2