文檔排版有問題,可以下載附件,,假設有一個數據框a,num是樣本序號,var1-var4是四個變量
> a
num var1 var2 var3 var4
1 1 21.0 10.7 99.7 9.5
2 2 9.5 17.9 139.6 18.7
3 3 21.2 8.4 90.0 6.8
4 4 12.0 22.7 42.5 24.1
5 5 6.8 21.2 55.2 22.4
6 6 8.2 22.4 55.6 22.6
7 7 3.6 29.2 68.3 26.7
8 8 19.5 15.2 18.8 17.4
9 9 24.8 5.4 43.7 2.9
10 10 8.4 18.6 146.2 19.7
11 11 28.9 4.4 4.9 1.1
12 12 19.5 15.1 10.2 18.5
13 13 28.3 4.7 13.3 1.8
14 14 24.7 12.1 116.8 12.6
15 15 12.8 23.6 90.0 23.7
16 16 23.1 6.8 100.1 3.7
17 17 15.1 13.7 100.9 14.2
18 18 2.9 6.2 80.7 2.7
19 19 18.4 11.8 99.3 13.8
20 20 22.9 12.3 47.6 13.3
21 21 5.8 29.4 83.5 27.6
22 22 18.8 8.6 61.1 8.9
對四個變量進行主成分分析
pr<-princomp(~var1+var2+var3+var4,data=a,cor=TRUE,scores=TRUE) #從相關矩陣求解,並列出主成分得分
> summary(pr,loadings=TRUE)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 1.6430057 0.9753338 0.57235000 0.14721331
Proportion of Variance 0.6748669 0.2378190 0.08189613 0.00541794
Cumulative Proportion 0.6748669 0.9126859 0.99458206 1.00000000
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
var1 0.530 0.111 0.836
var2 -0.582 0.232 0.262 -0.734
var3 -0.233 -0.934 0.271
var4 -0.571 0.247 0.399 0.674
Standard deviation 表示特征根的開方,Proportion表示主成分的貢獻率,也就是,比如第1個特征值的貢獻率0.6749 = 2.69946764 / (2.69946764+0.95127608+0.32758452+0.02167176)。
可以看出前兩個主成分已經貢獻了90%以上,可以保留兩個主成分
loadings表示主成分的系數矩陣
> cor(a[,-1]) #列出四個變量的相關系數矩陣
var1 var2 var3 var4
var1 1.0000000 -0.7352556 -0.3579002 -0.6830847
var2 -0.7352556 1.0000000 0.1825704 0.9752175
var3 -0.3579002 0.1825704 1.0000000 0.1738883
var4 -0.6830847 0.9752175 0.1738883 1.0000000
e<-cbind(a,prscores) #加入主成分得分
> head(e)
num var1 var2 var3 var4 Comp.1 Comp.2 Comp.3 Comp.4
1 1 21.0 10.7 99.7 9.5 0.775962 -0.8698329 0.34876728 -0.064368645
2 2 9.5 17.9 139.6 18.7 -1.422291 -1.4919746 0.09178083 0.082690047
3 3 21.2 8.4 90.0 6.8 1.209521 -0.7860833 0.09398025 -0.055128662
4 4 12.0 22.7 42.5 24.1 -1.416036 1.1717796 0.11009779 0.055716119
5 5 6.8 21.2 55.2 22.4 -1.610139 0.6979540 -0.48820410 0.118147542
6 6 8.2 22.4 55.6 22.6 -1.624810 0.7512985 -0.28509515 0.001357859
那么主成分得分是怎么來的呢?
先對原始變量進行標准化,然后乘以相應的特征向量就是主成分
b<-scale(a[,-1])
b%*%prloadings
特征值和特征向量隱藏的秘密主成分變量對應的特征向量的每個元素,與對應的特征值的平方根的乘積,等於該主成分變量,與該元素列標簽對應的原始變量之間的相關系數。這是特征值與特征向量隱藏的秘密,可以用矩陣代數嚴格推導出來。不過這句話讀起來比較費勁,我們用圖8來表示這一關系。圖中的eigVec1至eigVec4是4個特征向量,對應的特征值分別為eigVal1至eigVal4。我們在每個列中進行操作,用特征向量每個元素分別乘以對應特征值的平方根,得到該主成分變量與所有原始變量的相關系數。
