You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取prcomp()+biplot()生成的红色箭头的长度与位置数值

获取PCA biplot红色箭头的数值信息

biplot里的红色箭头对应的是变量在主成分上的加载量(loadings),这些数值就存在你生成的rating.pc对象里,不用依赖biplot函数本身提取,直接操作对象就能拿到:

1. 提取箭头的位置坐标

箭头的x、y坐标(对应biplot默认展示的PC1、PC2)就是rating.pc$rotation矩阵里的数值,直接提取即可:

# 提取前两个主成分的加载值
arrow_coords <- as.data.frame(rating.pc$rotation[, 1:2])
colnames(arrow_coords) <- c("PC1", "PC2")
print(arrow_coords)

每一行对应一个变量,PC1是箭头在横轴的位置,PC2是纵轴位置。

2. 计算箭头长度

箭头长度代表变量对主成分组合的贡献程度,用欧几里得距离计算每个变量的箭头长度:

arrow_coords$length <- sqrt(arrow_coords$PC1^2 + arrow_coords$PC2^2)
# 按长度排序,方便对比变量贡献度
arrow_coords_sorted <- arrow_coords[order(-arrow_coords$length), ]
print(arrow_coords_sorted)

3. 整合到你的现有代码中

把提取逻辑加到你现有流程的最后即可:

df <- read.csv(file = "data/PCA_data_all.csv", sep = ",")
df <- df %>%
  separate(model_name, into = c("Make"), sep = " ", remove = FALSE)
df <- df %>%
  select(-model_name)
df[,2:31] <- scale(df[,2:31])
brand.mean <- aggregate(df[,2:31], list(df[,1]), mean)
row.names(brand.mean) <- brand.mean$Group.1
brand.mean <- brand.mean[,-1]
rating.pc <- prcomp(brand.mean, scale=TRUE)
plot(rating.pc, type="l")
biplot(rating.pc, main="Brand Positioning", cex=c(0.5, 0.5))

# 提取箭头位置与长度信息
arrow_coords <- as.data.frame(rating.pc$rotation[, 1:2])
colnames(arrow_coords) <- c("PC1", "PC2")
arrow_coords$length <- sqrt(arrow_coords$PC1^2 + arrow_coords$PC2^2)
# 查看完整结果
print(arrow_coords)
# 按贡献度排序查看
print(arrow_coords[order(-arrow_coords$length), ])

补充说明:加载值的正负表示变量与对应主成分的相关性方向,长度越大说明该变量对PC1-PC2二维空间的解释贡献越强,能帮你精准对比不同变量的影响力。

内容的提问来源于stack exchange,提问作者Axton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:22:17