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)
双标图结果为
据我所知,我对双标图的解释如下:
左轴和底轴:PC1和PC2的分数
右轴和上轴:PC1 和 PC2 的载荷值
观察结果为黑色,并根据 PC 的得分绘制
箭头向量表示哪些变量占了大部分 PC。
箭头名称的位置根据PC1&PC2的加载值组合
箭头长度 - ???
但是,我不知道箭头的长度是根据什么计算的。
我读了一些参考文献,箭头的长度是方差的比例。真的吗?我们如何根据双标图计算它?
你们能帮帮我吗?谢谢
我看了里面的stats:::biplot.princomp
和stats:::biplot.default
。
箭头的长度计算如下
(1)指定了biplot
的scale = 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) 指定了biplot
的scale = 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])
我正在使用 PCA 从我的数据集 here 和工具 S-Plus
生成双标图运行 我的数据的脚本是:
a= princomp(x = ~ ., data = Week.2.Mon.portsweep,scores=T,cor =F)
a$loadings
a$scores
biplot(a,scale=F)
双标图结果为
据我所知,我对双标图的解释如下:
左轴和底轴:PC1和PC2的分数
右轴和上轴:PC1 和 PC2 的载荷值
观察结果为黑色,并根据 PC 的得分绘制
箭头向量表示哪些变量占了大部分 PC。
箭头名称的位置根据PC1&PC2的加载值组合
箭头长度 - ???
但是,我不知道箭头的长度是根据什么计算的。 我读了一些参考文献,箭头的长度是方差的比例。真的吗?我们如何根据双标图计算它?
你们能帮帮我吗?谢谢
我看了里面的stats:::biplot.princomp
和stats:::biplot.default
。
箭头的长度计算如下
(1)指定了biplot
的scale = 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) 指定了biplot
的scale = 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])