14 MATLAB主成分分析

matlab中实现PCA算法 SCORE是对主成分的打分,也就是说原X矩阵在主成分空间的表示。每行对应样本观测值,每列对应一个主成份(变量),它的行和列的数目和X的行列数目相同。(相当于上面程序中的S)COEFF是X矩阵所对应的协方差阵的所有特征向量组成的矩阵,即变换矩阵或称投影矩阵,每列对应一个特征值的特征向量,列的排列顺序是按特征值的大小递减排序。latent是一个向量,它是X所对应的协方差矩阵的特征值向量。计算PCA的时候,如果直接有现成的协方差阵,用函数pcacov来计算。相当于上面程序中的V,它表示的是主成分的系数。 阅读详情

更多MATLAB数据分析视频请点击,或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId=1003615016
更多MATLAB数据分析视频请点击,或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId=1003615016

主成分分析又称主分量分析,由皮尔逊在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数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId=1003615016


Matlab主成分分析 Matlab主成分分析主要目的方法一:直接调用pac函数1.PCA函数的输入与输出参数2.PCA函数的使用方法方法二: 主要目的 主成分分析(或称主分量分析,principal component analysis)由皮尔逊(Pearson,1901)首先引入,后来被霍特林(Hotelling,1933)发展了。 主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将 们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几 阅读详情

相关推荐

MATLAB 主成分分析

主成分分析基本原理 当我们拿到一组数据,例如中学生身高、胸围、体重这三组数据,我们可以拿这三组数据来描述一个中学生的身形。但是很多情况下,这样的数据种类太多而且过于杂乱,无法很好地描述实体。 主成分分析的思想就是,在给出数据 X1、X2、X3...XnX_1、X_2、X_3\quad ... \quad X_nX1​、X2​、X3​...Xn​ 基础上,创造新的一组数据Y1、Y2、Y3...Yn...

脱碳甲醛 3322

MATLAB实现主成分分析

主成分分析(Principal component analysis,PCA) 基于MATLAB实现主成分分析

WW、forever的博客 7754

主成分分析(理论及Matlab实现)

自己学习、工作总结的主成分分析原理及matlab实现,为了方便自己后续复习和使用,如有不足出欢迎指出。

xuce_sir的博客 8543

主成分分析法(PCA)——降维

简介 主成分分析是一种降维算法,它能将多个指标转换为少数几 个主成分,这些主成分是原始变量的线性组合,且彼此之间 互不相关,其能反映出原始数据的大部分信息。一般来说, 当研究的问题涉及到多变量且变量之间存在很强的相关性时, 我们可考虑使用主成分分析的方法来对数据进行简化。 步骤 样本标准化 计算标准化样本协方差矩阵 计算R的特征值和特征向量 得出主成分贡献率和累计贡献率 利用得分矩阵算出主成分 解释主成分含义 误区 对于主成分分析降维以后,一般可以很好地用于聚类和回归,但是不能用于评价模型 建议 sp

david2000999的博客 8701

傻瓜攻略(一)——MATLAB主成分分析(PCA)代码及结果分析实例

主成分分析 主成分分析法(PCA)是一种高效处理多维数据的多元统计分析方法,将主成分分析用于多指标(变量)的综合评价较为普遍。 该方法的基本思想是运用较少的变量去解释原始数据中的大部分变异,通过对原始数据相关矩阵内部结构关系的分析和计算,产生一系列互不相关的新变量。根据需要从中选取比原始变量个数少的几个新变量,这些新的变量就是所谓的主成分,它们能够充分解释原始数据的变化。因此,主成分分析法本质上是......

qq_36108664的博客 14万+

【第 14 章 基于主成分分析的图像压缩和重建--matlab深度学习实战案例】

机器学习深度学习实战图像处理matlab基于主成分分析的图像压缩和重建–下载来源 主函数函数目录 案例运行效果如图 1 PCA PCA (Principle Component Analysis)是统计学中的主成分分析方法。主成分分析方法从矩阵角度讲也称K-L变换。使用PCA方法对图像进行压缩和重建的大致过程: 2 PCA图像压缩 图像压缩:首先将图像训练库里的每个二维图像拉伸成向量。然后对其进行主成分分析得到主成分的变换矩阵以及图像均值向量。......

dongbao520的博客 1186

matlab主成分分析综合评价算法,matlab主成分分析算法

从经济效益出发选取8个指标,利用主成分分析法对选取指标进行分析,利用Matlab软件对14家机械制造企业的经济效益进行了计算和排名,为黑龙江省今后实现企业间经济发展协调......II. 主成分分析法(PCA)推导一、主成分的导出 根据主成分分析的数学模型的定...主成分分析MATLAB应用_IT/计算机_专业资料。主成分分析 matlab 主成分分析 类型:一种处理高维数据的方法。 降维思想:...

