r:主成分分析和绘制主成分观察结果 space

r: pca and plotting observations in principal component space

我对一个小型数据集(20 个观察值,17 个变量,其中大部分高度相关)执行快速 PCA 分析和可视化。我使用 library(psych) 和现成的函数 principal() 来完成大部分工作。我得到了标准化的加载矩阵。输出示例如下(Vi 是变量;只显示了几个):

      PC1   PC2   PC3   PC4   PC5   PC6   PC7   PC8   PC9
V1   0.20 -0.79  0.46  0.06 -0.20  0.22 -0.06  0.03 -0.15
V2   0.18 -0.86  0.37 -0.12 -0.09  0.17 -0.11 -0.01 -0.05
V3   0.72  0.42 -0.16  0.23 -0.35 -0.17  0.21 -0.05  0.03
V4   0.81  0.34 -0.21  0.34 -0.22  0.03 -0.01 -0.04  0.00
V5   0.61 -0.38 -0.34 -0.02  0.37 -0.27  0.35  0.03 -0.12
V6   0.80  0.31  0.02 -0.08 -0.38  0.20 -0.04 -0.13 -0.19

我想保留 2 或 3 个主成分(其他测试建议这样做)并在 space PC1-PC2 或 3D PC1-PC2-PC3 中绘制我的数据的散点图。如何用 R 做到这一点?

这里是参数的原始数据(前几行)示例。

field,V1,V2,V3,V4,V5,V6
Shah-Deniz,37.5,70,16200,23000,300,250
Sanate,180,150,14000,17000,175,190
Kern-River,275,250,13000,17000,64,240
East Texas,90,100,11000,12000,520,160
Smackover,35,25,13700,15000,50,170
South Pass,45,60,14100,15000,61,190
Monroe,27,30,14400,15000,72,150
Minas,170,230,6500,7300,300,90

我知道,解决方案是以某种方式将这个原始矩阵乘以负载矩阵以获得 PCi 上的投影 space,但我对这个矩阵乘法及其在几次试验后的顺序有点困惑.第二个挑战是散点图本身(2D 或 3D),用观察值标记所有点。也许包中已经有一个函数,这个矩阵代数可以工作并且可以从头开始可视化结果?

更新。一个混淆来自于原始数据中的变量是不可比较的(有些以km为单位,有些以m为单位,然后是km^2,或mln.tons)。那么在某个阶段,缩放数据矩阵应该发挥作用吗?

我不熟悉 psych 库,但您可以在基础 R 中轻松做到这一点

X = data.frame(matrix(rnorm(1:100), nrow = 10)) # Make example dataframe
pca = princomp(X, cor = T) # Perform PCA. Note cor = T should get around your 'variables on different scales' issues as correlation matrix is scale-free.
scores = pca$scores # Extract PCA scores
windows() # Plot scores for first 2 pcs
plot(scores[, 1], scores[, 2], xlab = "PC1", ylab = "PC2", type = "n")
text(scores[, 1], scores[, 2], row.names(X), cex = 0.8) #you can replace row.names(X) with whatever your observations are called

不确定如何从头顶绘制 3d 散点图,但使用 PCA,我总是只绘制多个 2d 图,例如PC1 vs. PC2, PC1 vs. PC3 等等