R數(shù)據(jù)可視化4: PCA和PCoA圖

其實不論是PCoA還是PCA圖均是用散點圖來展示結(jié)果PCoA和PCA的結(jié)果,PCoA和PCA準(zhǔn)確來講是數(shù)據(jù)降維分析方法。
順便值此佳節(jié),祝福各位和“科研”都能夠擁有幸福時光和美好結(jié)局。

什么是PCA和PCoA

主成分分析(Principal components analysis,PCA)是一種統(tǒng)計分析、簡化數(shù)據(jù)集的方法。它利用正交變換來對一系列可能相關(guān)的變量的觀測值進(jìn)行線性變換,從而投影為一系列線性不相關(guān)變量的值,這些不相關(guān)變量稱為主成分(Principal Components)。具體地,主成分可以看做一個線性方程,其包含一系列線性系數(shù)來指示投影方向(如圖)。PCA對原始數(shù)據(jù)的正則化或預(yù)處理敏感(相對縮放)。PCA是最簡單的以特征量分析多元統(tǒng)計分布的方法。通常情況下,這種運(yùn)算可以被看作是揭露數(shù)據(jù)的內(nèi)部結(jié)構(gòu),從而更好的解釋數(shù)據(jù)的變量的方法。

PCA示意圖

主坐標(biāo)分析(Principal Coordinates Analysis,PCoA),即經(jīng)典多維標(biāo)度(Classical multidimensional scaling),用于研究數(shù)據(jù)間的相似性。PCoA與PCA都是降低數(shù)據(jù)維度的方法,但是差異在在于PCA是基于原始矩陣,而PCoA是基于通過原始矩陣計算出的距離矩陣。因此,PCA是盡力保留數(shù)據(jù)中的變異讓點的位置不改動,而PCoA是盡力保證原本的距離關(guān)系不發(fā)生改變,也就是使得原始數(shù)據(jù)間點的距離與投影中即結(jié)果中各點之間的距離盡可能相關(guān)(如圖)。

PCoA示意圖

如何進(jìn)行PCA和PCoA分析

R中有很多包都提供了PCA和PCoA,比如常用的ade4包。本文將基于該包進(jìn)行PCA和PCoA的分析,數(shù)據(jù)是自帶的deug,該數(shù)據(jù)提供了104個學(xué)生9門課程的成績(見截圖)和綜合評定。綜合評定有以下幾個等級:A+,A,B,B-,C-,D。
讓我們通過PCA和PCoA來看一看這樣的綜合評定是否合理,是否確實依據(jù)這9門課把這104個學(xué)生合理分配到不同組(每個等級一個組)。

deug的9門課

(1)PCA分析及作圖
前文已經(jīng)介紹了PCA是基于原始數(shù)據(jù),所以直接進(jìn)行PCA分析即可。由于前面已經(jīng)介紹過散點圖的繪制方法,這里不再細(xì)講,PCA分析完畢后我們直接作圖展示結(jié)果。

library(ade4)
library(ggplot2)
library(RColorBrewer)
data(deug)

#PCA分析
pca<- dudi.pca(deug$tab, scal = FALSE, center = deug$cent, scan = FALSE)

#坐標(biāo)軸解釋量(前兩軸)
pca_eig <- (pca$eig)[1:2] / sum(pca$eig)

#提取樣本點坐標(biāo)(前兩軸)
sample_site <- data.frame({pca$li})[1:2]
sample_site$names <- rownames(sample_site)
names(sample_site)[1:2] <- c('PCA1', 'PCA2')

#以最終成績作為分組
sample_site$level<-factor(deug$result,levels=c('A+','A','B','B-','C-','D'))

library(ggplot2)

pca_plot <- ggplot(sample_site, aes(PCA1, PCA2,color=level)) +
  theme_classic()+#去掉背景框
  geom_vline(xintercept = 0, color = 'gray', size = 0.4) + 
  geom_hline(yintercept = 0, color = 'gray', size = 0.4) +
  geom_point(size = 1.5)+  #可在這里修改點的透明度、大小
  scale_color_manual(values = brewer.pal(6,"Set2")) + #可在這里修改點的顏色
  theme(panel.grid = element_line(color = 'gray', linetype = 2, size = 0.1), 
        panel.background = element_rect(color = 'black', fill = 'transparent'), 
        legend.title=element_blank()
  )+
  labs(x = paste('PCA1: ', round(100 * pca_eig[1], 2), '%'), y = paste('PCA2: ', round(100 * pca_eig[2], 2), '%')) 

pca_plot

整體看起來還不錯,就是B-和C-的學(xué)生似乎難以區(qū)分。

(2)PCoA分析及作圖

library(ade4)
library(ggplot2)
library(RColorBrewer)
library(vegan)#用于計算距離
data(deug)
tab<-deug$tab
tab.dist<-vegdist(tab,method='euclidean')#基于euclidean距離
pcoa<- dudi.pco(tab.dist, scan = FALSE,nf=3)

#坐標(biāo)軸解釋量(前兩軸)
pcoa_eig <- (pcoa$eig)[1:2] / sum(pcoa$eig)

#提取樣本點坐標(biāo)(前兩軸)
sample_site <- data.frame({pcoa$li})[1:2]
sample_site$names <- rownames(sample_site)
names(sample_site)[1:2] <- c('PCoA1', 'PCoA2')

#以最終成績作為分組
sample_site$level<-factor(deug$result,levels=c('A+','A','B','B-','C-','D'))

library(ggplot2)

pcoa_plot <- ggplot(sample_site, aes(PCoA1, PCoA2,color=level)) +
  theme_classic()+#去掉背景框
  geom_vline(xintercept = 0, color = 'gray', size = 0.4) + 
  geom_hline(yintercept = 0, color = 'gray', size = 0.4) +
  geom_point(size = 1.5)+  #可在這里修改點的透明度、大小
  scale_color_manual(values = brewer.pal(6,"Set2")) + #可在這里修改點的顏色
  theme(panel.grid = element_line(color = 'gray', linetype = 2, size = 0.1), 
        panel.background = element_rect(color = 'black', fill = 'transparent'), 
        legend.title=element_blank()
  )+
  labs(x = paste('PCoA1: ', round(100 * pcoa_eig[1], 2), '%'), y = paste('PCoA2: ', round(100 * pcoa_eig[2], 2), '%')) 

pcoa_plot

有時候PCA和PCoA的結(jié)果差不多,有時候某種方法能夠把樣本有效分開而另一種可能效果不佳,這些都要看樣本數(shù)據(jù)的特性。
因為沒有現(xiàn)成可供分享的微生物組數(shù)據(jù),所以用了這個成績的數(shù)據(jù)集。通常來說在微生物組的研究中,我們會根據(jù)物種豐度的文件對數(shù)據(jù)進(jìn)行PCA或者PCoA分析,也是我們所說的beta-diveristy分析,根據(jù)PCA或者PCoA的結(jié)果看疾病組和對照組能否分開,以了解微生物組的總體變化情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容