https://blog.csdn.net/nanhaiyuhai/article/details/79304671

主成分分析又称主分量分析,由皮尔逊在1901年首次引入,后来由霍特林在1933年进行了发展。主成分分析是一种通过降维技术把多个变量化为少数几个主成分(即综合变量)的多元统计方法,这些主成分能够反映原始变量的大部分信息,通过表示为原始变量的线性组合,为了使得这些主成分所包含的信息互不重叠,要求各主成分之间互不相关。主成分分析在很多领域都有广泛的应用,一般来说,当研究的问题涉及多个变量,并且变量间相关性明显,即包含的信息有所重叠时,可以考虑用主成分分析的方法,这样更容易抓住事物的主要矛盾,使问题简化。

1. 主成分分析的几何意义

假设从二元总体x=(x1,x2)'中抽取容量为n的样本,绘制样本观测值的散点图,如图所示。从图中可以看出,散点大致分布在一个椭圆内,x1与x2呈现出明显的线性相关性。这n个样品在x1轴方向和x2轴方向具有相似的离散度,离散度可以用x1和x2的方差来表示,这里的x1和x2包含了近似相等的信息量,丢掉其中的任意一个变量,都会损失比较多的信息。将图中坐标按逆时针旋转一个角度θ,使得x1轴旋转到椭圆的长轴方向F1,x2轴旋转到椭圆的短轴方向F2,则有

F1=x1cosθ+x2sinθ

F2=-x1sinθ+x2cosθ

此时可以看到n个点在新坐标系下的坐标F1和F2几乎不相关,并且F1的方差要比F2的方差大得多,也就是说F1包含了原始数据中大部分的信息,此时丢带变量F2,信息的损失是比较小的。称F1为第一主成分,F2为第2主成分。

主成分分析的过程其实就是坐标系旋转的过程,新坐标系的各个坐标轴方向是原始数据变差最大的方向,个主成分表达式就是新旧坐标变换关系式。

2. 主成分分析的MATLAB函数

与主成分分析相关的MATLAB函数有pcacov、princomp函数

(1)pcacov函数

pcacov函数用来根据协方差矩阵或相关系数矩阵进行主成分分析,调用格式如下:

COEFF=pcacov(V)

[COEFF,latent]=pcacov(V)

[COEFF,latent,explained]=pcacov(V)

以上调用的输入参数V是总体或样本的协方差矩阵或相关系数矩阵,对于p维总体,V是pxp的矩阵。输出参数COEFF是p个主成分的系数矩阵,它是pxp的矩阵,它的第i列是第i个主成分的系数向量。输出参数latent是p个主成分的方差构成的向量,即V的p个特征值的大小(从大到小)构成的向量。输出参数explained是p个主成分的贡献率向量,已经转化为百分比。

(2)princomp函数

princomp函数用来根据样本观测值矩阵进行主成分分析,其调用格式如下:

<1>[COEFF,SCORE]=princomp(X)

根据样本观测值矩阵X进行主成分分析。输入参数X是n行p列的矩阵,每一行对应一个观测(样品),每一列对应一个变量。输出参数COEFF是p个主成分析的系数矩阵,他是pxp的矩阵,它的第i列对应第i个主成分的系数向量。输出参数SCORE是n个样品的p个主成分得分矩阵,它是n行p列的矩阵,每一行对应一个观测,每一列对应一个主成分,第i行第j列元素表示第i个样品的第j个主成分得分,SCORE与X是一 一对应的关系,是X在新坐标系中的数据,可以通过X*系数矩阵得到。

<2>[COEFF,SCORE,latent]=princomp(X)

返回样本协方差矩阵的特征值向量latent,它是由p个特征值构成的列向量,其中特征值按降序排列。

<3>[COEFF,SCORE,latent,tsquare]=princomp(X)

返回一个包含n个元素的列向量tsquare,它的第i个元素的第i个观测对应的霍特林T^2统计量,表述了第i个观测与数据集(样本观测矩阵)的中心之间的距离,可用来寻找远离中心的极端数据。

<4>[......]=princomp(X,‘econ’)

通过设置参数‘econ’参数,使得当n<=p时,只返回latent中的前n-1个元素(去掉不必要的0元素)及COEFF和SCORE矩阵中相应的列。

3.从协方差矩阵或相关系数矩阵出发求解主成分

在指定服装标准的过程中,对128名成年男子的身材进行了测量,每人测量了六项指标:身高(x1)、坐高(x2)、胸围(x3)、手臂长(x4)、肋围(x5)和腰围(x6),样本相关系数矩阵如下表所示。根据样本相关系数矩阵进行组成分分析。

