如何基于数据框公式列循环拟合混合二项Logistic回归模型
批量拟合混合二项Logistic回归并筛选最优模型
单模型拟合示例
先给出单模型拟合的基础代码参考:
# 基于合并后的df3拟合单个混合二项Logistic回归模型 single_model <- gamlj::gamljGlmMixed( data = df3, formula = outcome ~ predictor1 + predictor2 + (1|group), family = "binomial" ) # 提取该模型的AIC和BIC single_aic <- single_model$model$aic single_bic <- single_model$model$bic
批量循环实现步骤
假设df3中存在一列(示例命名为model_formula),存储了所有待拟合的模型公式(字符格式),可按以下流程批量处理:
- 批量拟合所有模型
用lapply遍历公式列,逐个生成并拟合模型:
# 将字符格式的公式转为公式对象,批量拟合模型 model_list <- lapply(df3$model_formula, function(form_str) { gamlj::gamljGlmMixed( data = df3, formula = as.formula(form_str), family = "binomial" ) })
- 提取所有模型的AIC、BIC及对应公式
遍历模型列表,将关键指标整理为便于对比的数据框:
# 逐个提取模型指标 model_metrics <- lapply(seq_along(model_list), function(i) { current_model <- model_list[[i]] data.frame( model_formula = df3$model_formula[i], AIC = current_model$model$aic, BIC = current_model$model$bic ) }) # 合并为统一数据框 model_metrics_df <- do.call(rbind, model_metrics)
- 筛选最优模型
依据AIC/BIC值(值越小模型拟合效果相对越优)排序,选出最优模型:
# 按AIC升序排序,取首个为最优AIC模型 best_aic_model <- model_metrics_df[which.min(model_metrics_df$AIC), ] # 按BIC升序排序,取首个为最优BIC模型 best_bic_model <- model_metrics_df[which.min(model_metrics_df$BIC), ] # 查看最优模型结果 print(best_aic_model) print(best_bic_model)
注意事项
- 确保
df3中model_formula列的公式格式正确,包含完整的固定效应与随机效应结构(如(1|group)这类随机项) - 若不同公式对应不同数据集子集,需在循环中为每个模型指定对应的数据子集
- 可在循环中加入
tryCatch捕获拟合错误,避免单个模型报错中断整个批量流程
内容的提问来源于stack exchange,提问作者confusedindividual
相关产品推荐
相关产品推荐

