R语言小白绘图系列|第43弹·主成分分析PCA图

文摘   2024-11-05 09:00   德国  

R 语言小白绘图系列

第 43 弹|主成分分析PCA图

PCA图简介

主成分分析 (PCA, Principal Component Analysis) 是一种常用的降维技术,主要用于处理高维数据集,将数据转换为低维空间,以便更好地可视化或简化后续分析。以下是关于 PCA 图的一些简单介绍:

1. PCA 的目的

PCA 主要用于将高维数据投影到一个低维空间,同时保留尽可能多的原始数据信息。它通过找到数据中的主要变化方向(主成分),并按方差大小依次排序来实现降维。

2. PCA 图解释

PCA 图通常是二维(2D)或三维(3D)图表,展示数据在前两个或前三个主成分(PC1、PC2、PC3)上的分布情况。这些主成分是数据的主要变化方向,通常每个主成分对应一个轴。以下是 PCA 图的一些常见元素:

  • 数据点: 每个点代表一个样本,在新的主成分空间中进行表示。不同类别的数据点可以用不同颜色或形状表示。
  • PC1 和 PC2: 通常是前两个主成分(即方差贡献最大的两个维度)。X 轴通常代表第一个主成分 (PC1),Y 轴代表第二个主成分 (PC2)。
  • 方差解释: 图中会标注每个主成分的方差贡献率,显示该主成分在数据中捕捉的方差信息。例如,PC1 的方差解释可能为70%,PC2可能为20%,表示这两个主成分一起捕获了90%的数据变化信息。
  • 样本聚类: PCA 图可以帮助识别样本的分组和聚类情况,不同类别或组别可能在图上表现出聚集或分离的趋势。

3. PCA 图的应用

  • 数据可视化: 通过将高维数据简化为2D或3D,PCA 图使得复杂的数据更易于理解和可视化。
  • 噪声消除: 通过保留最具信息的主成分,PCA 还能帮助去除数据中的噪声。
  • 特征选择和模型优化: PCA 常用于特征选择,通过剔除解释方差少的主成分,减少数据维度,进而提升机器学习模型的效率和性能。

4. 如何解释 PCA 图

  • 主成分的方向与解释力: 第一主成分(PC1)表示最大的数据变化方向,第二主成分(PC2)表示第二大变化方向。PC1 和 PC2 的方向不同,说明数据变化的主要方向不同。
  • 样本点的位置: 相似的样本在 PCA 图上通常聚集在一起,距离较远的点表示它们在原始空间中的差异较大。

总之,PCA 图是一种直观展示高维数据中主要变化趋势的工具,特别适合用来探索数据结构、识别异常点和发现潜在的模式。

应用实例

本案例中有7个基因,我们想知道能否通过这7个基因的表达量区分高低风险的患者;如果直接对这7个基因可视化,需要绘制一个七维的图形;通过PCA可以进行降维,把7个基因的信息压缩到PC1和PC2中,以便更好地可视化。

下图中:横坐标是PC1,纵坐标是PC2;PC1和PC2中压缩了7个基因的表达信息;红色点代表高风险患者,蓝色点代表低风险患者,图中高低风险患者是分明的,这表明通过这7个基因的表达量可以将高低风险的患者区分开。

图 主成分分析PCA图

源文件

输入文件包含

  • id: 样品名称
  • 分组:Risk(临床分期等亦可)
  • 7个基因的表达量

代码

环境准备

这段代码的目的是安装并加载ggplot2包,用于可视化操作,并为主成分分析(PCA)准备输入输出文件和设置工作目录。以下是逐行解释:

逐行解释:

# 安装ggplot2包
install.packages("ggplot2")
  • 这行代码用于安装ggplot2包,ggplot2是R中最常用的用于数据可视化的包,能够创建高度自定义的图形,包括PCA图。
# 加载ggplot2包
library(ggplot2)
  • 加载ggplot2包,以便后续进行绘图操作,特别是用于PCA结果的可视化。
# 设置输入文件、输出文件和工作目录
inputFile = "input.txt"  # 定义输入数据文件
outFile = "PCA.pdf"      # 定义输出PDF文件名,用于保存PCA结果图
  • inputFile:设置要读取的数据文件,文件名为input.txt,这个文件应该包含进行PCA分析的数据。
  • outFile:设置输出文件名为PCA.pdf,将绘制的PCA图保存到这个PDF文件中。
