PCA 双标图 - 箭头长度

PCA Biplot - Arrow length

我正在使用 PCA 从我的数据集 here 和工具 S-Plus

生成双标图

运行 我的数据的脚本是:

a= princomp(x =  ~ ., data = Week.2.Mon.portsweep,scores=T,cor =F)
a$loadings
a$scores
biplot(a,scale=F)

双标图结果为

据我所知,我对双标图的解释如下:

  1. 左轴和底轴:PC1和PC2的分数

  2. 右轴和上轴:PC1 和 PC2 的载荷值

  3. 观察结果为黑色,并根据 PC 的得分绘制

  4. 箭头向量表示哪些变量占了大部分 PC。

  5. 箭头名称的位置根据PC1&PC2的加载值组合

  6. 箭头长度 - ???

但是,我不知道箭头的长度是根据什么计算的。 我读了一些参考文献,箭头的长度是方差的比例。真的吗?我们如何根据双标图计算它?

你们能帮帮我吗?谢谢

我看了里面的stats:::biplot.princompstats:::biplot.default
箭头的长度计算如下

(1)指定了biplotscale = F选项。

# Data generating process
set.seed(12345)
library(MASS)
n <- 100
mu <- c(1,-2,-0.5)
Sigma <- diag(rep(1,3))
X <- mvrnorm(n, mu=mu, Sigma=Sigma)

pca <- princomp(X, cor=T, scores=T)
biplot(pca, choices = 1:2, scale = F)

# Calculates arrow lengths
lam <- 1
len <- t(t(pca$loadings[, 1:2]) * lam)*0.8

# Plot arrows in green and see if overlap the red ones
mapply(function(x,y) arrows(0, 0, x, y, col = "green", 
            length = .1), x=len[,1], y=len[,2])

(2) 指定了biplotscale = 0.5选项。

scale <- 0.5
biplot(pca, choices = 1:2, scale = scale)

lam <- (pca$sdev[1:2]*sqrt(pca$n.obs))^scale
len <- t(t(pca$loadings[, 1:2]) * lam)*0.8

mapply(function(x,y) arrows(0, 0, x, y, col = "green", length = .1),
       len[,1], len[,2])