变量

身高(x1)

坐高(x2)

胸围(x3)

手臂长(x4)

肋围(x5)

腰围(x6)

身高(x1)

1

0.79

0.36

0.76

0.25

0.51

坐高(x2)

0.79

1

0.31

0.55

0.17

0.35

胸围(x3)

0.36

0.31

1

0.35

0.64

0.58

手臂长(x4)

0.76

0.55

0.35

1

0.16

0.38

肋围(x5)

0.25

0.17

0.64

0.16

1

0.63

腰围(x6)

0.51

0.35

0.58

0.38

0.63

1

(1)调用pcacov函数做主成分分析

%定义相关系数矩阵PHO

PHO = [1     0.79    0.36    0.76    0.25    0.51

0.79  1       0.31    0.55    0.17    0.35

0.36  0.31    1       0.35    0.64    0.58

0.76  0.55    0.35    1       0.16    0.38

0.25  0.17    0.64    0.16    1       0.63

0.51  0.35    0.58    0.38    0.63    1

];

%调用pcacov函数根据相关系数矩阵作主成分分析

% 返回主成分表达式的系数矩阵COEFF,返回相关系数矩阵的特征值向量latent和主成分贡献率向量explained

[COEFF,latent,explained] = pcacov(PHO)

COEFF =

0.4689   -0.3648   -0.0922    0.1224    0.0797    0.7856

0.4037   -0.3966   -0.6130   -0.3264   -0.0270   -0.4434

0.3936    0.3968    0.2789   -0.6557   -0.4052    0.1253

0.4076   -0.3648    0.7048    0.1078    0.2346   -0.3706

0.3375    0.5692   -0.1643    0.0193    0.7305   -0.0335

0.4268    0.3084   -0.1193    0.6607   -0.4899   -0.1788

latent =

3.2872

1.4062

0.4591

0.4263

0.2948

0.1263

explained =

54.7867

23.4373

7.6516

7.1057

4.9133

2.1054

% 为了更加直观,以元胞数组形式显示结果

result1(1,:) = {'特征值', '差值', '贡献率', '累积贡献率'};

result1(2:7,1) = num2cell(latent);

%diff函数式用于求导数和差分的.

result1(2:6,2) = num2cell(-diff(latent));

%cumsum函数通常用于计算一个数组各行的累加值。

result1(2:7,3:4) = num2cell([explained, cumsum(explained)])

result1 =

'特征值'       '差值'        '贡献率'        '累积贡献率'

[3.2872]    [1.8810]    [54.7867]    [ 54.7867]

[1.4062]    [0.9471]    [23.4373]    [ 78.2240]

[0.4591]    [0.0328]    [ 7.6516]    [ 85.8756]

[0.4263]    [0.1315]    [ 7.1057]    [ 92.9813]

[0.2948]    [0.1685]    [ 4.9133]    [ 97.8946]

[0.1263]          []    [ 2.1054]    [100.0000]

%由result1可以看出,前三个主成分累积功效率为85.8756%,因此可以只用前3个主成分进行后续分析

% 以元胞数组形式显示前3个主成分表达式

s = {'标准化变量';'x1:身高';'x2:坐高';'x3:胸围';'x4:手臂长';'x5:肋围';'x6:腰围'};

result2(:,1) = s ;

result2(1, 2:4) = {'Prin1', 'Prin2', 'Prin3'};

result2(2:7, 2:4) = num2cell(COEFF(:,1:3))

result2 =

'标准化变量'     'Prin1'     'Prin2'      'Prin3'

'x1:身高'     [0.4689]    [-0.3648]    [-0.0922]

'x2:坐高'     [0.4037]    [-0.3966]    [-0.6130]

'x3:胸围'     [0.3936]    [ 0.3968]    [ 0.2789]

'x4:手臂长'    [0.4076]    [-0.3648]    [ 0.7048]

'x5:肋围'     [0.3375]    [ 0.5692]    [-0.1643]

'x6:腰围'     [0.4268]    [ 0.3084]    [-0.1193]

为了使结果更加直观,定义了两个元胞数组:result1和result2,用result1存储特征值、贡献率和累积贡献率等数据。result2存放前3个主成分表达式的系数数据,即 COEFF矩阵的前3列。这样做的目的仅仅是为了直观。

(2)结果分析

从result1的结果来看,前3个主成分的累积贡献率达到了85.8756%,因此可以只用前3个主成分进行后续的分析,这样虽然会有一定的信息损失,但是损失不大,不影响大局、result2中列出了前3个主成分的相关结果,可知前3个主成分的表达式分布为:

