如何获取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
相关产品推荐
相关产品推荐

