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

lme4自助法置信区间计算:如何使用未纳入模型的样本数据

方案1:在模型公式中加入偏移项保留目标变量

在拟合模型时,将未纳入模型的temperature乘以0后作为偏移项加入公式,该操作不会改变模型的任何拟合结果,且会让temperature保留在模型框架中,自助重拟合过程中可直接调用。

library(lme4)
set.seed(1)
# 加入offset(0*temperature),不影响拟合结果,同时保留temperature变量
mod <- lmer(angle ~ recipe + (1|replicate) + offset(0*temperature), data = cake)

calc_stats <- function(model) {
    recipeA <- fixef(model)[[1]] 
    sd_components <- as.data.frame(VarCorr(model))[['sdcor']] 
    sd_between = sd_components[1]
    sd_within = sd_components[2]
    # 直接从当前bootstrap样本的model@frame中取temperature算均值
    mean_temp <- mean(model@frame$temperature)
    ratio <- sd_within / mean_temp
    
    c(
        recipeA = recipeA,
        sd_between = sd_between,
        sd_within = sd_within,
        sd_within_per_temp = ratio
    )
}

confint(mod, method="boot", FUN = calc_stats, nsim = 100)

方案2:手动实现自助抽样流程

如果不想修改原模型公式,可以手动完成抽样、拟合、计算统计量的全流程,完全自主控制所需变量:

library(lme4)
set.seed(1)
# 原模型不需要修改
mod <- lmer(angle ~ recipe + (1|replicate), data = cake)
nsim <- 100
res <- replicate(nsim, {
  # 有放回抽样获得bootstrap样本
  boot_idx <- sample(nrow(cake), nrow(cake), replace = TRUE)
  boot_dat <- cake[boot_idx, ]
  # 重拟合模型
  boot_mod <- update(mod, data = boot_dat)
  # 计算所需统计量
  sd_within <- as.data.frame(VarCorr(boot_mod))[['sdcor']][2]
  mean_temp <- mean(boot_dat$temperature)
  sd_within / mean_temp
})
# 计算95%置信区间
quantile(res, c(0.025, 0.975))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:45:03