y1=0.4689x1+0.4037x2+0.3936x3+0.4076x4+0.3375x5+0.4268x6

y2=-0.3648-0.3966x2+0.3968x3-0.3648x4+0.5692x5+0.3084x6

y3=-0.0922x1-0.6130x2+0.2789x3+0.7048x4-0.1643x5-0.1193x6

从第一主成分y1的表达式来看,它在每个每个标准化变量上有相近的正载荷,说明每个标准变化量对y1的重要性都差不多。当一个人的身材是“五大三粗”,也就是说又高又胖时,x1,x2,....,x6都比较大时,此时y1的值就比较大;反之,当一个人又矮又瘦时,x1,x2.....,x6都比较小,此时y1的值就比较小,所以可以认为第一主成分y1是身材的综合成分。

从第二主成分y2的表达式来看,它在标准变换量x1、x2和x4上有相近的负载荷,在x3、x5和x6上有相近的正载荷,说明当x1、x2和x4增大时,y2的值减小,当x3、x5和x6增大时,y2的值增大。当一个人的身材瘦高时,y2的值比较小,当一个人的身材矮胖时,y2的值比较大,所以可认为第二主成分y2是身材的高矮和胖瘦的协调成分。

从第三主成分y3的表达式来看,它在标准变化量x2上有比较大的负载荷,在x4上有比较大的正载荷,在其他变量上的载荷比较小,说明x2(做高)和x4(手臂长)对y3的影响比较大,也就是说y3反映了做高与手臂长之间的协调关系,这对做长袖上衣时制定衣服和袖子的长短提供了参考,可以认为第三个主成分y3是臂长成分。

后3个主成分的贡献率比较小,分别只有7.1057%、4.9133%和2.1054%,可以不用对他们做出解释。

4. 从样本观测值矩阵出发求解主成分

下表列出了我国31个省、市、自治区和直辖市的农村居民家庭每人全年销售性支出的8个主要变量数据,试根据这8个主要变量的观测数据,进行主成分分析。

(1)调用princomp函数做主成分分析

%读取数据,并进行标准化变换

[X,textdata] = xlsread('消费支出.xls');

XZ = zscore(X); %数据标准化

%主成分分析

% 调用princomp函数根据标准化后原始样本观测数据作主成分分析

%返回主成分表达式的系数矩阵COEFF,主成分得分数据SCORE

%样本相关系数矩阵的特征值向量latent和每个观测值的霍特林T2统计量

[COEFF,SCORE,latent,tsquare] = princomp(XZ)

COEFF =

0.3431    0.5035    0.3199   -0.0540   -0.0233   -0.4961    0.2838   -0.4431

0.3384   -0.4866   -0.4698    0.4032   -0.3003   -0.2240    0.2427   -0.2573

0.3552    0.1968   -0.5365   -0.5759    0.0954    0.3915    0.0612   -0.2225

0.3692    0.1088   -0.0094   -0.1808   -0.5714   -0.2354   -0.5508    0.3657

0.3752   -0.0547    0.1748   -0.0644    0.0246    0.0981    0.6231    0.6504

0.3587   -0.2208    0.5463    0.1209   -0.1923    0.5930   -0.1221   -0.3255

0.3427   -0.4783    0.1450   -0.2390    0.6201   -0.3271   -0.2901    0.0034

0.3441    0.4225   -0.1977    0.6279    0.3893    0.1638   -0.2570    0.1590

SCORE =

5.9541   -2.2203    0.6308   -0.0527   -0.2786   -0.4948   -0.0248   -0.0017

0.3308   -0.8350   -0.3055   -0.1295    0.2685   -0.2011    0.4443   -0.1510

-0.8923   -0.2047   -0.3571   -0.3368   -0.1210    0.2988   -0.0114    0.2755

-0.8222   -0.7077   -0.1050    0.5950   -0.4269    0.3500    0.0184   -0.2306

0.0111   -0.6750    0.4051    0.2669    0.3206    0.2472    0.1237   -0.0773

0.4487   -0.3683   -0.2149    0.8315    0.2708    0.0292   -0.0439   -0.0044

-0.1213   -0.6348    0.2032    0.4677    0.6190   -0.1036   -0.1593    0.0630

-0.2357   -0.7793   -0.4848   -0.0349    0.4070    0.3055    0.1748   -0.1405

9.2452    1.3354   -0.7018   -0.1934    0.2578    0.0228   -0.3668   -0.1275

2.4797    0.5379    0.7765    0.5676   -0.2202    0.5212    0.0028    0.0668

