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 等等