【问题标题】:Colouring a PCA plot by clusters in R通过 R 中的集群为 PCA 图着色
【发布时间】:2015-08-27 21:46:20
【问题描述】:

我有一些看起来像这样的生物数据,有 2 种不同类型的集群(A 和 B):

                Cluster_ID       A1      A2      A3       B1       B2      B3
 5  chr5:100947454..100947489,+   3.31322  7.52365  3.67255  21.15730  8.732710 17.42640
12 chr5:101227760..101227782,+   1.48223  3.76182  5.11534  15.71680  4.426170 13.43560
29 chr5:102236093..102236457,+  15.60700 10.38260 12.46040   6.85094 15.551400  7.18341

我清理数据:

CAGE<-read.table("CAGE_expression_matrix.txt", header=T)
CAGE_data <- as.data.frame(CAGE)

#Remove clusters with 0 expression for all 6 samples
CAGE_filter <- CAGE[rowSums(abs(CAGE[,2:7]))>0,]

#Filter whole file to keep only clusters with at least 5 TPM in at least 3 files
CAGE_filter_more <- CAGE_filter[apply(CAGE_filter[,2:7] >= 5,1,sum) >= 3,]
CAGE_data <- as.data.frame(CAGE_filter_more)

在此之后数据大小从 6981 个集群减少到 599 个。

然后我继续申请 PCA:

#Get data dimensions

dim(CAGE_data)
PCA.CAGE<-prcomp(CAGE_data[,2:7], scale.=TRUE) 
summary(PCA.CAGE)

我想创建一个数据的 PCA 图,标记每个样本并根据它们的类型(A 或 B)为样本着色。因此,对于每个样本的带有文本标签的图,它应该是两种颜色。

这是我尝试过的,错误的结果:

qplot(PC1, PC2, colour = CAGE_data, geom=c("point"), label=CAGE_data, data=as.data.frame(PCA.CAGE$x))

ggplot(data=PCA.CAGE, aes(x=PCA1, y=PCA2, colour=CAGE_filter_more, label=CAGE_filter_more)) + geom_point() + geom_text()

qplot(PCA.CAGE[1:3], PCA.CAGE[4:6], label=colnames(PC1, PC2, PC3), geom=c("point", "text"))

错误显示如下:

  > qplot(PCA.CAGE$x[,1:3],PCA.CAGE$x[4:6,], xlab="Data 1", ylab="Data 2")

  Error: Aesthetics must either be length one, or the same length as the dataProblems:PCA.CAGE$x[4:6, ]

  > qplot(PC1, PC2, colour = CAGE_data, geom=c("point"), label=CAGE_data,    data=as.data.frame(PCA.CAGE$x))

  Don't know how to automatically pick scale for object of type data.frame.   Defaulting to continuous
  Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous
  Error: Aesthetics must either be length one, or the same length as the dataProblems:CAGE_data, CAGE_data

 > ggplot(data=PCA.CAGE, aes(x=PCA1, y=PCA2, colour=CAGE_filter_more,      label=CAGE_filter_more)) + geom_point() + geom_text()

 Error: ggplot2 doesn't know how to deal with data of class 

【问题讨论】:

  • 你遇到了什么错误?
  • 在上面编辑给你看!
  • 我从不使用 qplot,但很明显你从最后一个函数得到的错误是 PCA.CAGE 不是 data.frame
  • 我在开始时将其设置为数据框...您对在 R 中制作 PCA 图有其他建议吗?
  • 您在任何时候都没有将 PCA.CAGE 设置为 data.frame

标签: r pca


【解决方案1】:

您的问题没有意义(至少对我而言)。您似乎有两组 3 个变量(A 组和 B 组)。当您对这 6 个变量运行 PCA 时,您将获得 6 个主成分,每个成分都是所有 6 个变量的(不同)线性组合。聚类基于案例(行)。如果您想根据前两台 PC 对数据进行聚类(一种常用方法),那么您需要明确地执行此操作。这是一个使用内置 iris 数据集的示例。

pca   <- prcomp(iris[,1:4], scale.=TRUE)
clust <- kmeans(pca$x[,1:2], centers=3)$cluster
library(ggbiplot)
ggbiplot(pca, groups=factor(clust)) + xlim(-3,3)

所以我们在这里对iris 的前 4 列运行 PCA。然后,pca$x 是一个矩阵,其中包含列中的主成分。然后我们基于前 2 台 PC 运行 k-means 聚类,并将聚类编号提取到clust。然后我们使用ggibplot(...) 来制作情节。

【讨论】:

  • 你是如何得到 pca$x 矩阵的?
  • 我不明白。 prcomp(...) 返回一个“prcomp”对象,它是一个命名列表。其中一个元素x 是一个包含主成分的矩阵。输入str(pca)
  • 谢谢我想出了一个情节使用: 'PCA.CAGE
  • 此代码不应运行:ggplot 中的“文本”几何图形绘制标签而不是点,因此您必须指定用于标签的内容。我建议你阅读关于 ggplot 的教程,也许是this one
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2012-07-15
  • 2016-04-29
相关资源
最近更新 更多