5.7951   -0.0460   -0.0430   -0.5484   -0.3318    0.1985    0.2888    0.0399

-1.0918   -0.0493    0.1110   -0.2043   -0.2771    0.1090   -0.1961   -0.0102

0.9318    0.8256    0.0918    0.3878   -0.3151   -0.0778    0.4663    0.1275

-1.0374    0.4433    0.2810   -0.1418   -0.0208   -0.1032    0.1334   -0.1716

0.5439   -0.2052    0.1717   -0.2251   -0.4386    0.3177   -0.0285    0.2331

-1.0741   -0.0907   -0.5337   -0.1937   -0.1148    0.2357   -0.1254    0.1530

-0.4319    0.6415    0.1661    0.4258   -0.0538   -0.1051   -0.3750    0.1054

-0.2698    0.6192    0.3332    0.0717    0.1751   -0.2811   -0.2288   -0.2121

0.8484    1.6459    0.0554    0.1609    0.4701   -0.2558    0.3650    0.1364

-1.6456    0.6975    0.1665   -0.6683    0.1120   -0.0028    0.0628   -0.0401

-1.7888    0.9874    0.5313    0.2543    0.0904    0.1284    0.1263   -0.0017

-1.6986    0.1589    0.4479   -0.2121   -0.3020   -0.5301   -0.1798   -0.0768

-1.3130    0.2989    0.1663   -0.1472   -0.1935   -0.5380   -0.0793   -0.0238

-2.7981    0.2784    0.0289   -0.1842   -0.1393    0.2218    0.0652   -0.1352

-1.7217    0.2685   -0.0307   -0.7478    0.0820    0.0613   -0.0149   -0.1721

-1.8386    0.3280   -1.1474    0.6183   -0.7418   -0.2957   -0.0234   -0.0857

-1.2350   -0.4721    0.0308   -0.2018    0.2490    0.4568   -0.2382   -0.0038

-2.4005   -0.2229    0.2867   -0.2980   -0.0723    0.1464   -0.1408   -0.0101

-1.3999   -0.4905   -0.1902   -0.1386    0.1306   -0.4714    0.0446    0.3488

-1.1873   -0.3604   -0.2717    0.0506    0.4491   -0.0665   -0.1732    0.1878

-1.5850   -0.7043   -0.4983   -0.0396    0.1457   -0.1233    0.0934   -0.0610

latent =

6.8645

0.5751

0.1689

0.1450

0.0989

0.0838

0.0429

0.0209

tsquare =

19.8320

8.8021

6.5783

9.3362

4.6669

6.1060

7.2411

6.9117

23.3204

11.1360

10.5853

2.3586

9.3238

3.0621

6.4126

4.4109

6.1294

5.9990

12.0246

4.7812

4.9300

7.2740

4.7256

3.2727

5.9570

18.0844

5.3358

2.8002

9.7476

5.3676

3.4868

% 为了直观,定义元胞数组result1,用来存放特征值、贡献率和累积贡献率等数据

%princomp函数不返回贡献率,需要用协方差矩阵的特征值向量latent来计算

explained = 100*latent/sum(latent);%计算贡献率

[m, n] = size(X);%求X的行数和列数

result1 = cell(n+1, 4);%定义一个n+1行、4列的元胞数组

%result1中第一行存放的数据

result1(1,:) = {'特征值', '差值', '贡献率', '累积贡献率'};

%result1中第1列的第2行到最后一行存放的数据(latent)特征值

result1(2:end,1) = num2cell(latent);

%result1中第2列的第2行到倒数第2行存放的数据(latent的方差,特征值的方差)

result1(2:end-1,2) = num2cell(-diff(latent));

%result1中第3列和第4列的第2行到最后一行分别存放主成分的贡献率和累积贡献率

result1(2:end,3:4) = num2cell([explained, cumsum(explained)])

result1 =

'特征值'       '差值'        '贡献率'        '累积贡献率'

[6.8645]    [6.2894]    [85.8068]    [ 85.8068]

[0.5751]    [0.4062]    [ 7.1889]    [ 92.9957]

[0.1689]    [0.0240]    [ 2.1115]    [ 95.1072]

[0.1450]    [0.0461]    [ 1.8121]    [ 96.9192]

[0.0989]    [0.0151]    [ 1.2359]    [ 98.1552]

[0.0838]    [0.0409]    [ 1.0477]    [ 99.2029]

[0.0429]    [0.0220]    [ 0.5362]    [ 99.7391]

[0.0209]          []    [ 0.2609]    [100.0000]

