canoco5主成分分析步骤_R语言 PCA主成分分析
微信公眾號:生信小知識
關注可了解更多的教程及生信知識。問題或建議,請公眾號留言;
R語言 PCA主成分分析
前言統計學背景知識協方差相關系數函數總結實例講解1.載入原始數據2.作主成分分析3.結果解讀4.畫主成分的碎石圖并預測5.PCA結果繪制后記
前言
PCA分析大家肯定經常看到,但是你真的懂PCA分析的結果嗎?
圖我也會看,我只是不是很清楚PCA背后輸出結果的解讀而已。正好看到一篇不錯的博客,就把主要的知識點記錄下 。
reference:
http://www.cnblogs.com/longzhongren/p/4300593.html
https://www.zhihu.com/question/20852004
223.主成分分析PCA
統計學背景知識
協方差
可以通俗的理解為:兩個變量在變化過程中是同方向變化?還是反方向變化?同向或反向程度如何?
你變大,同時我也變大,說明兩個變量是同向變化的,這時協方差就是正的。
你變大,同時我變小,說明兩個變量是反向變化的,這時協方差就是負的。
從數值來看,協方差的數值越大,兩個變量同向程度也就越大。反之亦然。
從公式出發來理解一下:
公式簡單翻譯一下是:如果有X,Y兩個變量,每個時刻的“X值與其均值之差”乘以“Y值與其均值之差”得到一個乘積,再對這每時刻的乘積求和并求出均值(其實是求“期望”,但就不引申太多新概念了,簡單認為就是求均值了)。
具體例子可以去知乎詳細查看:
https://www.zhihu.com/question/20852004
相關系數
對于相關系數,我們從它的公式入手。一般情況下,相關系數的公式為:
翻譯一下:就是用X、Y的協方差除以X的標準差和Y的標準差。
所以,相關系數也可以看成協方差:一種剔除了兩個變量量綱影響、標準化后的特殊協方差。
既然是一種特殊的協方差,那它:
1、也可以反映兩個變量變化時是同向還是反向,如果同向變化就為正,反向變化就為負。
2、由于它是標準化后的協方差,因此更重要的特性來了:它消除了兩個變量變化幅度的影響,而只是單純反應兩個變量每單位變化時的相似程度。
具體例子可以去知乎詳細查看:
https://www.zhihu.com/question/20852004
函數總結
注意:這里的輸入數據,rownames是樣本名,colnames是樣本的特征。(與正常數據正好相反,需要用t()來轉置數據)
princomp()主成分分析 ?可以從相關陣或者從協方差陣做主成分分析
fviz_pca_ind對princomp()結果進行展示
summary()提取主成分信息
loadings()顯示主成分分析或因子分析中載荷的內容
predict()預測主成分的值
screeplot()畫出主成分的碎石圖
biplot()畫出數據關于主成分的散點圖和原坐標在主成分下的方向
實例講解
現有30名中學生身高、體重、胸圍、坐高數據,對身體的四項指標數據做主成分分析。
1.載入原始數據
#?清空環境2.作主成分分析
#?PCA分析結果解讀:
Standard deviation 標準差 ?其平方為方差=特征值
Proportion of Variance 方差貢獻率
Cumulative Proportion 方差累計貢獻率
由結果顯示:前兩個主成分的累計貢獻率已經達到96.36%,可以舍去另外兩個主成分,達到降維的目的。
因此可以得到函數表達式:
Z1 = 0.497*height + 0.515*weight + 0.481*chest + 0.507*sit-h
Z2 = 0.543*height - 0.210*weight - 0.725*chest + 0.368*sit-h
注意要點:
princomp()函數中:
cor是邏輯變量,當cor=TRUE表示用樣本的相關矩陣R做主成分分析,當cor=FALSE表示用樣本的協方差陣S做主成分分析
summary()函數中:
loading是邏輯變量,當loading=TRUE時表示顯示loading 的內容,loadings的輸出結果為載荷是主成分對應于原始變量的系數,即Q矩陣
3.結果解讀
這里我們可以看一看得到的test.pr變量的結構:
sdev是標準偏差
center是每列計算是減去的均值
scores即降維之后的結果
我們可以利用函數來驗證下scores的結果到底是什么意思:
library(factoextra)PCA結果圖:
手動畫散點圖:
可以看到,這兩者的結果圖是一樣的!
4.畫主成分的碎石圖并預測
"lines")5.PCA結果繪制
主要用到的函數是fviz_pca_ind,這個函數來自factoextraR包,所以需要先安裝&加載才可使用,下面記錄下關于這個函數最常用的幾個選項:
Usagefviz_pca_ind(X,?axes?=?c(1,?2),?geom?=?c("point",?"text"),
??????geom.ind?=?geom,?repel?=?FALSE,?habillage?=?"none",?palette?=?NULL,
??????addEllipses?=?FALSE,?col.ind?=?"black",?fill.ind?=?"white",
??????col.ind.sup?=?"blue",?alpha.ind?=?1,?select.ind?=?list(name?=?NULL,?cos2
??????=?NULL,?contrib?=?NULL),?...)
Arguments
# geom——指定圖形上是只顯示點,還是同時也顯示標簽。默認同時顯示。
#?palette——自行指定顏色
#?addEllipses——加95%置信橢圓
#?col.ind——每個點的顏色
#?legend.title——指定legend的名字
下面看實例:
fviz_pca_ind(test.pr,?????????????geom.ind?=?"point",
?????????????col.ind?=?as.character(c(rep("Normal",15),rep("Tumor",15))),
?????????????palette?=?c("red",?"black"),
?????????????addEllipses?=?T,?
?????????????legend.title?=?"Groups")
是有點丑了,不過也是為了方便理解這個函數每個參數的意義。
后記
稍微整理了下,感覺對PCA怎么畫有了更多了解,雖然之前畫過,但是都是跑流程,從沒有關注具體結果,所以,看似簡單,但是卻不熟悉。
總結
以上是生活随笔為你收集整理的canoco5主成分分析步骤_R语言 PCA主成分分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实验原理_Python实验报
- 下一篇: 编写函数判断一个数是否是回文数_程序员面