# 设置工作目录
setwd("D:\\biowolf\\bioR\\45.PCA")
  • 这行代码将当前工作目录设置为D:\\biowolf\\bioR\\45.PCA。R将在这个目录中查找输入文件,并将输出文件保存到该路径下。

总结

这段代码的功能是安装并加载ggplot2包,设置主成分分析(PCA)的输入文件和输出文件,以及指定工作目录。接下来可以从input.txt中读取数据,进行PCA分析,并将结果保存为PDF文件。

读取输入文件并整理

这段代码的目的是从输入文件 input.txt 中读取数据,并进行初步处理以准备进行主成分分析(PCA)。以下是逐行解释:

# 读取输入数据文件
rt = read.table(inputFile, header = TRUE, sep = "\t", check.names = FALSE, row.names = 1)
  • 这行代码从 input.txt 文件中读取数据,并将其存储在数据框 rt 中。
    • header = TRUE:文件的第一行是列名。
    • sep = "\t":数据是以制表符(\t)分隔的。
    • check.names = FALSE:保持原始列名,不修改。
    • row.names = 1:将文件的第一列作为行名,而不是数据的一部分。
# 提取数值数据,去除第一列
data = rt[, c(2:ncol(rt))]
  • 这行代码从数据框 rt 中提取从第二列开始的所有数据,并存储在变量 data 中。通常,在PCA分析中,我们只使用数值数据进行降维,而第一列可能是样本类型或其他信息,不适合直接进行PCA。
# 提取第一列的样本分组信息
Type = rt[, 1]
  • 这行代码提取数据框 rt 的第一列,并将其存储在变量 Type 中。Type 可能是分类标签或样本类型信息,例如不同的实验组(如"Control"、"Treatment"等),可以在PCA结果中作为分类依据。
# 提取第一列的列名
var = colnames(rt)[1]
  • 这行代码获取数据框 rt 的第一列的列名,并存储在变量 var 中。这样可以在后续分析或绘图中使用这个列名作为参考。

数据准备总结:

  1. data:存储了从第二列开始的数值型数据,将用于PCA分析。
  2. Type:存储了第一列的信息,通常是样本的分类标签或组别。
  3. var:存储了第一列的列名,以便后续分析中引用。

现在数据已经被整理好,可以进行PCA分析,并根据Type(样本分组)可视化PCA结果。

PCA分析

这段代码的目的是执行主成分分析(PCA),并将结果整合到一个新的数据框中,用于后续的可视化。以下是逐行解释:

# 进行主成分分析(PCA)
data.pca = prcomp(data, scale. = TRUE)
  • prcomp():这是R中用于执行PCA的函数。
    • data:之前从数据框 rt 提取的数值型数据(去除了样本分组信息)。
    • scale. = TRUE:将数据标准化,使每列数据的方差为1。这对于具有不同尺度的变量非常有用,确保不同变量在PCA中具有相同的权重。
# 使用PCA模型预测主成分值
pcaPredict = predict(data.pca)
  • predict(data.pca):应用PCA模型,计算每个样本的主成分值(即每个样本在新的主成分坐标空间中的投影)。输出是一个矩阵,每一列是一个主成分,每一行是一个样本。
    • 第一列是 PC1,代表样本在第一个主成分方向上的投影。
    • 第二列是 PC2,代表样本在第二个主成分方向上的投影。
# 创建一个新的数据框,将PC1、PC2和样本类型组合
PCA = data.frame(PC1 = pcaPredict[,1], PC2 = pcaPredict[,2], Type = Type)
  • 这行代码创建了一个新的数据框 PCA,其中包含以下三列:
    • PC1:每个样本在第一个主成分方向上的得分(投影)。
    • PC2:每个样本在第二个主成分方向上的得分(投影)。
    • Type:样本类型信息,即之前从数据框 rt 的第一列提取的分组标签。它通常用于区分不同组的样本(例如不同实验组)。

数据准备总结:

  • data.pca:PCA模型,包含主成分分析的结果。
  • pcaPredict:每个样本在PCA空间中主成分的投影,包含所有主成分(PC1、PC2等)。
  • PCA:最终的数据框,包含每个样本的主成分得分(PC1、PC2)以及样本的分组信息(Type),为后续的可视化准备好了数据。

接下来,可以使用 ggplot2 对 PCA 结果进行可视化,展示不同样本组在PC1和PC2平面中的分布情况。

定义颜色

这段代码的目的是根据样本的分组数量动态地生成颜色向量,用于后续的PCA结果可视化。具体解释如下:

