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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:37:11