% 为了直观,定义元胞数组result2,用来存放前2个主成分表达式的系数数据

varname = textdata(3,2:end)';%提取变量名数据

result2 = cell(n+1, 3); %定义一个n+1行,3列的元胞数组

result2(1,:) = {'标准化变量', '特征向量t1', '特征向量t2'};%result2的第一行数据

result2(2:end, 1) = varname;%result2第1列

result2(2:end, 2:end) = num2cell(COEFF(:,1:2)) %存放前2个主成表达式的系数矩阵

result2 =

'标准化变量'        '特征向量t1'    '特征向量t2'

'食  品'         [0.3431]    [ 0.5035]

'衣  着'         [0.3384]    [-0.4866]

'居  住'         [0.3552]    [ 0.1968]

'家庭设备及服务'      [0.3692]    [ 0.1088]

'交通和通讯'        [0.3752]    [-0.0547]

'文教娱乐用品及服务'    [0.3587]    [-0.2208]

'医疗保健'         [0.3427]    [-0.4783]

'其他商品及服务'      [0.3441]    [ 0.4225]

% 为了直观,定义元胞数组result3,用来存放每一个地区总的消费性支出,以及前2个主成分的得分数据

cityname = textdata(4:end,1);%提取地区名称数据

sumXZ = sum(XZ,2);      %按行求和,提取每个地区总的消费性支出

[s1, id] = sortrows(SCORE,1);%将主成得分数据SOCRE按第一主成分得分(第一列)从小到大排序

result3 = cell(m+1, 4);%定义一个m+1行,4列的元胞数组

result3(1,:) = {'地区', '总支出', '第一主成分得分y1', '第二主成分得分y2'}; %第一行的数据

result3(2:end, 1) = cityname(id);%result3的第一列的数据,排序后的城市名

%result3第2列为按id排序的sumXZ,第3列为第一主成分得分y1,第4列为第二主成分得分y2

result3(2:end, 2:end) = num2cell([sumXZ(id), s1(:,1:2)])

result3 =

'地区'       '总支出'        '第一主成分得分y1'    '第二主成分得分y2'

' 贵  州'    [-7.9244]    [  -2.7981]    [   0.2784]

' 甘  肃'    [-6.8088]    [  -2.4005]    [  -0.2229]

' 西  藏'    [-5.1593]    [  -1.8386]    [   0.3280]

' 海  南'    [-5.0717]    [  -1.7888]    [   0.9874]

' 云  南'    [-4.8831]    [  -1.7217]    [   0.2685]

' 重  庆'    [-4.8094]    [  -1.6986]    [   0.1589]

' 广  西'    [-4.6805]    [  -1.6456]    [   0.6975]

' 新  疆'    [-4.4480]    [  -1.5850]    [  -0.7043]

' 青  海'    [-3.9552]    [  -1.3999]    [  -0.4905]

' 四  川'    [-3.7103]    [  -1.3130]    [   0.2989]

' 陕  西'    [-3.4989]    [  -1.2350]    [  -0.4721]

' 宁  夏'    [-3.3338]    [  -1.1873]    [  -0.3604]

' 安  徽'    [-3.1095]    [  -1.0918]    [  -0.0493]

' 河  南'    [-3.0509]    [  -1.0741]    [  -0.0907]

' 江  西'    [-2.9356]    [  -1.0374]    [   0.4433]

' 河  北'    [-2.5584]    [  -0.8923]    [  -0.2047]

' 山  西'    [-2.3071]    [  -0.8222]    [  -0.7077]

' 湖  北'    [-1.2172]    [  -0.4319]    [   0.6415]

' 湖  南'    [-0.7399]    [  -0.2698]    [   0.6192]

' 黑龙江'     [-0.6333]    [  -0.2357]    [  -0.7793]

' 吉  林'    [-0.2984]    [  -0.1213]    [  -0.6348]

' 内蒙古'     [ 0.0452]    [   0.0111]    [  -0.6750]

' 天  津'    [ 0.9708]    [   0.3308]    [  -0.8350]

' 辽  宁'    [ 1.3199]    [   0.4487]    [  -0.3683]

' 山  东'    [ 1.4800]    [   0.5439]    [  -0.2052]

' 广  东'    [ 2.4044]    [   0.8484]    [   1.6459]

' 福  建'    [ 2.6151]    [   0.9318]    [   0.8256]

' 江  苏'    [ 6.9721]    [   2.4797]    [   0.5379]

' 浙  江'    [16.3346]    [   5.7951]    [  -0.0460]

' 北  京'    [16.8363]    [   5.9541]    [  -2.2203]

