欢迎光临散文网 会员登陆 & 注册

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

2023-06-16 16:08 作者:尔云间  | 我要投稿


在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 <- 100

mean_A <- 5sd_A <- 2mean_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 包调用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 轴贡献度添加到坐标轴标题中

    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对多维的基因数据进行PCA的过程啦,是不是非常简单!快和小云一起试试吧!


    基因维度太高怎么办?无所谓!PCA降维会出手!的评论 (共 条)

    分享到微博请遵守国家法律