weixin_42136826的博客 743

Matlab主成分分析(根据例子学原理)

主成分分析就是设法将原来众多具有一定相关性的指标,重新组合成几个新的相互无关的综合指标,并且尽可能多地反映原来指标的信息。它是数学上的一种降维方法。 其中 X1表示人均食品消费; X2表示人均衣着消费; X3表示家庭设备及服务人均消费; X4表示医疗保健人均消费; X5表示交通和通信人均消费; X6表示教育文化娱乐服务人均消费; 表X7示居住的人均消费; X8杂项商品和服务;Y表示年。 主要步骤: (1)对原来的p个指标进行标准化,以消除变量在水平和量纲上的影响; (2)根据标准化后的数据矩阵求出相关系数矩

qq_38865458的博客 8834

matlab实现主成分分析 并计算累积贡献率

使用MATLAB实现主成分分析所使用的函数主要是【princomp函数】,本博客主要讲述代码实现及部分关键名词解释,理论部分请读者自行百度。 贡献率:每一维数据对于区分整个数据的贡献,贡献率最大的显然是主成分,第二大的是次主成分...... [coef,score,latent,t2] = princomp(x);(个人观点): x:为要输入的n维原始数据。带入这个matlab自带函数...

夏沐的博客 1万+

动态多目标进化算法:VARE(Vector Autoregressive Evolution)求解DF1-DF14,提供完整MATLAB代码

VARE(Vector Autoregressive Evolution)算法是2023年提出的一种新型的动态多目标优化(DMO)算法,旨在有效处理随时间变化的多目标优化问题。它通过结合向量自回归(VAR)模型和环境感知超变异(EAH)策略,动态适应环境变化,预测新的 Pareto 最优解,并保持种群多样性。VARE 的主要贡献在于提出了一个能够考虑决策变量之间相互关系的 VAR 模型用于种群预测,并引入 EAH 策略来动态调整种群多样性。双目标问题(DF1-DF9)

IT猿手 1013

Matlab 主成分分析函数pcacov代码剖析

调用格式: [coeff,latent,explained] = pcacov(V) 这个函数针对已经求出的协方差矩阵进行计算。要结合cov函数才能进行完整的pca分析。 这个函数可以查看源代码,并且清晰明了的展示了计算过程。 输出变量: -coeff: 特征向量(注意与pca函数的变量score进行区分); -latent: 特征值;[~,latent,coeff] = svd(v); 其实...

huangzhywin的博客 1万+

主成分分析PCA详解及MATLAB实现

1、读取外部文件数据 load gj.txt %把原始保存在纯文本文件gj.txt中的数据,读到MATLAB变量gj中 2、数据标准化 gj1=zscore(gj); %将原始数据gj进行z-score 标准化 3、计算相关系数矩阵(协方差矩阵) r=corrcoef(gj1); %计算相关系数矩阵(协方差矩阵) 因为原始数据gj已经标准化成新的数据gj1,所以gj1的协方差矩阵就是相关系数矩阵,相关系数矩阵主对角线上都是1,因为一个变量和自己的相关系数是1。相关系数矩阵r里大多数数据

weixin_40857506的博客 9057

MATLAB主成分分析实战指南

本文还有配套的精品资源,点击获取 简介:主成分分析(PCA)是数据降维的一种技术,它通过转换原始数据到线性无关的主成分,降低数据复杂性,同时尽可能保留原始数据的方差信息。MATLAB提供强大的矩阵运算功能和内置函数,便于实现PCA。本文将详细介绍如何使用MATLAB进行PCA的每个步骤,包括数据预处理、计算协方差矩阵、提取特征向量和特征值、选择主成分、数据转换、结果可视化以...

weixin_36289742的博客 2440

Matlab里实现简单的主成分分析

大一线代的综合作业,一个简单运用pca(主成分分析法)的作业,给的数据是一个高光谱数据,不过老师已经把先它变成二维矩阵了,记录一下。

zmlswmlp的博客 1736

MatLab建模学习笔记13——主成分分析(PCA)

主成分分析(Principal Component Analysis,PCA),是一种统计方法。在处理实际问题中,多个变量之间可能存在一定的相关性,当变量的个数较多且变量之间存在复杂的关系时,增加了问题分析的难度。主成分分析是一种数学降维的方法,该方法主要将原来众多具有一定相关性的变量,重新组合成为一种新的相互无关的综合变量。例如,当选择第一个线性组合即第一个综合变量为F1,希望F1能够反映更多的信

u010480899的博客 4万+
上一篇: 13 MATLAB判别分析
下一篇: MATLAB数据分析与统计-魏伟-专题视频课程
技术提高效率
博客等级 码龄10年 1664粉丝 119原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术提高效率

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值