' 上  海'    [26.1552]    [   9.2452]    [   1.3354]

% 为了直观,定义元胞数组result4,用来存放前2个主成分的得分数据,以及(食品+其他)-(衣着+医疗)

%计算(食品+其他)-(衣着+医疗)

%按行求和,第一个sum求的是每行的第1个和第8个元素之和

cloth = sum(XZ(:,[1,8]),2) - sum(XZ(:,[2,7]),2);

%将主成分得分数据按第二主成分得分从小到大排序

[s2, id] = sortrows(SCORE,2);

result4 = cell(m+1, 4);%创建一个m+1行,4列的元胞数组

%result4的第一行的数据

result4(1,:) = {'地区','第一主成分得分y1','第二主成分得分y2' ,'(食+其他)-(衣+医)'};

result4(2:end, 1) = cityname(id);%result4第一列为排序后的地区名

%result3第2列为第一主成分得分y1,第3列为第二主成分得分y2,第4列为(食品+其他)-(衣着+医疗)的数据

result4(2:end, 2:end) = num2cell([s2(:,1:2), cloth(id)])

result4 =

'地区'       '第一主成分得分y1'    '第二主成分得分y2'    '(食+其他)-(衣+医)'

' 北  京'    [   5.9541]    [  -2.2203]    [     -4.0240]

' 天  津'    [   0.3308]    [  -0.8350]    [     -1.7606]

' 黑龙江'     [  -0.2357]    [  -0.7793]    [     -1.6033]

' 山  西'    [  -0.8222]    [  -0.7077]    [     -1.0813]

' 新  疆'    [  -1.5850]    [  -0.7043]    [     -1.5922]

' 内蒙古'     [   0.0111]    [  -0.6750]    [     -0.9055]

' 吉  林'    [  -0.1213]    [  -0.6348]    [     -0.9266]

' 青  海'    [  -1.3999]    [  -0.4905]    [     -1.1824]

' 陕  西'    [  -1.2350]    [  -0.4721]    [     -0.8755]

' 辽  宁'    [   0.4487]    [  -0.3683]    [     -0.4332]

' 宁  夏'    [  -1.1873]    [  -0.3604]    [     -0.8020]

' 甘  肃'    [  -2.4005]    [  -0.2229]    [     -0.4119]

' 山  东'    [   0.5439]    [  -0.2052]    [     -0.3599]

' 河  北'    [  -0.8923]    [  -0.2047]    [     -0.6397]

' 河  南'    [  -1.0741]    [  -0.0907]    [     -0.4638]

' 安  徽'    [  -1.0918]    [  -0.0493]    [     -0.1373]

' 浙  江'    [   5.7951]    [  -0.0460]    [     -0.2464]

' 重  庆'    [  -1.6986]    [   0.1589]    [      0.2621]

' 云  南'    [  -1.7217]    [   0.2685]    [      0.1981]

' 贵  州'    [  -2.7981]    [   0.2784]    [      0.4976]

' 四  川'    [  -1.3130]    [   0.2989]    [      0.4392]

' 西  藏'    [  -1.8386]    [   0.3280]    [      0.2510]

' 江  西'    [  -1.0374]    [   0.4433]    [      0.8908]

' 江  苏'    [   2.4797]    [   0.5379]    [      1.7144]

' 湖  南'    [  -0.2698]    [   0.6192]    [      1.2835]

' 湖  北'    [  -0.4319]    [   0.6415]    [      1.4025]

' 广  西'    [  -1.6456]    [   0.6975]    [      1.1198]

' 福  建'    [   0.9318]    [   0.8256]    [      1.7662]

' 海  南'    [  -1.7888]    [   0.9874]    [      2.2394]

' 上  海'    [   9.2452]    [   1.3354]    [      2.1836]

' 广  东'    [   0.8484]    [   1.6459]    [      3.1971]

(2)结构分析

<1>主成分的解释

从结果result1来看,第一个主成分的贡献率就达到了85.8068%,前二个主成分的累积贡献率达到了92.9957%,所以只用前两个主成分就可以了。有结果result2写出前2个主成分的表达式如下:

y1=0.3431*x1+0.3384*x2+0.3552*x3+0.3692*x4+0.3752*x5+0.3587*x6+0.3427*x7+0.3441*x8

y2=0.5035*x1-0.4866*x2+0.1968*x3+0.1088*x4-0.0547*x5-0.2208*x6-0.4783*x7+0.4225*x8

