如何在GEE模型中使用glmulti?附lmer可用实现示例
解决glmulti适配GEE模型的问题
错误根源
- 自定义
gee.glmulti函数中硬编码了id="cyl",但geeglm的id参数需要的是数据中的实际变量,而非字符串,导致无法正确识别分组 - 公式处理冗余,
paste(deparse(formula))没必要,直接传入glmulti生成的公式对象即可
修正后的核心代码
自定义GEE拟合函数
gee.glmulti <- function(formula, data, id, ...) { geeglm(formula = formula, data = data, family = gaussian, corstr = "independence", id = data[[id]], ...) }
调用glmulti执行变量选择
res_gee <- glmulti( mpg ~ hp + disp + wt, data = data, fitfunc = gee.glmulti, id = "cyl", crit = "aicc", method = "h", confsetsize = 20, level = 1 ) print(res_gee)
关键修正点
- id参数传递:用
data[[id]]从数据中提取对应分组变量,替代硬编码的字符串,保证参数匹配正确 - 公式传递优化:直接使用glmulti生成的
formula对象,无需额外拼接转换,避免格式错误 - 参数一致性:glmulti中传入
id="cyl"(变量名的字符串),函数内通过data[[id]]映射到数据中的实际变量
完整可运行代码
library(tidyverse) library(lme4) library(geepack) library(glmulti) data <- mtcars %>% as_tibble() %>% mutate(cyl = factor(cyl)) # 自定义适配glmulti的GEE拟合函数 gee.glmulti <- function(formula, data, id, ...) { geeglm(formula = formula, data = data, family = gaussian, corstr = "independence", id = data[[id]], ...) } # 执行模型变量选择 res_gee <- glmulti( mpg ~ hp + disp + wt, data = data, fitfunc = gee.glmulti, id = "cyl", crit = "aicc", method = "h", confsetsize = 20, level = 1 ) print(res_gee)
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

