审稿人:你的PCA没分开啊,分辨率也太低了!

文摘   2024-09-12 08:01   爱尔兰  

最近有粉丝后台提问R语言设置分辨率的问题,今天我们就做一个更新,一行代码解决这个问题。竟然有人因为分辨率不足而返修,差点被拒稿,这就太可惜了。

1. 原理介绍

主成分分析(PCA, Principal Component Analysis)是一种线性降维方法,它通过寻找数据的主成分(即方差最大的方向),将高维数据映射到一个较低维的空间,最大化数据的方差,同时尽量减少信息的丢失。在医学科研中,PCA常用于探索数据模式、识别变量之间的关系、检测异常样本等。PCA的一个主要优势是它能够减少数据的维度,简化分析过程,同时仍保留大部分信息。
PCA的基本原理是基于协方差矩阵或者数据的相关矩阵来构造新变量(主成分)。PCA的步骤如下:1. 数据标准化:由于不同特征的量纲可能不同,标准化可以保证每个特征对PCA有同等的影响。2. 协方差矩阵计算:对标准化后的数据计算协方差矩阵。3. 特征值与特征向量分解:协方差矩阵的特征值和特征向量用来表示数据的主成分方向和对应的方差大小。4. 主成分选择:根据解释方差比例来选择前几大主成分。5. 降维映射:通过选定的主成分将数据投影到低维空间。

2. 适用范围

PCA特别适用于以下场景:- 高维数据(例如,包含多个变量的基因表达数据) - 希望进行降维以便于可视化和后续分析 - 数据具有显著的协方差结构 - 变量之间的关系复杂,需要探索其内在模式

3. 医学科研中的应用举例

  1. 基因表达数据分析:医学研究中常用PCA来处理高维基因表达数据。通过PCA,可以将几千个基因的表达信息降维,找出能够解释大部分方差的基因组合,进而揭示不同样本间的差异。
  2. 图像数据分析:在医学图像分析中(例如,MRI或CT扫描图像),PCA可以用于图像压缩或特征提取。
  3. 药物反应研究:PCA可以帮助研究不同病人对药物反应的分布,识别特定的病人亚群。
  4. 流式细胞数据分析:PCA用于处理复杂的流式细胞数据,可以简化数据集并进行细胞群体的分群与特征分析。

4. R语言中的PCA演示

接下来,我们通过R语言展示如何进行PCA分析和可视化。

(1) 安装和加载必要的R包

# 如果还没有安装这些包,可以先运行这段代码安装
## install.packages(c("ggplot2", "FactoMineR", "factoextra"))

# 加载必要的包
library(ggplot2)
library(FactoMineR) # 用于PCA分析
library(factoextra) # 用于PCA结果的可视化

(2) 加载数据并进行PCA分析

这里我们使用内置的iris数据集作为示例。
# 加载 iris 数据集
data(iris)

# 移除分类列,进行PCA前仅保留数值数据
iris_data <- iris[, 1:4]

# 进行PCA分析
pca_result <- PCA(iris_data, graph = FALSE)

(3) 查看PCA结果

# 查看PCA结果的解释方差比例
pca_result$eig
## eigenvalue percentage of variance cumulative percentage of variance
## comp 1 2.91849782 72.9624454 72.96245
## comp 2 0.91403047 22.8507618 95.81321
## comp 3 0.14675688 3.6689219 99.48213
## comp 4 0.02071484 0.5178709 100.00000
# 查看变量对主成分的贡献
pca_result$var$coord
## Dim.1 Dim.2 Dim.3 Dim.4
## Sepal.Length 0.8901688 0.36082989 -0.27565767 -0.03760602
## Sepal.Width -0.4601427 0.88271627 0.09361987 0.01777631
## Petal.Length 0.9915552 0.02341519 0.05444699 0.11534978
## Petal.Width 0.9649790 0.06399985 0.24298265 -0.07535950

(4) 可视化主成分分析结果

我们可以使用factoextra包进行PCA结果的可视化。首先,绘制样本的主成分图,并根据样本分类进行分组着色。
# 可视化PCA结果,颜色根据种类分组
fviz_pca_ind(pca_result,
geom.ind = "point", # 显示样本点
col.ind = iris$Species, # 根据种类着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色
addEllipses = TRUE, # 添加置信椭圆
legend.title = "Species", # 图例标题
title = "PCA of Iris Dataset", # 图标题
pointsize = 3, # 点的大小
repel = TRUE) # 防止标签重叠

(5) 可视化变量的贡献

除了观察样本的分布,我们还可以查看变量(特征)对主成分的贡献。
# 可视化变量的贡献
fviz_pca_var(pca_result,
col.var = "contrib", # 根据贡献着色
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色
title = "Variables Contribution to PCs") # 设置图标题

(6) 绘制主成分贡献条形图

# 绘制主成分的解释方差比例
fviz_eig(pca_result,
addlabels = TRUE,
ylim = c(0, 60),
title = "Scree Plot: Variance Explained by PCs")

(7) 将PCA结果保存为高分辨率图片

# 将PCA图保存为高分辨率图片
ggsave("PCA_iris.png", width = 8, height = 6, dpi = 300)

5. 小结

PCA作为一种强大的数据降维方法,广泛应用于医学科研中,尤其适用于高维数据的分析与可视化。通过R语言的FactoMineRfactoextra包,我们可以轻松实现PCA分析和结果可视化。同时,通过自定义颜色、标题、图例等个性化设置,我们可以生成符合特定需求的SCI图表。

感谢关注,你的支持是我不懈的动力

科研代码
专注R和Python的数据分析。
 最新文章