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

使用MuMIn::dredge进行glmer模型比较时能否纳入无主效应的交互项?

解决方法:绕过dredge的边际性约束

默认情况下,MuMIn包的dredge()函数会严格遵循边际性原则——也就是当模型包含交互项时,必须同时包含该交互项的所有组成主效应,这是统计建模的常规规范,但如果你确实需要生成违反这一原则的模型组合,可以通过以下方式实现:

方法1:修改dredge的参数设置

要让dredge()允许生成不含主效应但包含对应交互项的模型,需要两步操作:

  1. 显式构建全局模型:把所有你想考虑的主效应和交互项逐一列出来,不要用*符号(*会自动展开主效应+交互项,且dredge会默认维护边际性)。
  2. 关闭边际性检查:调用dredge()时设置marginality = FALSE。

示例代码:

library(lme4)
library(MuMIn)

# 显式列出所有候选固定效应项(主效应+所有交互项)
global_mod <- glmer(
  response ~ a + b + c + d + b:c + b:d + c:d + b:c:d + (1|e),
  data = your_dataset,
  family = your_family  # 替换为你的分布族,比如binomial、poisson等
)

# 调用dredge,关闭边际性约束
model_set <- dredge(global_mod, marginality = FALSE)

这样生成的模型集合就会包含所有可能的组合,比如你提到的response ~ a + b + b:c + (1|e)或response ~ a + c + b:c + a:b:c + (1|e)这类违反边际性的模型。

方法2:手动生成所有模型组合(备选)

如果不想依赖dredge(),可以用combn()生成所有项的组合,再循环拟合模型。这种方法更灵活,但需要自己处理拟合失败的情况:

library(lme4)

# 定义所有候选固定效应项
candidate_terms <- c("a", "b", "c", "d", "b:c", "b:d", "c:d", "b:c:d")

# 生成所有非空的项组合
all_combinations <- unlist(
  lapply(1:length(candidate_terms), function(k) combn(candidate_terms, k, simplify = FALSE)),
  recursive = FALSE
)

# 循环拟合每个模型(注意处理收敛问题)
model_list <- lapply(all_combinations, function(terms) {
  formula <- as.formula(paste("response ~", paste(terms, collapse = " + "), "+ (1|e)"))
  tryCatch(
    glmer(formula, data = your_dataset, family = your_family),
    error = function(e) NULL  # 跳过拟合失败的模型
  )
})

# 过滤掉拟合失败的模型
model_list <- Filter(Negate(is.null), model_list)

# 计算AIC等指标用于比较
aic_scores <- sapply(model_list, AIC)

重要提醒

从统计角度来说,不含主效应的交互项解释性很差——交互项的本质是反映主效应之间的依赖关系,缺少主效应时,交互项的系数无法准确反映变量间的真实关联,甚至会导致结果误导。除非你有非常明确的理论依据支持这种建模方式,否则不建议这么做。

内容的提问来源于stack exchange,提问作者user23089125

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:32:54