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

R语言PCA分析如何通过图形方法选择合适主成分数

首先修正你现有代码的两处问题,否则会运行报错:

  • 列选择部分重复写了"Shot.put",末尾还多了冗余逗号:decathlon数据集前10列是十项全能的各项比赛成绩,后几列是总积分、排名、赛事信息,做成绩维度的PCA直接取前10列即可,不需要手动重复选列。
  • ncp参数设置为15超出上限:PCA最多能输出和纳入变量数相等的主成分,你最多放10个变量的话,ncp设为10就够了。

修正后的基础运行代码:

data("decathlon")
# 提取用于PCA的运动成绩变量
pca_input <- decathlon[, 1:10]
res.pca <- PCA(pca_input, scale.unit = TRUE, ncp = 10, graph = FALSE)

以下是三种常用的图形化判断主成分保留数量的方法,都可以直接复用代码运行:

1. 基础碎石图(结合肘部法则+Kaiser准则)

用factoextra包的fviz_eig()直接绘制,横轴是主成分序号,纵轴对应每个主成分的特征值/方差解释率:

fviz_eig(res.pca, 
         addlabels = TRUE, # 显示每个主成分的方差解释占比
         ylim = c(0, 40),
         main = "PCA碎石图") +
  # 加Kaiser准则参考线:特征值=1对应的方差占比(标准化后总方差等于变量数)
  geom_hline(yintercept = 100/ncol(pca_input), 
             linetype = "dashed", 
             color = "red")

判断规则:

  • 优先选曲线拐点(肘部)之前的主成分,拐点之后主成分的方差解释增量会骤降,保留价值很低
  • 红线上方的主成分符合Kaiser准则(特征值>1),可以作为辅助判断标准

2. 累计方差贡献率图

同样用fviz_eig(),加参数choice = "cumvariance"即可绘制累计解释方差的变化曲线:

fviz_eig(res.pca, 
         choice = "cumvariance",
         addlabels = TRUE,
         ylim = c(0, 100),
         main = "累计方差贡献率图") +
  # 加自定义阈值参考线,比如常用的80%累计解释率
  geom_hline(yintercept = 80, 
             linetype = "dashed", 
             color = "blue")

判断规则:
根据你所在领域的通用阈值选即可,比如探索性分析累计解释率到60%就可用,工程类/精准建模场景一般要求累计解释率到80%~90%,曲线达到阈值时对应的主成分序号就是要保留的数量。

3. 平行分析图(最稳健的判断方法)

这个方法通过模拟和原始数据同维度的随机矩阵做PCA,对比真实数据和随机数据的特征值差异,避免前两种方法的主观判断偏差:

# 没装psych包先运行安装
# install.packages("psych")
library(psych)
fa.parallel(pca_input, 
            fa = "pc", # 指定做PCA而非因子分析
            n.iter = 100, # 随机模拟次数
            main = "平行分析碎石图")

判断规则:
图中带三角标记的实线是真实数据的特征值,带叉的虚线是随机模拟得到的平均特征值,只要真实特征值在模拟虚线上方,对应的主成分就值得保留,两条线交点之前的主成分数量就是最优选择。

针对你用的decathlon数据集,用上述三种方法判断,一般保留3~4个主成分就足够解释绝大多数成绩差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:21:32