用ggplot2在R中绘制PCA的问题

问题描述

我目前正在尝试为数据绘制PCA,并且在运行代码时遇到以下问题。

此外,有人可以帮助获取我的数据和代码生成PLS-DA吗?如图片所示?我找不到任何好的教程。

如何解决此问题?情节应该看起来像:

Text

因此,在获得一些帮助之后,我已经走了很远:

我的代码


    library(ggplot2)
library(ggforce)

all_datanoT <- cbind(amino,sphingo,hexose,phospha,lyso,cleaned_xl_Kopie)
all_datawT <- cbind(aminotnos,cleaned_xl_Kopie)
rownames(all_datawT) <- sample_id$`Sample Identification`


alldata_naomit <-na.omit(all_datanoT)
all_datawTnaomit <-na.omit(all_datawT)

mypr <- prcomp(log2(alldata_naomit),scale = TRUE)
summary(mypr)

str(mypr)
mypr$x


PC1 <- mypr$x[,1]
PC2 <- mypr$x[,2]
pcat <- cbind(all_datawTnaomit,PC1,PC2)



ggplot(  
  data = pcat,aes(
    x = PC1,y = PC2,fill = 'Time point',line = 1
  ),shape = 1
) +
  geom_point(
    shape = 21,colour = "black",size = 2,stroke = 0.5,alpha = 0.6
  ) +
  scale_fill_brewer(palette = "Set1") +
  scale_color_brewer(palette = "Set1") +
  geom_mark_ellipse(
    aes(
      fill = 'Time point',color = 'Time point'
    ),alpha = 0.05
  ) 

产生以下图:

Text

如何使两个椭圆T0和T1使用两个不同的时间值?以及如何轻松估算我的数据,以便用列方式代替Na,例如,而不是仅仅省略它们以便绘制图?

带有dput()的原始样本数据

dput(pcat[sample(nrow(pcat),50)])

https://gist.github.com/bicvn/47d97929a63ff99e9b260e8658407ae3

新的dput

https://gist.github.com/bicvn/b06279c6bfa641303b57a3ad2cc07a21

解决方法

您的代码和输出之间似乎存在差异:

pcat <- cbind(all_datawT,mypr$x[,1:2])

将mypr $ x的前两列添加到数据框中。但是输出显示:

mypr$x[1:2]

是矩阵x的前两个值。如果查看该列,您将看到在数据中重复了这两个值。在R中,这是循环利用,这是使用cbind组合长度不同的向量时的默认过程。

找不到变量PC1PC2,因为您从未用这些值创建任何对象,例如

PC1 <- mypr$x[,1]
PC2 <- mypr$x[,2]
pcat <- cbind(all_datawT,PC1,PC2)

应该可以。

,

也请检查这一点,这里我提供了一个示例。该技巧使用Comps <- as.data.frame(mypca$x)来隔离组件,然后将其添加到原始数据。之后,可以将cbind()Comps[,c(1,2)]一起使用以仅提取前两个分量。在这里,我使用了iris数据集:

library(ggplot2)
library(ggforce)
#Data
data("iris")
#PCA
mypca <- prcomp(iris[,-5])
#Isolate components
Comps <- as.data.frame(mypca$x)
#Extract components and bind to original data
newiris <- cbind(iris,Comps[,2)])
#Plot
ggplot(newiris,aes(x=PC1,y=PC2,col = Species,fill = Species)) +
  stat_ellipse(geom = "polygon",col= "black",alpha =0.5)+
  geom_point(shape=21,col="black")

输出:

enter image description here

对于共享数据,仅不应用NA操作。这里的代码和输出以及您共享的数据:

#Code
ggplot(pcat,col = `Time point`,fill = `Time point`)) +
  stat_ellipse(geom = "polygon",col="black")

输出:

enter image description here