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

如何用R的metafor包通过固定效应模型合并亚组的均数与标准差?

合并亚组均数与总体标准差的R实现方法

核心思路

用metafor包的rma()函数可以直接得到固定效应模型下的合并均数,但合并标准差需要手动通过经典的方差合并公式计算——因为metafor默认输出的是合并均数的标准误,而非总体标准差。

具体步骤与代码示例

  1. 加载包并准备数据

    library(metafor)
    
    # 示例数据:替换为你的实际亚组数据(均数、SD、样本量)
    dat <- data.frame(
      yi = c(10.2, 11.5, 9.8),  # 各亚组均数
      sd_i = c(2.1, 2.5, 1.9),  # 各亚组标准差
      n_i = c(50, 60, 45)       # 各亚组样本量
    )
    
  2. 计算均数的标准误
    rma()的sei参数需要传入均数的标准误(而非原始SD),计算公式为:sei = SD / sqrt(样本量)

    dat$sei <- dat$sd_i / sqrt(dat$n_i)
    
  3. 拟合固定效应模型,获取合并均数

    fe_model <- rma(yi = yi, sei = sei, method = "FE", data = dat)
    common_mean <- fe_model$b  # 提取合并均数
    
  4. 手动计算合并标准差
    固定效应下,合并方差通过「组内平方和+组间平方和」除以总自由度得到,再开根号即为合并标准差:

    # 计算组内平方和
    ss_within <- sum((dat$n_i - 1) * dat$sd_i^2)
    # 计算组间平方和
    ss_between <- sum(dat$n_i * (dat$yi - common_mean)^2)
    # 总自由度 = 总样本量 - 亚组数量
    df_total <- sum(dat$n_i) - nrow(dat)
    # 合并方差与标准差
    common_var <- (ss_within + ss_between) / df_total
    common_sd <- sqrt(common_var)
    
  5. 输出结果

    cat("合并均数:", round(common_mean, 2), "\n")
    cat("合并标准差:", round(common_sd, 2), "\n")
    

补充说明

  • metafor的rma()主要聚焦效应量(如SMD、OR)的合并,因此未内置合并标准差的直接提取项,需手动按经典统计方法计算。
  • 上述公式严格对应固定效应模型的合并逻辑,权重与rma()的固定效应权重一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:33:12