从第一主成分y1的表达式来看,它在每一个标准化变量上有相近的正载荷,说明每个标准化变量对y1的重要性差不多,(那就输出y1和每个地区的消费性支出的总和进行对比,这就是result3。)。从按第一列主成分得分从小到大进行排序后的结果result3可以看出,标准化后,每个地区的消费性支出的总和与第一主成分得分基本成正比,也就是说,y1反映的是消费性支出的综合水平,可以认为第一组成分y1是综合消费性支出成分。

从第二主成分y2的表达式来看,它在标准化变量x1(食品)和x3(其他商品及服务)上有中等程度的正载荷,在x2(衣着)和x7(医疗保健)上有中等程度的负载荷说明y2反映的是两个方面的对比,一个方面是食品食品和其他商品及服务的消费总支出,另一个方面是衣着和医疗保健的消费总支出,(那就在result4中输出y2和(x1+x8)-(x2+x7)进行比较)。结果result4中列出了标准化后每个地区两个方面消费总支付的差,并按第二主成分得分从小到大进行了排序。从结果result4中可以看出,两个方面消费总支出的差与第二个主成分得分基本成正比,并且南方地区在食品和其他商品及服务商的消费支出比较大,北方地区在衣着和医疗保健上的消费支出比较大,可以认为第二主成分y2是消费倾向成分。

从结果result1可以看出,后几个主成分的贡献率非常小,可以不用做解释,但却说明了标准化变量之间可能存在一个或多个共线性关系。

<2>主成分得分的散点图

从前两个主成分得分的散点图上也能看出他们的实际意义,利用下面的命令可以做出两个主成分得分的散点图,并在散点图上交互式标注每个地区的名称。

%前两个主成分得分散点图

%绘制两个主成分得分的散点图

plot(SCORE(:,1),SCORE(:,2),'ko');

xlabel('第一主成分得分');

ylabel('第二主成分得分');

gname(cityname);%交互式标注每个地区的名称,和gtext作用类似,只是更简单

从图中可以看出,总的消费水平比较高的经济发达地区的第一主成分得分比较大,总的消费水平比较低的经济落后地区的第一主成分得分比较小,第一主成分充分得分反映了综合消费水平的高低。还可以看出南方地区的第二主成分得分比较大,中部地区次之,北方地区较小,说明第二主成分得分是因地域差异所造成的消费倾向成分。

<3>根据霍特林T^2统计量寻找极端数据

霍特林T^2统计量描述了数据集(观测样本矩阵)中的每一个观测与数据集的中心之间的距离,根据princomp函数返回的tsquare(霍特林T^2统计量向量),可以寻找远离数据集中心的极端观测数据。下面将tsquare按从小到大进行排序,并与地区名称一起显示。

%根据霍特林T2统计量寻找极端数据

%将tsquare按从小到大精细排序,并与地区名称一起显示

result5 = sortrows([cityname, num2cell(tsquare)],2);%转化为元胞数组,并按第2列排序

[{'地区', '霍特林T^2统计量'}; result5]

ans =

'地区'       '霍特林T^2统计量'

' 安  徽'    [   2.3586]

' 甘  肃'    [   2.8002]

' 江  西'    [   3.0621]

' 贵  州'    [   3.2727]

' 新  疆'    [   3.4868]

' 河  南'    [   4.4109]

' 内蒙古'     [   4.6669]

' 四  川'    [   4.7256]

' 广  西'    [   4.7812]

' 海  南'    [   4.9300]

' 陕  西'    [   5.3358]

' 宁  夏'    [   5.3676]

' 云  南'    [   5.9570]

' 湖  南'    [   5.9990]

' 辽  宁'    [   6.1060]

' 湖  北'    [   6.1294]

' 山  东'    [   6.4126]

' 河  北'    [   6.5783]

' 黑龙江'     [   6.9117]

' 吉  林'    [   7.2411]

' 重  庆'    [   7.2740]

' 天  津'    [   8.8021]

' 福  建'    [   9.3238]

' 山  西'    [   9.3362]

' 青  海'    [   9.7476]

' 浙  江'    [  10.5853]

' 江  苏'    [  11.1360]

' 广  东'    [  12.0246]

' 西  藏'    [  18.0844]

' 北  京'    [  19.8320]

' 上  海'    [  23.3204]

可以看出上海是距离数据集中心最远的城市,其次是北京,然后是西藏。