# 设置默认颜色为红色和蓝色
col = c("red""blue")
  • 这行代码先定义了一个初始的颜色向量 col,其中包含红色 ("red") 和蓝色 ("blue")。如果样本只有两个分组(比如对照组和实验组),这两个颜色将用于绘制图形。
# 如果分组数多于两个,动态生成颜色
if (length(levels(factor(Type))) > 2) {
    col = rainbow(length(levels(factor(Type))))
}
  • length(levels(factor(Type))) > 2:首先,factor(Type)Type(样本分组信息)转换为因子,levels()获取不同分组的种类,length()计算分组的数量。

    • 这部分逻辑检查样本分组的数量。如果分组数量大于2,就执行以下动态颜色生成。
  • col = rainbow(length(levels(factor(Type)))):如果分组数多于两个,使用 rainbow() 函数生成一个彩虹色谱的颜色向量,颜色数量等于分组数量。这确保了不同的组别有不同的颜色。

解释总结:

  • 如果样本的分组数量只有两个,则颜色将是预定义的红色和蓝色。
  • 如果分组数量大于两个,则生成对应分组数量的彩虹颜色,确保每个组有不同的颜色。

绘制

这段代码的目的是使用ggplot2绘制PCA图,并根据样本分组(Type)对点进行着色,最终将图形保存为PDF文件。以下是逐行解释:

# 打开PDF设备,准备保存图像
pdf(file = outFile, height = 4.5, width = 5.5)
  • 这行代码设置PDF输出设备,定义输出文件名为 outFile(之前定义为 "PCA.pdf")。设置PDF文件的高度为4.5英寸,宽度为5.5英寸。
# 绘制PCA图
p = ggplot(data = PCA, aes(PC1, PC2)) +
    geom_point(aes(color = Type)) +
    scale_colour_manual(name = var, values = col) +
    theme_bw() +
    theme(plot.margin = unit(rep(1.54), 'lines')) +
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

逐行解释:

  1. ggplot(data = PCA, aes(PC1, PC2))

  • 使用ggplot()创建一个基础图层,指定数据框为PCA,并设置主成分1(PC1)作为x轴,主成分2(PC2)作为y轴。
  • geom_point(aes(color = Type))

    • 添加点图(geom_point()),每个点代表一个样本。
    • aes(color = Type):根据样本的分组信息(Type)对点进行着色,确保不同组的样本用不同颜色表示。
  • scale_colour_manual(name = var, values = col)

    • 手动设置颜色比例尺。
    • name = var:将颜色图例的标题设置为var(之前提取的第一列的列名,通常是分组信息的名称)。
    • values = col:将之前生成的颜色向量 col 应用于不同的分组,这确保每个组使用定义好的颜色(如红、蓝或彩虹色)。
  • theme_bw()

    • 使用theme_bw(),这是ggplot2中的一个主题,提供一个白色背景和较简洁的外观。
  • theme(plot.margin = unit(rep(1.5, 4), 'lines'))

    • 设置图形的边距为1.5行的宽度,确保图形不会被剪切。unit(rep(1.5, 4), 'lines')表示所有边距都设置为1.5行的宽度。
  • theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

    • 移除网格线。
    • panel.grid.major = element_blank():移除主要网格线。
    • panel.grid.minor = element_blank():移除次要网格线,使图形更简洁。
    # 打印图像
    print(p)
    • print(p):将生成的PCA图像 p 输出到当前的PDF设备(outFile)。
    # 关闭PDF设备,保存绘图
    dev.off()
    • dev.off():关闭PDF设备,完成文件的保存,图像已写入到指定的PDF文件中。

    总结

    这段代码使用ggplot2生成了一个PCA图,根据样本分组信息(Type)对样本点进行着色,并通过PDF保存图像。绘图中还手动设置了颜色,调整了边距和网格线,使图形更清晰简洁。

    图 主成分分析PCA图

    本文作者:充电宝团队


    现在:


    长按扫码关注:科研生信充电宝


    10元赞赏本文,即喜欢作者~


    即可直接解锁:


    《R语言小白绘图系列|第43弹·主成分分析PCA图》对应资源哦~


    看到这里你还不心动吗?


    赶紧关注、转发、点赞、分享,领取你的专属福利吧~



    好啦,以上就是今天推文的全部内容啦!


    版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。

    如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。


    科研生信充电宝
    介绍科研;介绍统计;介绍生信;
     最新文章