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

如何在R(lme4)中对线性混合模型的Type III固定效应做Bootstrap?

线性混合模型Type III ANOVA的Bootstrap实现

我正在为包含3个二分类固定因子(含所有双向交互项)和1个随机因子的线性混合模型做Bootstrap分析。目前能独立完成以下操作:

  • 拟合线性混合模型
  • 对模型进行Bootstrap抽样
  • 获取模型的Type III固定效应(通过ANOVA方法)

但无法将后两者结合,也就是没法得到Bootstrap后的Type III固定效应结果。线性混合模型本身只能给出与参考类别对比的固定效应估计,Type III效应必须通过对模型执行ANOVA才能获取。我知道怎么给线性混合模型或常规ANOVA做Bootstrap,但不知道如何针对线性混合模型的ANOVA结果做Bootstrap——这正是得到Bootstrap后Type III固定效应的核心。

我用到的R包包括lme4、lmerTest和lmeresampler,相关代码如下:

# 拟合线性混合模型
lmm <- lmer(unlist(DV) ~ unlist(IV1) + unlist(IV2) + unlist(IV3) + 
              unlist(IV1):unlist(IV2) + unlist(IV1):unlist(IV3) + 
              unlist(IV2):unlist(IV3) + (1 | unlist(randomfactor)), 
            data = table)

# 对线性混合模型做Bootstrap
lmm.boot <- bootstrap(lmm, type = "residual", B = 5000, resample = c(TRUE, TRUE))

# 获取线性混合模型的Type III固定效应
anova.lmm <- anova(lmm)

该模型的ANOVA输出结果如下:

Type III Analysis of Variance Table with Satterthwaite's method
                                          Sum Sq Mean Sq NumDF   DenDF F value Pr(&gt;F)
unlist(sex)                                44.03   44.03     1 109.041  0.1831 0.6696
unlist(f0groupfemale)                     611.01  611.01     1  16.435  2.5406 0.1300
unlist(f0groupmale)                        10.37   10.37     1  16.431  0.0431 0.8381
unlist(sex):unlist(f0groupfemale)         149.70  149.70     1 108.462  0.6225 0.4319
unlist(sex):unlist(f0groupmale)            89.36   89.36     1 109.708  0.3716 0.5434
unlist(f0groupfemale):unlist(f0groupmale)  66.19   66.19     1  16.419  0.2752 0.6069

我的问题是:有没有办法对上述Type III ANOVA结果执行Bootstrap?我知道ANOVA.boot可以用于常规ANOVA的Bootstrap,但没法适配线性混合模型的ANOVA结果。


解决方案

要实现线性混合模型Type III ANOVA的Bootstrap,核心思路是在Bootstrap抽样的每一轮中,对重抽样后的数据集拟合模型,然后提取Type III ANOVA的统计量(比如F值、p值或效应量),最后基于这些重复统计量计算置信区间或进行检验。

可以通过lmeresampler包的bootstrap()函数结合自定义统计量函数来实现,具体步骤如下:

  1. 定义一个自定义函数,输入为拟合的lmer模型,输出为Type III ANOVA的关键统计量(比如F值):
# 自定义函数:提取Type III ANOVA的F值
get_type3_f <- function(model) {
  anova_result <- anova(model, type = "III")
  return(anova_result$`F value`)
}
  1. 在调用bootstrap()时,指定这个自定义函数作为statistic参数,这样每一轮Bootstrap都会返回对应模型的Type III ANOVA F值:
# 执行Bootstrap并提取Type III ANOVA统计量
lmm_type3_boot <- bootstrap(lmm, 
                            type = "residual", 
                            B = 5000, 
                            resample = c(TRUE, TRUE),
                            statistic = get_type3_f)
  1. 查看Bootstrap结果,并计算统计量的置信区间:
# 查看Bootstrap后的统计量分布
summary(lmm_type3_boot)

# 计算95%置信区间(以F值为例)
confint(lmm_type3_boot, level = 0.95)

如果需要提取更多统计量(比如p值、均方等),可以修改自定义函数,让它返回一个包含多个统计量的向量:

get_type3_stats <- function(model) {
  anova_result <- anova(model, type = "III")
  return(c(F_value = anova_result$`F value`, 
           Pr_F = anova_result$`Pr(>F)`))
}

# 重新执行Bootstrap
lmm_type3_boot_full <- bootstrap(lmm, 
                                 type = "residual", 
                                 B = 5000, 
                                 resample = c(TRUE, TRUE),
                                 statistic = get_type3_stats)

注意事项

  • 确保你的lmerTest包版本支持anova(lmer_model, type = "III"),如果遇到报错,可以尝试用car包的Anova()函数(注意大写A)来计算Type III ANOVA:
    library(car)
    get_type3_f <- function(model) {
      anova_result <- Anova(model, type = "III")
      return(anova_result$`F value`)
    }
    
  • 残差Bootstrap的假设是模型残差独立同分布,若你的数据不符合该假设,可能需要考虑其他Bootstrap类型(比如参数Bootstrap、个案Bootstrap等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:53:12