PCA在R語言中的實現

PCA 簡介

PCA(Principal Component Analysis),即主成分分析。PCA是一種研究數據相似性或差異性的可視化方法,採取降維的思想,PCA 可以找到距離矩陣中最主要的座標,把複雜的數據用一系列的特徵值和特徵向量進行排序後,選擇主要的前幾位特徵值,來表示樣品之間的關係。通過 PCA 可以觀察個體或羣體間的差異。PC 後面的百分數表示對應特徵向量對數據的解釋量,此值越大越好。

和PCA類似的數據降維方法還有MDS和PCoA。它們三者之間的區別聯繫如下圖。

PCA creates plots based on correlations among samples.

MDS and PCoA create plots based on distances among samples.


PCA算法

PCA的計算過程比較複雜,可以參考B站up主上傳的YouTube上的視頻(點擊觀看)作爲參考。PS:YouTube上的StatQuest系列視頻及其通俗易懂,強推。

PCA在R語言中的實現

(R代碼下載:點擊下載

data.matrix <- matrix(nrow = 100,ncol = 10) #創建一個100行10列的空矩陣

colnames(data.matrix) <- c(paste("wt",1:5,sep = ""),paste("ko",1:5,sep = "")) #命名矩陣的列

rownames(data.matrix) <- paste("gene",1:100,sep = "") #命名矩陣的行

# for循環填充矩陣

for (i in 1:100) {

  wt.values <- rpois(5,lambda = sample(x=10:1000,size = 1))

  ko.values <- rpois(5,lambda = sample(x=10:1000,size = 1))

  data.matrix[i,] <- c(wt.values,ko.values)

}

pca <- prcomp(t(data.matrix),scale = TRUE) #t()函數的功能的將矩陣的行列位置進行置換,本例中研究的是“樣本”,不是“Gene”

#prcomp()的結果是三個值:x,sdev和rotation。三個值在後面都會用到

plot(pca$x[,1],pca$x[,2])

pca.var <- pca$sdev^2 # 計算原始數據中的每個數據在每個PC上的比重

pca.var.per <- round(pca.var/sum(pca.var)*100,1) #計算每個PC佔所有PC的和的比列

barplot(pca.var.per,main = "Sreen Plot",xlab = "Princioal Component",ylab = "percent Variation")#柱狀圖顯示每個PC所佔的比列


library(ggplot2)#調用ggplot2()

pca.data <- data.frame(Sample=rownames(pca$x),X=pca$x[,1],Y=pca$x[,2])#創建數據框

#ggplot2繪圖

ggplot(data = pca.data,aes(x=X,y=Y,label=Sample))+

  geom_text()+

  xlab(paste("PC1 - ",pca.var.per[1],"%",sep = ""))+

  ylab(paste("PC2 - ",pca.var.per[2],"%",sep = ""))+

  theme_bw()+

  ggtitle("My PCA Graph")


loading_scores <- pca$rotation[,1] #查看PC1的loading scores

gene_scores <- abs(loading_scores) #計算loading score的絕對值

gene_score_ranked <- sort(gene_scores,decreasing = TRUE) #降序排列loading scores

top_10_genes <- names(gene_score_ranked[1:10])

top_10_genes

pca$rotation[top_10_genes,2]

代碼生成

在網站https://carbon.now.sh上生成帶感的代碼圖片。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章