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

修改GLM循环:移除当前预测变量并替换为下一个

修正后的代码及说明

问题原因

你的原始代码中,predictors <- colnames(data)[20:i] 会提取从第20列到第i列的所有变量,导致每次循环都累加新的预测变量,而非仅保留一个单独的预测变量。

解决方案(循环版本)

下面的代码会逐个遍历第20列及以后的每个预测变量,每次仅将当前预测变量与x1、x2、x3一起纳入模型:

mod_summaries <- list()

# 提取所有需要单独测试的预测变量名称(第20列到最后一列)
target_preds <- colnames(data)[20:ncol(data)]

# 遍历每个预测变量
for (k in seq_along(target_preds)) {
  current_pred <- target_preds[k]
  # 构建模型所需的数据集:包含y、x1、x2、x3和当前预测变量
  model_data <- data[, c("y", "x1", "x2", "x3", current_pred)]
  # 拟合二项式GLM并保存摘要
  mod_summaries[[k]] <- summary(glm(y ~ ., family = binomial, data = model_data))
}

mod_summaries

更简洁的函数式写法(lapply版本)

如果你习惯R的函数式编程风格,lapply 可以让代码更紧凑,无需手动管理循环索引:

# 提取目标预测变量列表
target_preds <- colnames(data)[20:ncol(data)]

# 用lapply逐个拟合模型并生成摘要
mod_summaries <- lapply(target_preds, function(pred) {
  # 动态构建公式字符串
  model_formula <- as.formula(paste("y ~ x1 + x2 + x3 +", pred))
  # 拟合模型并返回摘要
  summary(glm(model_formula, family = binomial, data = data))
})

mod_summaries

关键改动说明

  • 不再使用范围索引(20:i)累加变量,而是单独遍历每个目标预测变量
  • 每次循环/迭代仅引入一个新的预测变量,确保所有模型都是独立的,结构为 y ~ x1 + x2 + x3 + [单个预测变量]
  • 可选的lapply写法避免了手动维护列表索引,代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:01