主成份分析(PCA)主要是想要用比較少的”成份”來看資料變異的 ...
文章推薦指數: 80 %
主成份分析(PCA)主要是想要用比較少的「成份」來看資料變異的來源(也就是降低資料的維度)。
主成份分析是因子分析的一個特例,但主成份分析想看的是造成資料變異的結構,而 ...
主成份分析
主成份分析(PCA)主要是想要用比較少的「成份」來看資料變異的來源(也就是降低資料的維度)。
主成份分析是因子分析的一個特例,但主成份分析想看的是造成資料變異的結構,而因子分析想看的是資料裡變數之間的關係。
這些成份是由原來資料變數的線性組合所造出來,當然並不是所有的線性組合都可以,不然係數愈大,所造出的來的線性組合的變異也愈大,必須對係數加入限制,每一個主成份的係數的向量,長度為1。
另外我們也不希望各主成份之間會互相影響,所以不同主成份的內積是0。
我們希望主成份可以降低資料的維度,所以只要挑比較大的幾個主成份就足夠解釋。
這樣一來資料的維度就會降低,而又可以達到需要解釋的水準。
先想一個極端的例子,如果資料裡面有五個變數,2nd~5th都是1st的倍數,那我們需要把所有的變數都放到模型裡去?其實這份資料的變異來源就只有第一個變數。
在有高度線性相關的變數,用主成份去做分析會比用原來的變數做分析來得恰當。
根據這些性質,在矩陣運算上所使用的特徵值和特徵向量會符合這些特性。
我們就採用這種方法來做主成份分析(PCA)。
現在用一個例子來看,先把Fertility的資料扣起來,待拿來做迴歸。
data(swiss)#資料在R的dataset
S=var(swiss[,-1])#把Fertility的資料扣起來
pca=princomp(swiss[,-1])#丟資料
names(pca)
summary(pca)
Comp.1
Comp.2
Comp.3
Comp.4
Comp.5
Standarddeviation
42.896
21.202
7.588
3.688
2.721
ProportionofVariance
0.777
0.190
0.024
0.006
0.003
CumulativeProportion
0.777
0.967
0.991
0.997
1.000
pld=pca$loading
fix(pld)
#比較一下,特徵值、特徵向量和PCA做出來的東西#
e=eigen(S)$vector #特徵向量
v=eigen(S)$value #特徵值
#---特徵向量e的部分----(有時會差一個負號)#
pld
Comp.1
Comp.2
Comp.3
Comp.4
Comp.5
Agriculture
0.282
0.884
-0.37
-0.027
-0.049
Examination
-0.121
-0.174
-0.45
-0.867
0.033
Education
-0.058
-0.311
-0.807
0.485
-0.117
Catholic
0.95
-0.303
0.002
-0.071
0.022
Infant.Mortality
0.01
-0.019
0.099
-0.087
-0.991
e
[,1]
[,2]
[,3]
[,4]
[,5]
[1,]
0.282
0.884
0.37
-0.027
-0.049
[2,]
-0.121
-0.174
0.45
-0.867
0.033
[3,]
-0.058
-0.311
0.807
0.485
-0.117
[4,]
0.95
-0.303
-0.002
-0.071
0.022
[5,]
0.01
-0.019
-0.099
-0.087
-0.991
#---特徵值v的部分------#
sqrt(v)#summary出來的是Sd
43.360
21.431
7.670
3.728
2.751
v/sum(v)
0.777
0.19
0.024
0.006
0.003
圖一:各主成份所解釋的變異百分比
由圖一可以看出選擇二個主成份即可,在第三主成份有一個折點。
第三個主成份之後就只有很小的貢獻。
特徵值的部分可以和前面的summary(pca)比較,特徵值會有一點不一樣,但是變異數的比例是和特徵值算出來的一樣。
現在來看我們做出來的主成份。
第一個主成份是和Catholic及Infant.Mortality有關,第二個主成份是和Agriculture
EducationCatholic有關等等。
有時候我們可以藉由主份份來將變數來分群,賦予新的意義,但這邊看來,似乎和原本的變數較接近,每一個主成份有極大的比例是在某一個變數上面。
所以主成份的順序可以看成是變數重要性的次序。
Catholic這樣來看,是資料swiss[,-1]中最重要的變數。
比較奇怪的是這個。
照理說,用主成份來做迴歸應該是愈前面的主成份配適得愈好,因為它已經代表predictors大部份的變異,但結果似乎並不是這樣。
mod=lm(swiss[,1]~pca$score[,1:3])
#用前面三個主成份做的model
summary(mod)
Coefficients:
EstimateStd.Error tvalue Pr(>|t|)
(Intercept) 70.14255 1.10854 63.275 <
2e-16 ***
pca$score[,1] 0.14376 0.02584 5.563
1.57e-06 ***
pca$score[,2] 0.11115 0.05228 2.126 0.0393
*
pca$score[,3] 0.98882 0.14609 6.769 2.79e-08
***
---
Signif.codes: 0‘***’0.001‘**’
0.01‘*’0.05‘.’0.1‘’1
Residualstandarderror:7.6on43degrees
offreedom
MultipleR-squared:0.654,Adjusted
R-squared:0.6299
F-statistic:27.09on3and43DF,p-value:
5.357e-10
mod1=lm(swiss[,1]~pca$score[,1:2])
#另一個比較小的model
Call:
lm(formula=swiss[,1]~pca$score[,
1:2])
….
Residualstandarderror:10.8on44
degreesoffreedom
MultipleR-squared:
0.2854, AdjustedR-squared:0.2529
F-statistic:8.786on2and44DF,p-value:
0.000616
cor(cbind(swiss[,1],pca$score))[2:6,1]
Comp.1 Comp.2
Comp.3 Comp.4
Comp.5
0.499 0.191 0.607 -0.088
-0.212
這是Fertility和其它主成份的相關係數,看起來,第二主成份並不是很相關。
這樣的結果是對的?
因為主成份只有解釋那一些我們丟進去的資料。
由那些資料變數的線性組合生成新的主成份,所以和我們沒有丟進去的資料並不一定相關,當然原來資料可以解釋的部分用全部的主成份下去也是一樣。
所以可能較前面的主成份並不一定可以對Fertility有很好的解釋。
除非Fertility變異的方式和我們丟進去資料的變異很相似。
也許看一下pairsplot會有其它的想法。
pairs(swiss,
panel=panel.smooth,main="swissdata",
col=3+(swiss$Catholic>50))
藍色和綠色的表現是不是很不一樣?所以,Catholic是一個很重要的變數。
圖二:藍色的部分是天主教比例較高的地區
延伸文章資訊
- 1主成分與因子分析 - Also see
主成分分析(PCA)和因子分析(FA)是用於數據縮減或結構檢測的統計技術。 當研究者有興趣發現集合中的哪些變量形成彼此獨立的相干子集時,這兩種方法被應用於單個變量 ...
- 2R 統計軟體(7) – 主成分分析與因子分析(作者:陳鍾誠)
R 統計軟體(7) – 主成分分析與因子分析(作者:陳鍾誠). 簡介. 雖然「主成分分析」(Principle Component Analysis) 通常出現在機率統計的課本當中,但事實上要理...
- 3主成分分析與因子分析及SPSS實現- IT閱讀
通過原始變數之間的複雜關係對原始變數進行分解,得到公共因子和特殊因子。將原始變量表示成公共因子的線性組合。其中公共因子是所有原始變數中所共同具有 ...
- 4【探索性因素分析V.S 主成份分析】 - 永析統計及論文諮詢顧問
本篇目的在討論和比較探索性因素分析(Exploratory Factor Analysis, EFA)和主成份分析(Principal Component Analysis, PCA)的差異。
- 5浅谈主成分分析与因子分析 - 知乎专栏