You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言PLS包中适用于多变量Y的成分显著性置换检验函数求助

多响应变量PLS模型的置换检验方案

首先明确:R的pls包没有内置支持多响应Y变量的置换检验函数selectNcomp()的置换检验仅适配单响应场景,无法满足你对逐个成分显著性判断的需求。

你可以通过自定义代码手动实现多Y的PLS置换检验,核心逻辑是通过打乱Y的样本顺序生成零分布,对比原始模型的解释能力来计算显著性:

示例代码

假设你已有预测变量矩阵X和多响应矩阵Y

library(pls)

# 拟合原始PLS模型(这里指定5个成分,可按需调整)
original_pls <- plsr(Y ~ X, ncomp = 5, validation = "none")
# 提取原始模型各成分对Y的累计解释方差
original_var <- cumsum(explvar(original_pls))

# 设置置换次数(建议至少1000次保证稳定性)
n_perm <- 1000
# 初始化矩阵存储置换后的累计解释方差
perm_var_mat <- matrix(NA, nrow = n_perm, ncol = ncomp(original_pls))

# 执行置换循环
set.seed(123) # 固定随机种子,结果可复现
for (i in 1:n_perm) {
  # 随机打乱Y的行顺序,破坏X与Y的真实关联
  permuted_Y <- Y[sample(nrow(Y)), ]
  # 拟合置换后的PLS模型
  perm_pls <- plsr(permuted_Y ~ X, ncomp = ncomp(original_pls), validation = "none")
  # 记录累计解释方差
  perm_var_mat[i, ] <- cumsum(explvar(perm_pls))
}

# 计算每个成分的p值:原始值大于置换分布中值的比例
p_vals <- apply(perm_var_mat, 2, function(perm_vals) mean(original_var >= perm_vals))

# 输出结果
cat("各PLS成分的置换检验p值:\n")
print(p_vals)

结果说明

  • 若某个成分的p值小于你的显著性阈值(如0.05),说明该成分(及之前的所有成分)对多响应变量的解释能力显著高于随机水平
  • 你可以根据p值逐步筛选出具有统计显著性的PLS成分

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

火山引擎 最新活动