将样本信息添加到 PCA (R) 中的数据集

Posted

技术标签:

【中文标题】将样本信息添加到 PCA (R) 中的数据集【英文标题】:Add sample info to dataset in PCA (R) 【发布时间】:2021-08-24 09:31:00 【问题描述】:

我是生物学家,不是程序员,所以请温柔一点。

所以我有一个看起来像的数据集

Genes  Patient1   Patient2   Patient3
A          324      433         343
B          431       342        124
Z          232       234        267

然后我有样本表,其中包含示例信息,例如:

Patient1 - Healthy
Patient2 - Disease
Patient3 - Healthy

我正在使用:

library(ggfortify)
df <- dataset
pca_res <- prcomp(df, scale. = TRUE)

autoplot(pca_res)

那我想做

autoplot(pca_res, data = ?, colour = '?')

我希望使用样本表中的信息使用自动绘图功能根据状态(健康/疾病)为我的 PCA 着色。有没有办法做到这一点?

【问题讨论】:

我真的认为您应该阅读教程或更清楚地解释您想要做什么。您想要列中的患者吗? 【参考方案1】:

首先,我将创建一个包含所有可用信息的完整 data.frame。

例如,您将需要创建这种 data.frame :

df=structure(list(A = c(324, 433, 343), B = c(431, 342, 124), Z = c(232, 
234, 267), Status = c("Healthy", "Disease", "Healthy")), row.names = c("Patient1", 
"Patient2", "Patient3"), class = "data.frame")

之后,您可以使用factoextra 包,该包对绘制 PCA 非常方便:

pca_res <- prcomp(df, scale. = TRUE)
library(factoextra)
fviz_pca_ind(pca_res, habillage=df$Status)

您可以查看fviz_pca_ind 文档以修改颜色

编辑:

从您的 2 个数据集创建整个数据框:

1)获取您的第一个数据框并将第一列作为行名

rownames(df)=df$Genes
df=df[,-1] #remove the gene column in order to keep only the values

2) 格式化第二个数据框 您应该将其格式化为具有与 df (Patient1, Patient2,...) 相同的列,每个列都有疾病状态,您将调用 df2

df2
rownames(df2)=c("Status")

Patient1   Patient2   Patient3
Healthy   Disease   Healthy

我们不知道您的数据,因此您必须自己执行此操作

3)然后你 rbind df 和 df2

df3=rbind(df,df2)
df3=data.frame(t$df)

然后您使用 df3 执行 PCA

【讨论】:

嗨,我会这样做,但实际数据包含 10,999 个观察结果,因此无法逐个手动完成,我的意思是第一部分 你有 rbind 函数可以做到这一点,假设我们在你的帖子 df 中保留第一个数据框,仅在行名中包含基因值和基因名称,并且你有第二个数据框 df2 与患者信息在列中,您的新数据框将是 rbind(df,df2)

以上是关于将样本信息添加到 PCA (R) 中的数据集的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用psych包的principal函数对指定数据集进行主成分分析PCA进行数据降维(输入数据为相关性矩阵)计算主成分评分系数每个样本(观察)的主成分得分由主成分分数系数构建的公式得到

如何将标题添加到R中的数据集?

用 Numpy 实现 PCA

使用 matlab 和 R 计算数据集的 PCA,但每个组件的方差不同

如何将数据集放入 R 包中

机器学习:PCA(高维数据映射为低维数据 封装&调用)