plot(pca$x[;2……" />
當前位置:首頁 > 科技 > 正文

你要的PCA分析來啦!

主成分分析(Principal Component Analysis,PCA)是一種無監督的多元統計分析方法,能從總體上反應各組樣本之間的總體差異和組内樣本之間的變異度大小,其結果一目了然,在許多生信分析中可以運用到。

基本原理是,利用數學的方法,将原來變量重新組合成新的互相無關的幾個綜合變量(即主成分),對所有因素按重要性排序,通常靠後的微小因素被忽略掉,從而起到簡化數據的作用。實際項目中,我們可以通過PCA找出離群樣品、判别相似性高的樣品簇等。

PCA 是一種較為常用的降維技術,PCA 的思想是将維特征映射到維上,這維是全新的正交特征。這維特征稱為主元,是重新構造出來的維特征。

在 PCA 中,數據從原來的坐标系轉換到新的坐标系下,新的坐标系的選擇與數據本身是密切相關的。其中,第一個新坐标軸選擇的是原始數據中方差最大的方向,第二個新坐标軸選取的是與第一個坐标軸正交且具有最大方差的方向,依次類推,我們可以取到這樣的幾個坐标軸。

PCA的計算過程

1、去平均值,即每一位特征減去各自的平均值

2、計算協方差矩陣

3、計算協方差矩陣的特征值與特征向量

4、對特征值從大到小排序

5、保留最大的個特征向量

6、将數據轉換到個特征向量構建的新空間中

PCA分析有很多的方法可以實現,今天要講的是使用R來做PCA分析。在R中有兩個自帶的函數可以做PCA分析,分别是prcomp和princomp,這兩者之間的不同之處在于princomp隻能用于R mode,而prcomp對于R mode和Q mode都可以使用;

R mode是變量(variable)比數據(observation)多的類型,即列比行多,是基于variable的分析,Q mode則是基于observation的分析;兩者使用的算法也不同。所以對于不同的數據類型可以選擇相應的方法去分析。

PCA作圖方法介紹

> data <-read.table('text.xls',header=true)>

> pca = prcomp(data,scale=T)

> head(pca$x) #用于作圖的數據

> summary(pca) #PCA的統計信息

Standard deviation #标準差

Proportion of Variance #差異比例

Cumulative Proportion #累計比例

累計比例達0.8的主成分作為後續分析的數據,從碎石圖也可以判别;

>screeplot(pca,type = 'lines')


圖1:PCA碎石圖

圖上可以看出,從第四個主成分之後,曲線開始趨于平緩,所以選擇前四個主成分用于分析。

  • 運用R自帶的基礎畫圖函數畫PCA散點圖

    > group <- factor(c(rep('a',59),rep('b',71),rep('c',48)))="">

    > colour_group <>

    > colour <>

    > plot(pca$x[,1:2],col =colour,pch=c(20,21,22,23,24)[group])

    > legend('topleft',legend =levels(group),col=colour_group,pch =c(20,21,22,23,24))

    > title('PCA')


圖2:PCA散點圖

  • 用ggplot2畫PCA散點圖

    >library(ggplot2)

    > group_2 <>

    > pca_result <>

    > pca_result <->

    >p<>

    >p<>

    > p


圖3:PCA散點圖

  • scatterplot3d畫PCA 3D圖

    > library(scatterplot3d)

    > par(mar=c(5.1,4.1,4.1,8.1),xpd=TRUE)

    >scatterplot3d(pca_result[,1:3],pch=20,color=colour,angle=45,main='PCA_3D',cex.symbols=2,mar=c(5.1,4.1,4.1,8.1))

    >legend('rigth',legend=group,col=colour,pch=20,bg='white',xpd=TRUE,inset=-0.5)


圖4:PCA 3D圖

  • ggfortify畫PCA圈圖

    > library(ggfortify)

    > data_2=cbind(data,group_2)

    >autoplot(pca,data=data_2,colour='group',label=FALSE,frame=TRUE,frame.type='norm')


圖5:PCA圈圖

你可能想看:

有話要說...

取消
掃碼支持 支付碼