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

R语言meta包中summary()与直接访问对象的亚组合并效应量差异问题

R语言meta包亚组合并效应量提取差异问题

使用meta包开展随机效应meta分析时,发现通过summary()函数获取的亚组合并效应量,与直接从meta分析对象元素中提取的结果存在显著差异:I²和tau²数值一致,但COR、95%置信区间上下限差异明显。以下是问题复现及解决方法:

可复现代码

# 加载meta包
library(meta)

# 构建meta分析数据集
meta_data <- data.frame(
  subgroup = c("Subgroup1", "Subgroup1", "Subgroup2", "Subgroup2", "Subgroup1", "Subgroup2"),
  cor = c(0.5, 0.6, 0.7, 0.8, 0.7, 0.65),
  n = c(50, 60, 70, 80, 90, 85)
)

# 执行随机效应meta分析(按亚组分层)
x <- metacor(
  cor = meta_data$cor,
  n = meta_data$n,
  data = meta_data,
  common = FALSE,
  random = TRUE,
  subgroup = subgroup
)

# 通过summary()获取亚组结果
summary(x)

summary()输出的亚组核心结果

k    COR           95%-CI  tau^2    tau    Q   I^2
subgroup = Subgroup1   3 0.6190 [0.4920; 0.7201] 0.0105 0.1022 3.24 38.3%
subgroup = Subgroup2   3 0.7228 [0.6176; 0.8025] 0.0155 0.1247 4.35 54.0%

直接访问对象元素的原始代码及结果

# 直接提取对象元素的代码(未做转换)
cbind(k=x$k.study.w,
      COR=round(x$TE.random.w, 3), 
      `95%CI`= paste(round(x$lower.random.w, 3),
                     round(x$upper.random.w, 3),sep = "; "), 
      tau2 = round(x$tau2.w, 3),
      I2 = paste(round(x$I2.w*100, 2), "%", sep=""))

输出结果:

k   COR     95%CI          tau2    I2      
Subgroup1 "3" "0.723" "0.539; 0.908" "0.01"  "38.32%"
Subgroup2 "3" "0.913" "0.721; 1.106" "0.016" "54%" 

差异原因

meta包的metacor()函数默认会对相关系数进行Fisher's z转换——因为相关系数的分布不是正态分布,转换后更适合进行合并分析。summary()输出的是转换回原始相关系数尺度的结果,而直接提取TE.random.w、lower.random.w、upper.random.w得到的是z转换后的合并值,这就是两者差异的核心原因。

解决方法

需要将提取的z转换值通过meta::z2cor()函数转换回原始相关系数尺度,修正后的代码如下:

# 修正后的亚组结果提取代码
subgroup_results <- data.frame(
  k = x$k.study.w,
  COR = round(meta::z2cor(x$TE.random.w), 4),
  lower_CI = round(meta::z2cor(x$lower.random.w), 4),
  upper_CI = round(meta::z2cor(x$upper.random.w), 4),
  tau2 = round(x$tau2.w, 4),
  I2 = paste(round(x$I2.w * 100, 1), "%", sep = "")
)

# 格式化95%置信区间
subgroup_results$`95%-CI` <- paste0("[", subgroup_results$lower_CI, "; ", subgroup_results$upper_CI, "]")

# 输出最终结果(与summary()一致)
subgroup_results[, c("k", "COR", "95%-CI", "tau2", "I2")]

运行后输出:

k    COR           95%-CI   tau2    I2
Subgroup1  3 0.6190 [0.4920; 0.7201] 0.0105 38.3%
Subgroup2  3 0.7228 [0.6176; 0.8025] 0.0155 54.0%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:53:12