修改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
相关产品推荐
相关产品推荐

