You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

线性混合模型Bootstrapping 95% CI两种计算结果差异问询

线性混合模型Bootstrap置信区间差异的原因分析

你遇到的核心问题是手动实现的Bootstrap方法与**broom.mixed::tidy()内置Bootstrap方法**(以及confint()默认方法)得到的置信区间差异显著,下面拆解具体原因:

1. 重抽样单元的本质差异

你的手动rsq函数使用boot包默认的观测级重抽样:直接对数据集的行进行随机抽样,这会破坏LMM的分组结构(比如抽到某个greenhouse.position的部分观测,却遗漏同组的其他观测)。这种抽样方式违背了混合模型的分层假设,会导致模型方差估计偏差,最终置信区间偏离真实值。

broom.mixed::tidy()conf.method = "boot"默认采用集群Bootstrap:先对greenhouse.position分组单元重抽样,再抽取该分组下的所有观测,完整保留了原数据的聚类结构,更贴合LMM的统计假设,因此得到的区间更可靠。

2. 模型拟合与统计量处理的细节差异

你的手动函数仅提取了系数的点估计值(coef(summary(mod))[2]),未考虑混合模型随机效应估计的完整逻辑;而broom.mixed的Bootstrap过程会严谨处理随机效应的估计流程,即使指定boot.type = "perc",其背后的抽样逻辑与观测级重抽样也完全不同。

另外,confint(mod)默认使用轮廓似然法,这和Bootstrap是完全独立的统计方法,得到的区间自然存在差异,但轮廓似然法本身也是LMM置信区间的标准可靠方法之一。

3. 样本量与Bootstrap次数的放大效应

全量数据集(500条)下手动方法的CI更宽,也符合观测级重抽样的特点:破坏聚类结构会导致模型估计的方差被高估,因此置信区间更宽;而集群Bootstrap保留了聚类结构,方差估计更准确,区间更窄且更贴近真实值。

哪种结果更可靠?

如果你的数据存在明确的聚类结构(这里greenhouse.position是分组变量),broom.mixed::tidy()的集群Bootstrap结果、confint(mod)的轮廓似然区间都是更可靠的选择。你的手动观测级重抽样方法并不适配LMM,违背了模型的分层假设。

对于后续的多参数LMM或非线性混合模型,建议:

  • 优先使用专门针对混合模型设计的Bootstrap工具(如broom.mixed的实现)
  • 若要手动实现,必须采用集群重抽样,示例代码如下:
rsq_cluster <- function(formula, data, indices) {
  # 先对分组单元重抽样
  sampled_groups <- unique(data$greenhouse.position)[indices]
  d <- data[data$greenhouse.position %in% sampled_groups, ]
  mod <- lmer(formula, data = d)
  return(coef(summary(mod))[2])
}

# 基于分组单元数量进行重抽样
results_cluster <- boot(data = unique(Exdf$greenhouse.position), 
                        statistic = rsq_cluster, 
                        R=1000, 
                        formula = RelativeFitness ~ FlowerNumberStd + (1|greenhouse.position),
                        data = Exdf)

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

火山引擎 最新活动