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 等等
我对一个小型数据集(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 等等