绘制两个主成分得分向量,使用不同的颜色表示三个独特的 类

Plotting two principal component score vectors, using a different color to indicate three unique classes

在三个 类(即总共 60 个观察值)和 50 个变量中的每一个中生成一个包含 20 个观察值的模拟数据集后,我需要绘制前两个主成分得分向量,使用不同的颜色来表示三个唯一 类.

我相信我可以创建模拟数据集(请验证),但我在弄清楚如何为 类 着色和绘制时遇到问题。我需要确保三个 类 在图中分开显示(否则我需要重新 运行 模拟数据)。

#for the response variable y (60 values - 3 classes 1,2,3  - 20 observations per class)
y <- rep(c(1,2,3),20)

#matrix of 50 variables i.e. 50 columns and 60 rows i.e. 60x50 dimensions (=3000 table cells)   
x <- matrix( rnorm(3000), ncol=50)

xymatrix <- cbind(y,x)
dim(x)
[1] 60 50
dim(xymatrix)
[1] 60 51
pca=prcomp(xymatrix, scale=TRUE)

如上所述,我应该如何正确绘制主成分分析图并为其着色?谢谢你。

如果我对你的问题理解正确,Gally 包中的 ggparcoord 会对你有所帮助。

library(GGally)
y <- rep(c(1,2,3), 20)

# matrix of 50 variables i.e. 50 columns and 60 rows 
# i.e. 60x50 dimensions (=3000 table cells)   
x <- matrix(rnorm(3000), ncol=50)

xymatrix <- cbind(y,x)
pca <- prcomp(xymatrix, scale=TRUE)

# Principal components score and group label 'y'
pc_label <- data.frame(pca$x, y=as.factor(y))

# Plot the first two principal component scores of each samples
ggparcoord(data=pc_label, columns=1:2, groupColumn=ncol(pc_label))

但是,我认为对 x 而不是包含目标 yxymatrix 进行 PCA 更有意义。所以下面的代码应该更适合你的情况。

pca <- prcomp(x, scale=TRUE)

pc_label <- data.frame(pca$x, y=as.factor(y))

ggparcoord(data=pc_label, columns=1:2, groupColumn=ncol(pc_label))

如果您想要前两个主成分分数的散点图,可以使用 ggplot

library(ggplot2)

ggplot(data=pc_label) + 
  geom_point(aes(x=PC1, y=PC2, colour=y))

这是一个基本的 R 解决方案,展示了如何简单地完成此操作。首先只在 x 矩阵上进行 PCA,然后从结果对象中得到一个我们称之为 PCs.

的变换变量矩阵
x <- matrix(rnorm(3000), ncol=50)
pca <- prcomp(x, scale=TRUE)
PCs <- as.matrix(pca$x)

现在我们可以根据您的y标签制作颜色名称向量。

col.labs <- rep(c("Green", "Blue", "Red"), 20)

现在只需绘制成散点图,将颜色向量传递给 col

plot(PCs[, 1], PCs[, 2], col=col.labs, pch=19, xlab = "Scores on PC1", ylab="Scores on PC2")