MATLAB主成分分析

機器學習 MATLAB 編程語言 F1賽車 MATLAB一點通 2017-05-10

更多MATLAB數據分析視頻請點擊,或者在網易雲課堂上搜索《MATLAB數據分析與統計》 http://study.163.com/course/courseMain.htm?courseId=1003615016

主成分分析又稱主分量分析,由皮爾遜在1901年首次引入,後來由霍特林在1933年進行了發展。主成分分析是一種通過降維技術把多個變量化為少數幾個主成分(即綜合變量)的多元統計方法,這些主成分能夠反映原始變量的大部分信息,通過表示為原始變量的線性組合,為了使得這些主成分所包含的信息互不重疊,要求各主成分之間互不相關。主成分分析在很多領域都有廣泛的應用,一般來說,當研究的問題涉及多個變量,並且變量間相關性明顯,即包含的信息有所重疊時,可以考慮用主成分分析的方法,這樣更容易抓住事物的主要矛盾,使問題簡化。

1. 主成分分析的幾何意義

MATLAB主成分分析

假設從二元總體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)10.790.360.760.250.51
坐高(x2)0.7910.310.550.170.35
胸圍(x3)0.360.3110.350.640.58
手臂長(x4)0.760.550.3510.160.38
肋圍(x5)0.250.170.640.1610.63
腰圍(x6)0.510.350.580.380.631

(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個主要變量的觀測數據,進行主成分分析。

MATLAB主成分分析

(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作用類似,只是更簡單

MATLAB主成分分析

從圖中可以看出,總的消費水平比較高的經濟發達地區的第一主成分得分比較大,總的消費水平比較低的經濟落後地區的第一主成分得分比較小,第一主成分充分得分反映了綜合消費水平的高低。還可以看出南方地區的第二主成分得分比較大,中部地區次之,北方地區較小,說明第二主成分得分是因地域差異所造成的消費傾向成分。

<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

相關推薦

推薦中...