主成份分析(PCA)主要是想要用比較少的”成份”來看資料變異的 ...

文章推薦指數: 80 %
投票人數:10人

主成份分析(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是一個很重要的變數。

圖二:藍色的部分是天主教比例較高的地區



請為這篇文章評分?