【问题标题】:Plotting a subset of data from a prcomp matrix without re-running prcomp绘制 prcomp 矩阵中的数据子集而不重新运行 prcomp
【发布时间】:2018-09-03 05:33:26
【问题描述】:

我向 2 年前发布的类似帖子提问,但没有完整答案 (subset of prcomp object in R)。附:很抱歉评论它以获得答案..

基本上,我的问题是一样的。我使用 prcomp 生成了一个 PCA 表,该表具有 10000 多个基因和 1700 多个细胞,由 7 个时间点组成。将它们全部绘制在一个文件中会让人很难看清。

我想分别绘制每个时间点,使用相同的 PCA 结果表(即不重新运行 prcomp)。

感谢 Dean 给我发帖的提示。想出一种方法来描述我的数据集而不实际加载它,我相信需要一周的时间。我也试过了

dput(droplevels(head(object,2))) 

选项,但信息太多了,因为我有这么大的数据集。简而言之,它是一个大型单细胞数据集矩阵,人们通常可以在 Seurat (https://satijalab.org/seurat/pbmc3k_tutorial_1_4.html) 等软件包上看到它。编辑:我在此处发布了我的矩阵子集的屏幕截图 ()。

抱歉,我不知道如何重新创建它,甚至不知道如何导出文本格式。但这是我可以提供的: 我的 TPM 矩阵有 16541 行(定义基因)和 1798 列(定义细胞)。

在其中,我根据时间点“重新标记”了我的列,使用的代码如下:

D0<-c(colnames(TPM[,grep("20180419-24837-1-*", colnames(TPM))])) #D0: 286 cells

D7<-c(colnames(TPM[,grep("20180419-24837-2-*", colnames(TPM))])) #D7: 237 cells

D10<-c(colnames(TPM[,grep("20180419-24947-5-*", colnames(TPM))])) #D10: 304 cells

……我继续标记每个时间点。

每个时间点也被赋予了特定的颜色。

rc<-rep("white", ncol(TPM))

rc<-[,grep("20180419-24837-1-*", colnames(TPM))]= "magenta"

……我继续给每个时间点上色。

我使用此代码执行了 PCA:

pcaRes<-prcomp(t(log(TPM+1)), center= TRUE, scale. = TRUE)

然后我开始使用以下方法绘制 PCA 图:

 plot(pcaRes$x[,1], pcaRes$x[,2], xlab="PC1", ylab="PC2",
 cex=1.0, col= rc, pch=16, main="")

然后,当我想仅使用 D0 绘制 PCA 图时,使用相同的 PCA 输出 (pcaRes).. 这就是我卡住的地方。

附:如果其他人有更简单的方法来建议如何从我的大矩阵中输入示例数据,我欢迎任何帮助。非常感谢!对不起,我是生物信息学的新手。

【问题讨论】:

  • 嗨@MeganS92,感谢您的提问。与其描述你的矩阵是如何构成的,你能提供一个小的、独立的例子吗?要么使用内置的 R 数据集,要么复制粘贴一些代码来创建一个?这将帮助其他人复制/粘贴并提供解决方案。另请查看此链接以获取更多信息:stackoverflow.com/questions/5963269/…
  • 嘿@MeganS92,如果您尝试做的事情不依赖于您的特定生物信息学数据。您可以输入 ?princomp?prcomp 并查看帮助指南的示例部分。他们通常有一个内部 R 数据集,如 USArrestsstackloss 来展示这些功能。你能重现/伪造这些数据集吗?即编造一些虚假的时间点。
  • 感谢院长。我已经查找了您建议的两个数据集,但我认为两者都不能完全描述我的数据集。我认为最简单的方法是查看一些虚假的单细胞数据集,例如 Seurat 教程中的单细胞数据集。不过话说回来,也可能是我的生物信息学水平太低,不知道怎么提供这个数据集。我很想重现这个数据集,这正是我试图做的,但老实说,我需要一天的时间才能弄清楚如何轻松地做到这一点。对不起。我希望我的数据截图能提供一些提示。
  • 出于好奇,你有没有读过这里的数据:pbmc.data
  • 嗨@ConradThiele,我需要先通过下载链接下载数据,然后解压缩,因为它是一个 zip 文件。之后,我几乎按照您的方式加载它。我能否澄清一下,如果这个问题与我关于 prcomp 的原始问题有关,这不是我正在使用的 ACTUAL 数据集。但是,它在某些方面已经足够接近了……

标签: r plot subset seurat prcomp


【解决方案1】:

Stack Exchange for Bioinformatics 是您需要去那里提问或了解您需要处理您的专业领域的包和功能的地方。 Stack Exchange for BioinformaticsStackoverflow 相关联,因此您只需加入即可,您将拥有相同的登录信息。

S3、S4 和 Base 类。

这是对 R 中类的非常基本的概述。将类视为父类,您从其继承所有技能或能力,因此您能够比其他人更好地完成某些任务,在某些情况下,您不会完全能够完成任务。

在 R 和所有编程中,为了避免重新发明轮子,创建了父类,这样普通人就不必重复编写函数来做一些简单的事情,比如 plot() a graph。这个东西是隐藏的,要访问它,你从父级继承。孩子从父母那里读取特征,然后它要么执行任务,要么给你一个神秘的错误信息。

Base 和 S3 类可以很好地协同工作,它们就像 R 世界的工人阶级。 S4 是针对特定研究领域的专门课程,能够提供其行业所需的特定功能。这意味着您只能将某些 Base 和 S3 函数与 Class S4 函数一起使用,大多数只是不兼容。所以这并不是你做错了什么,plot() 和 ggplot() 只是有错误的父级来处理你的数据集。

典型的基础和 S3 类数据框:盒状结构。左边是所有的列名,整齐地堆叠在一起。

Seurat S4 Class 数据帧:树状结构,格式化为由特定函数读取。

希望对你有所帮助,祝你事业顺利。干杯康拉德

如果这有帮助,请单击向上箭头。 :)

【讨论】:

    【解决方案2】:

    感谢@ConradThiele 的建议,我会查看该网站。

    我与研究所周围的其他生物信息学进行了交谈。我的查询与作为 S4 类的对象几乎没有关系,因为我在包之外执行 prcomp。我已经从对象中提取了我的矩阵,然后在它上面运行了 prcomp。

    解决方案很简单:使用完整数据集运行 prcomp,将 prcomp 输出转换为数据框,输入其他列以输入“时间点”等其他详细信息,仅使用“时间点”/“变量”创建新数据框对 prcomp 结果感兴趣,制作多个子数据框,然后使用“绘图”或您使用的任何函数绘制这些数据框。

    这不是我的解决方案,而是我在我的研究所寻求帮助的生物信息。希望这对其他人有帮助!感谢你的宝贵时间。

    附:如果我有时间,我会尽快发布我建议的代码的副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多