matlab主成分分析散点图_主成分分析与matlab相关推荐

  1. matlab主成分分析散点图_主成分分析(PCA)及其在MATLAB中的实现

    主成分分析 Principal Component Analysis(PCA) 1. 什么是主成分分析? What is PCA? Principal component analysis (PCA) ...

  2. 厄米高斯光束 matlab,拉盖尔高斯光束_厄米高斯光束MATLAB仿真

    <拉盖尔高斯光束_厄米高斯光束MATLAB仿真>由会员分享,可在线阅读,更多相关<拉盖尔高斯光束_厄米高斯光束MATLAB仿真(4页珍藏版)>请在人人文库网上搜索. 1.激光原 ...

  3. m 文件 dll matlab 中调用_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  4. matlab 图片倒影_计算物理基于matlab方法研究水中倒影问题

    计算物理基于matlab方法研究水中倒影问题 基于 Matlab 方法研究水中倒影问题[摘 要] 本文介绍了用 matlab 研究倒影问题的方法,利用 matlab 可视化的优点可 以直观的得出结果. ...

  5. matlab主成分分析散点图_基于matlab的主成分分析与因子分析

    基于matlab的主成分分析与因子分析文件"实验七.xls" sheet1列出了三个美国制造商所生产的早餐方便粥的数据,这三家厂商是:通用牛奶,克罗格和夸克.将早餐方便粥的品牌按照 ...

  6. matlab主成分分析散点图_matlab主成分分析案例

    1• 设随机向量 X= ( X i , X 2 , X 3 ) T 的协方差与相关系数矩阵分别为 1 4 , R 4 25 分别从, R 出发,求 X 的各主成分以及各主成分的贡献率并比较差异况. 解 ...

  7. matlab hist函数_算法工匠MATLAB专训营:Matlab绘图,小试牛刀

    作者 | 蔡老师 仿真秀专栏作者 首发 | 仿真秀平台 导读:正文之前,我在此详细说明一下,因为本文包含的程序太难得,网上肯定找不到这样的程序.随着讲课的越来越深入,我给出的程序会越来越实用,接近于实 ...

  8. matlab for循环_从零开始的matlab学习笔记——(5)循环

    上一节的内容有点多,所以循环我就放在了这一篇来说说.matlab的循环和c语言很相似,也是分为for循环和while循环. while循环: while condition 代码1 end 代码2 c ...

  9. 主成分分析法_“主成分分析法”——线上讨论会等你加入

    Hi-新朋友,记得点蓝字关注我们哟 主成分分析法 --线上讨论会 新一轮的线上讨论会又要来啦~这次由我们实证会计板块与大家一起分享有关层次分析法的内容,也十分欢迎大家提前了解并与群内的各位学者研究讨论 ...

  10. matlab中删除照片_如何使用matlab从图像中删除划痕

    如果您知道划痕的位置,则此问题称为 inpainting,并且存在非常复杂的算法.因此,一种方法是尽可能好地检测划痕,然后在其上使用标准的修复算法.我在Mathematica中玩了一下你的形象: 首先 ...

最新文章

  1. C#Winform版获取Excel文件的内容
  2. esxi服务器与虚拟机时间不符,vsphere6.7-虚拟机与ESXI时间同步
  3. 数学建模学习笔记(十)——时间序列模型
  4. vue global filters
  5. redis整理の配置
  6. java.lang.UnsupportedClassVersionError : Unsupported major.minor version 52.0
  7. 分区供水条件口诀_分区供水高频考点,收藏哦
  8. oracle 12952错误,故障码P1295
  9. mac使用cjk和ctex宏包
  10. 单片机温度传感器c语言编码,温度传感器代码解析Ⅱ
  11. 微博三方登录账号注册
  12. python培训班深圳-深圳python人工智能培训班
  13. 进化三部曲,从互联网大脑发育看产业互联网的未来
  14. HCIA云计算(1)
  15. Qt图形化界面—迷宫最短路径问题
  16. java htmlunit
  17. 【马士兵】笔记_Java网络编程
  18. JVM性能优化一些概念简介
  19. 完整创建 注册功能步骤
  20. 等价类划分和边界值法

热门文章

  1. 母亲节祝福html源码,有创意的母亲节祝福语大全
  2. 涩会:大学学历——办理居住证的具体流程(深圳)
  3. 我的车辆过户办理经历分享(深圳市内过户)
  4. 机器学习算法——神经网络3(误差逆传播算法-BP算法)
  5. 南海滩饮食法——不饿的情况下快速减肥的法宝
  6. 传教士与野人过河问题
  7. 怎样在计算机上设置纸大小,电脑中打印机设备自定义纸张打印大小的方法
  8. hⅰgh怎么读音发音英语_字母h的发音音标
  9. 2019年北航、南大、东南、上科大及本校计算机系保研
  10. 基于SSM的微信小程序在线学习系统源码【包调试】