最近和同學討論他們要做的電子醫療系統的時候,聊到單因素分析和主成分分析,一想自己對這方面也不是很懂,就用sas做了一套標準的流程,記錄如下:
個人總結:如果遇到多因素分析,想要很多很多個自變量與因變量進行線性回歸分析必須進行降維,一種很好的解決方案就是主成分分析。
引言
主成分分析,舉了這么個例子:就像你選女人,有身材、相貌兩個指標,如果身材、相貌都很突出,那當然很好選擇;但如果兩個女人,一個身材突出,一個相貌出眾,看著都很喜歡,那可如何是好!這個時候通過主成分分析,匯總出一個指標,這個指標可以一定程度上代替原來的身材、相貌,這時就可以排序做出選擇了。
這例子當然有很多缺陷,但至少指出了主成分分析的目的之一:減少決策變量數,也就是降維。主成分分析的另一個目的是防范多重共線性。實際問題往往涉及很多變量,但某些變量之間會有一定的相關性,我們希望構造較少的幾個互不相關的新指標來代替原始變量,去除多重共線性,減少所需分析的變量,同時盡可能減少這一過程的信息損失。主成分分析正是基于這樣的目的而產生的有效方法。
主成分分析流程
1、原始數據標準化。
2、計算標準化變量間的相關系數矩陣。
3、計算相關系數矩陣的特征值和特征向量。
4、計算主成分變量值。
5、統計結果分析,提取所需的主成分。
實例(個人覺得說了再多,其實一個實例就懂了)
下表列出了1999年全國31個省、直轄市和自治區(港、澳、臺不在其中)的城鎮居民家庭平均每人全年消費性支出的八個主要變量數據,請從八個變量中識別出主成分。
變量說明(隨便從網上找的數據)
x1:食品 ? ? ? ? ? ? ? ? ? ? ? ?x2:交通和通訊
x3:衣著 ? ? ? ? ? ? ? ? ? ? ? ?x4:娛樂教育文化服務
x5:家庭設備用品及服務 ? x6:居住
x7:醫療保健 ? ? ? ? ? ? ? ? ?x8:雜項商品和服務
1.對照省份可用sas做表
data comp;
input name $ x1-x8;
cards;
北京 2959.19 730.79 749.41 513.34 467.87 1141.82 478.42 457.64
天津 2459.77 495.47 697.33 302.87 284.19 735.97 570.84 305.08
河北 1495.63 515.90 362.37 285.32 272.95 540.58 364.91 188.63
山西 1406.33 477.77 290.15 208.57 201.50 414.72 281.84 212.10
內蒙古 1303.97 524.29 254.83 192.17 249.81 463.09 287.87 192.96
遼寧 1730.84 553.90 246.91 279.81 239.18 445.20 330.24 163.86
吉林 1561.86 492.42 200.49 218.36 220.69 459.62 360.48 147.76
黑龍江 1410.11 510.71 211.88 277.11 224.65 376.82 317.61 152.85
上海 3712.31 550.74 893.37 346.93 527.00 1034.98 720.33 462.03
江蘇 2207.58 449.37 572.40 211.92 302.09 585.23 429.77 252.54
浙江 2629.16 557.32 689.73 435.69 514.66 795.87 575.76 323.36
安徽 1844.78 430.29 271.28 126.33 250.56 513.18 314.00 151.39
福建 2709.46 428.11 334.12 160.77 405.14 461.67 535.13 232.29
江西 1563.78 303.65 233.81 107.90 209.70 393.99 509.39 160.12
山東 1675.75 613.32 550.71 219.79 272.59 599.43 371.62 211.84
河南 1427.65 431.79 288.55 208.14 217.00 337.76 421.31 165.32
湖北 1783.43 511.88 282.84 201.01 237.60 617.74 523.52 182.52
湖南 1942.23 512.27 401.39 206.06 321.29 697.22 492.60 226.45
廣東 3055.17 353.23 564.56 356.27 811.88 873.06 1082.82 420.81
廣西 2033.87 300.82 338.65 157.78 329.06 621.74 587.02 218.27
海南 2057.86 186.44 202.72 171.79 329.65 477.17 312.93 279.19
重慶 2303.29 589.99 516.21 236.55 403.92 730.05 438.41 225.80
四川 1974.28 507.76 344.79 203.21 240.24 575.10 430.36 223.46
貴州 1673.82 437.75 461.61 153.32 254.66 445.59 346.11 191.48
云南 2194.25 537.01 369.07 249.54 290.84 561.91 407.70 330.95
西藏 2646.61 839.70 204.44 209.11 379.30 371.04 269.59 389.33
陜西 1472.95 390.89 447.95 259.51 230.61 490.90 469.10 191.34
甘肅 1525.57 472.98 328.90 219.86 206.65 449.69 249.66 228.19
青海 1654.69 437.77 258.78 303.00 244.93 479.53 288.56 236.51
寧夏 1375.46 480.89 273.84 317.32 251.08 424.75 228.73 195.93
新疆 1608.82 536.05 432.46 235.82 250.28 541.30 344.85 214.40
;
run;
2.假定相互獨立,得到特征向量
proc princomp
data = mylib.comp
out = mylib.changecomp
prefix = comp /*(具體數據分析過程只需要看數據,避免其他的干擾,改成代號名稱)*/
outstat = mylib.result
;
var x1-x8;
run ;
會得到以下結果:
除此之外,得到的changecomp表為:
得到的result表為:
3.快速得到主成分
首先我們需要知道主成分分析希望能夠達到什么樣的目的:
將多個指標轉換為少數幾個相互獨立的且包含原來指標大部分信息(一般是80%或85%)的綜合指標
假如你并不想知道各種結果的含義,只想知道那些是主成分,那其實只需要用到上面的“相關矩陣的特征值”表的最后兩列:比例和累積
累積從哪一行大于85%就行了;本實例是從第三行,因為這3個變量合起來解釋了原來8個變量87.81%的信息,能夠滿足要求。
4.詳細解讀各種表
表1:PRINCOMP 過程
31個觀測代表數據中的31個省份/直轄市;
8個變量代表最開始的8個成分
表2:簡單統計量
這個表也很簡單,均值x不用說,StD是標準差,即方差開個正根
表3:相關矩陣
相關系數又稱皮氏積矩相關系數(Pearson product-moment correlation coefficient,PPCC),就是我們高中統計學獨立檢驗時候的r值;
當r>0時,表示兩變量正相關,當r<0時,表示兩變量為負相關。當|r|=1時,表示兩變量為完全線性相關即函數關系。當r=1時,稱為完全正相關,而當r=-1時,稱為完全負相關。當r=0時,表示兩變量間無線性相關關系。
當︱r︱≥0.8時,可視為高度相關;當0.5≤︱r︱<0.8時,可視為中度相關;當0.3≤︱r︱<0.5時,視為低度相關;當︱r︱<0.3時,說明兩個變量之間的相關程度極弱。
本表里的x1與x5、x1與x8、x3與x6高度相關;x2與x7負相關
表4:相關矩陣的特征值
列1.特征值越大,表示對應的主成分變量包含的信息越多,對原始變量的解釋力度越強。
列2.相鄰兩行特征值之間的差值
列3.改行特征值/總特征值的和
列4.前面幾行的列3的和
(誤區:變量不是越多越好,否則不能達到降維的目的,一般等sqrt(num))
表5:特征向量
這個和特征值都是線性代數的內容,幸虧還是學過這門課。
對于同一個矩陣,特征值和特征向量是一一對應的;
A是矩陣,V就是特征向量,是特征值
對比本實例:
表3是A,表5的每一列是V,表4的特征值是
5.除此之外的一些東西
1.以comp1與comp2分布散點圖:(載荷圖)
proc plot
data=mylib.changecomp vpct=100;/*vpct后的數值表示圖所占頁面的長度*/
plot comp1*comp2 ='*'$ name/
/* ='*'表明圖中的散點用*表示,還可用#等*/
/*美元符號后寫標簽變量 name 代表每個點根據name變量命名*/
haxis=-3.5 to 3 by 0.5
HREF=-2,0,2 ? ? ?vaxis=-3 to 6 by 0.5
VREF=-2,0,2; ? ?/*HREF代表垂直于水平軸-2,0,2處畫參考線,VREF同理*/
title '主成分散點圖'
; ?/*title為結果命名。Plot:主成分散點圖,否則Plot:SAS系統*/
run;
2.changecomp表的comp變量是怎么來的
主成分變量是原始變量的線性表示,用公式表示如下:;
X表示原始變量對應數據組成的矩陣(以下稱為原始數據矩陣),U是特征向量以列向量形式依次排列組成的矩陣(以下稱為特征向量矩陣)。
但是這樣做有問題,原始數據還未標準化;
proc standard
data = mylib.comp
out = mylib.standard
mean = 0
std=1;
var x1-x8;
run ;
正確的公式應該是;
3.變量是否線性相關
proc corr
data = mylib.changecomp
out = mylib.compcorr
;
var comp1-comp8;
with comp1-comp8;
run ;
可以看出,主成分變量之間的相關系數都為零。