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

R语言手动实现PCA:求解主成分方差解释占比遇阻求助

计算主成分方差解释占比的R实现步骤

核心逻辑:主成分的方差解释占比 = 单个主成分得分的方差 ÷ 所有主成分得分的方差总和(或原始数据的总方差,结果一致)

步骤1:计算每个主成分得分的方差

你的Z矩阵每一行对应一个主成分的5个观测得分,用apply()函数计算每行的方差:

# 计算每个主成分的方差(var()默认除以n-1,是统计上的无偏估计)
pc_var <- apply(Z, 1, var)

步骤2:计算总方差

总方差是所有主成分方差的总和,直接用sum()求和:

total_var <- sum(pc_var)

步骤3:计算方差解释占比(百分比形式)

将每个主成分的方差除以总方差,再乘以100转成百分比,保留两位小数让结果更直观:

var_explained <- round((pc_var / total_var) * 100, 2)
# 给结果命名,对应三个主成分
names(var_explained) <- c("主成分1", "主成分2", "主成分3")

完整代码整合

把上述步骤和你已有的代码整合在一起:

# 原始数据矩阵
A <- matrix(
  c(-2, -2, 0, 2, 2, -2, 2, 0, -2, 2, -4, 0, 0, 0, 4),
  nrow = 3,
  ncol = 5,
  byrow = TRUE
)

# 主成分向量矩阵(每列是一个主成分向量)
Phi <- matrix(
  c(0.41, -0.71, 0.58, 0.41, 0.71, 0.58, 0.82, 0.00, -0.58),
  nrow = 3,
  ncol = 3,
  byrow = FALSE
)

# 计算主成分得分
Z <- Phi %*% A

# 计算每个主成分的方差
pc_var <- apply(Z, 1, var)

# 计算总方差
total_var <- sum(pc_var)

# 计算方差解释占比(百分比)
var_explained <- round((pc_var / total_var) * 100, 2)
names(var_explained) <- c("主成分1", "主成分2", "主成分3")

# 输出结果
print("各主成分方差解释占比:")
print(var_explained)

补充说明

  • 方差的意义:主成分的方差越大,说明它能捕捉到的原始数据波动(信息)越多
  • 验证总方差:你可以用sum(apply(A, 1, var))计算原始数据的总方差,结果和total_var一致,这是PCA的核心性质——总方差守恒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:25:35