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

使用plspm包执行分组分析时持续报错求助

解决plspm分组bootstrap时的"missing value where TRUE/FALSE needed"报错

问题描述

使用plspm包执行PLS-PM基础分析正常,但调用plspm.groups()并指定method = "bootstrap"时触发报错:

Error in if (w_dif < specs$tol || iter == specs$maxiter) break : missing value where TRUE/FALSE needed

已完成排查:

  • 数据无缺失值
  • 变量分类正确
  • 已删除值完全相同的观测
  • 使用permutation方法执行分组分析无异常

相关代码:

farmwood = read.csv("farmwood_groups(distance).csv", header = TRUE) %>%
  slice(-c(119:123))

Control = c(0,0,0,0,0,0)
Normative = c(0,0,0,0,0,0)
B_beliefs = c(0,0,0,0,0,0)
P_control = c(1,0,0,0,0,0)
S_norm = c(0,1,0,0,0,0)
Behavior = c(0,0,1,1,1,0)

farmwood_path = rbind(Control, Normative, B_beliefs, P_control, S_norm, Behavior)
colnames(farmwood_path) = rownames(farmwood_path)

farmwood_blocks = list(14:18,20:23,8:13,24:27,19,4:7)
farmwood_modes = rep("A", 6)
farmwood_pls = plspm(farmwood, farmwood_path, farmwood_blocks, modes = farmwood_modes)

names(farmwood)[names(farmwood) == "QB3"] <- "Distance"
farmwood$Distance <- as.factor(farmwood$Distance)

distance_boot = plspm.groups(farmwood_pls, farmwood$Distance, method = "bootstrap")
distance_perm = plspm.groups(farmwood_pls, farmwood$Distance, method = "permutation")

可能的解决方案

1. 检查分组样本量

bootstrap抽样时,若某分组样本量过小,易导致迭代过程中出现NA值。先查看分组分布:

table(farmwood$Distance)

若存在小样本分组,可调整bootstrap参数:

# 自定义抽样次数和样本比例
distance_boot = plspm.groups(farmwood_pls, farmwood$Distance, method = "bootstrap",
                             bootstrap = list(iter = 500, size = 0.8))

2. 验证分组模型的识别性

基础模型正常不代表每个分组的模型都能稳定运行,单独对每个分组测试:

groups_split = split(farmwood, farmwood$Distance)

for (g in names(groups_split)) {
  cat("分组:", g, "\n")
  try(plspm(groups_split[[g]], farmwood_path, farmwood_blocks, modes = farmwood_modes))
}

若某分组运行报错,需针对该组调整模型或数据。

3. 调整收敛参数

报错出现在收敛判断环节,可放宽收敛阈值或增加最大迭代数后重新运行:

# 重新定义模型收敛参数
farmwood_pls = plspm(farmwood, farmwood_path, farmwood_blocks, modes = farmwood_modes,
                     specs = plspm.specs(tol = 1e-4, maxiter = 1000))

distance_boot = plspm.groups(farmwood_pls, farmwood$Distance, method = "bootstrap")

4. 标准化显变量

变量量纲差异或极端值可能引发数值不稳定,标准化后重试:

# 对分组变量外的所有显变量标准化
farmwood_scaled = farmwood %>%
  mutate(across(-Distance, scale))

# 重新运行模型和分组bootstrap
farmwood_pls_scaled = plspm(farmwood_scaled, farmwood_path, farmwood_blocks, modes = farmwood_modes)
distance_boot_scaled = plspm.groups(farmwood_pls_scaled, farmwood_scaled$Distance, method = "bootstrap")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:45:40