基因維度太高怎么辦?無所謂!PCA降維會(huì)出手!

在RNA-seq實(shí)驗(yàn)中,我們通常會(huì)獲得大量的基因表達(dá)數(shù)據(jù),每個(gè)樣本都包含數(shù)千個(gè)基因的表達(dá)量。這些數(shù)據(jù)非常復(fù)雜,難以直接分析和理解。而PCA(Principal Component Analysis)主成分分析可以將這些復(fù)雜的數(shù)據(jù)降維到較低的維度,并可視化成二維或三維圖形,從而更好地理解數(shù)據(jù)的結(jié)構(gòu)和模式。
PCA的核心是選擇新的坐標(biāo)系(主成分),坐標(biāo)軸垂直(也就是正交,線性無關(guān)),方差足夠大(為了使數(shù)據(jù)在坐標(biāo)軸的投射點(diǎn)盡可能的廣,顯示出更多數(shù)據(jù)特征)
在RNA-seq中,PCA可以用于以下幾個(gè)方面:
數(shù)據(jù)降維:通過PCA可以將高維的RNA-seq數(shù)據(jù)降維到較低的維度,同時(shí)保留數(shù)據(jù)的大部分變異性。這樣可以減少數(shù)據(jù)的噪聲和冗余信息,從而更好地展現(xiàn)數(shù)據(jù)的主要特征。
可視化:通過PCA可以將RNA-seq數(shù)據(jù)可視化為二維或三維圖形,從而更好地理解數(shù)據(jù)的結(jié)構(gòu)和模式。例如,我們可以將不同樣本之間的基因表達(dá)量繪制成一個(gè)散點(diǎn)圖,不同樣本的表達(dá)模式就可以在圖形中呈現(xiàn)出來。
數(shù)據(jù)探索:通過PCA可以發(fā)現(xiàn)RNA-seq數(shù)據(jù)的相關(guān)性和差異性,幫助我們發(fā)現(xiàn)不同樣本之間的差異和共同點(diǎn)。例如,我們可以分析PCA圖中的每個(gè)主成分,找出對(duì)差異性最大的基因,進(jìn)一步研究這些基因的生物學(xué)功能和相關(guān)疾病。
我們隨機(jī)生成兩組模擬基因數(shù)據(jù),并進(jìn)行PCA降維。
set.seed(123)
n <- 100
mean_A <- 5
sd_A <- 2
mean_B <- 8
sd_B <- 2
gene_data_A <- matrix(rnorm(n * 5, mean = mean_A, sd = sd_A), nrow = 50, ncol = 10)
gene_data_B <- matrix(rnorm(n * 5, mean = mean_B, sd = sd_B), nrow = 50, ncol = 10)
gene_data <- rbind(gene_data_A, gene_data_B)
colnames(gene_data) <- paste0("Gene", 1:10)
rownames(gene_data) <- 1:nrow(gene_data)
group <- data.frame(Sample = 1:nrow(gene_data), Group = rep(c("GroupA", "GroupB"), each = 50))
可以直接使用FactoMineR 包調(diào)用PCA。FactoMineR是一個(gè)用于多元探索性數(shù)據(jù)分析和數(shù)據(jù)挖掘的R包。它為多維數(shù)據(jù)的降維、聚類和可視化提供了廣泛的方法。
gene.pca <- PCA(gene_data, ncp = 2, scale.unit = TRUE, graph = FALSE)
使用PCA降維,提取貢獻(xiàn)度最高的兩個(gè)特征。
#提取樣本在 PCA 前兩軸中的坐標(biāo)
pca_sample <- data.frame(gene.pca$ind$coord[ ,1:2])
pca_sample$Sample=row.names(pca_sample)
#提取 PCA 前兩軸的貢獻(xiàn)度
pca_eig1 <- round(gene.pca$eig[1,2], 2)
pca_eig2 <- round(gene.pca$eig[2,2],2 )
對(duì)降維結(jié)果進(jìn)行可視化
pca_sample <- merge(pca_sample, group,by="Sample")
head(pca_sample)
p <- ggplot(data = pca_sample, aes(x = Dim.1, y = Dim.2))+
geom_point(aes(color = Group), size = 2) + ?#根據(jù)樣本坐標(biāo)繪制二維散點(diǎn)圖
scale_color_manual(values = c('orange', 'purple')) + ?#自定義顏色
theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'),
legend.key = element_rect(fill = 'transparent')) + ?#去除背景和網(wǎng)格線
labs(x = ?paste('PCA1:', pca_eig1, '%'), y = paste('PCA2:', pca_eig2, '%'), color = '') ?#將 PCA 軸貢獻(xiàn)度添加到坐標(biāo)軸標(biāo)題中
p
p + stat_ellipse(aes(color = Group), level = 0.95, show.legend = FALSE)
p + stat_ellipse(aes(fill = Group), geom = 'polygon', level = 0.95, alpha = 0.3, show.legend = FALSE) +
scale_fill_manual(values = c('orange', 'purple'))

這就是使用R對(duì)多維的基因數(shù)據(jù)進(jìn)行PCA的過程啦,是不是非常簡單!快和小云一起試試吧!
