基因维度太高怎么办?无所谓!PCA降维会出手!






基因维度太高怎么办?无所谓!PCA降维会出手!

小师妹  生信果  2023-06-16 19:04:02

{ 点击蓝字,关注我们 }

在RNA-seq实验中,我们通常会获得大量的基因表达数据,每个样本都包含数千个基因的表达量。这些数据非常复杂,难以直接分析和理解。而PCA(Principal Component Analysis)主成分分析可以将这些复杂的数据降维到较低的维度,并可视化成二维或三维图形,从而更好地理解数据的结构和模式。


PCA的核心是选择新的坐标系(主成分),坐标轴垂直(也就是正交,线性无关),方差足够大(为了使数据在坐标轴的投射点尽可能的广,显示出更多数据特征)


在RNA-seq中,PCA可以用于以下几个方面:


数据降维:通过PCA可以将高维的RNA-seq数据降维到较低的维度,同时保留数据的大部分变异性。这样可以减少数据的噪声和冗余信息,从而更好地展现数据的主要特征。


可视化:通过PCA可以将RNA-seq数据可视化为二维或三维图形,从而更好地理解数据的结构和模式。例如,我们可以将不同样本之间的基因表达量绘制成一个散点图,不同样本的表达模式就可以在图形中呈现出来。


数据探索:通过PCA可以发现RNA-seq数据的相关性和差异性,帮助我们发现不同样本之间的差异和共同点。例如,我们可以分析PCA图中的每个主成分,找出对差异性最大的基因,进一步研究这些基因的生物学功能和相关疾病。


我们随机生成两组模拟基因数据,并进行PCA降维。

set.seed(123)n <- 100mean_A <- 5sd_A <- 2mean_B <- 8sd_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 包调用PCA。FactoMineR是一个用于多元探索性数据分析和数据挖掘的R包。它为多维数据的降维、聚类和可视化提供了广泛的方法。

gene.pca <- PCA(gene_data, ncp = 2, scale.unit = TRUE, graph = FALSE)

使用PCA降维,提取贡献度最高的两个特征

#提取样本在 PCA 前两轴中的坐标pca_sample <- data.frame(gene.pca$ind$coord[ ,1:2])pca_sample$Sample=row.names(pca_sample)#提取 PCA 前两轴的贡献度pca_eig1 <- round(gene.pca$eig[1,2], 2)pca_eig2 <- round(gene.pca$eig[2,2],2 )

对降维结果进行可视化

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) +  #根据样本坐标绘制二维散点图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')) +  #去除背景和网格线labs(x =  paste('PCA1:', pca_eig1, '%'), y = paste('PCA2:', pca_eig2, '%'), color = '')  #将 PCA 轴贡献度添加到坐标轴标题中pp + 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对多维的基因数据进行PCA的过程啦,是不是非常简单!快和小师妹一起试试吧!

E

N

D