基于AIC的混合效应模型选型 求等效glmulti的R实现方案
混合效应模型AIC排序候选列表生成方案
适用场景说明
你提到的按AIC排序筛选模型的流程完全适用于混合效应模型,通常我们会先固定随机效应结构,再对固定效应的组合做枚举筛选,和你之前固定效应模型的选型逻辑一致。
方法1:沿用你熟悉的glmulti包,无需切换工具
glmulti支持自定义拟合函数,你只需要固定随机效应结构、指定用glmer拟合即可,完全兼容你之前的使用习惯:
library(glmulti) library(lme4) # 自定义拟合函数,固定你的随机效应、数据集、分布参数 glmer_custom <- function(formula, data = detect, family = binomial) { # 拼接固定效应与预设随机效应 full_form <- as.formula(paste0(as.character(formula)[2], " ~ ", as.character(formula)[3], " + (1 | obsname) + (1 | bird)")) # 用ML拟合,REML不可用于固定效应结构不同的模型比较 mod <- glmer(full_form, data = data, family = family, na.action = na.fail) return(mod) } # 启动枚举,仅对固定效应做组合筛选 res <- glmulti(outcome ~ sex + season + year, fitfunc = glmer_custom, critfunc = AIC, level = 1, # 1表示仅筛选主效应,需加交互项可改为2 method = "h") # h为全枚举,变量过多可改用遗传算法"g" # 按你之前的习惯提取排序后的列表,取前10个 head(weightable(res), 10)
方法2:用MuMIn::dredge,混合效应模型选型更常用的工具
该包专门做多模型推断,对lme4系列模型适配性更好:
library(lme4) library(MuMIn) # 先拟合包含所有待筛选固定效应的全模型 full_mod <- glmer(outcome ~ sex + season + year + (1 | obsname) + (1 | bird), data = detect, family = binomial, na.action = na.fail) # 枚举所有固定效应组合,按AIC自动排序 dredge_res <- dredge(full_mod, rank = "AIC") # 提取前10个候选模型,输出包含AIC、delta AIC、AIC权重等信息 head(dredge_res, 10)
注意事项
- 不要同时枚举随机效应和固定效应的组合,建议先通过似然比检验确定最优随机效应结构后,再做固定效应的筛选
- 若待筛选的固定效应数量较多,全枚举计算量会指数级增长,可改用启发式搜索减少计算量
- 若要计算校正AIC(AICc),把排序规则改为
rank = "AICc"即可
内容的提问来源于stack exchange,提问作者user17047272
相关产品推荐
相关产品推荐

