metafor 提供了 95%CI 与原始值不同的地方

metafor provides 95%CI that are different from the original values

我正在使用 metafor 包来组合来自线性回归模型的 beta 系数。我使用了以下代码。我为 rma 函数提供了报告的 se 和 beta 值。但是,当我看到森林图时,95% 的置信区间与研究中报告的不同。我还尝试使用 运行 三个模型的 mtcars 数据集并组合系数。尽管如此,我们在森林图中看到的 95%CI 与原始模型不同。偏差远非舍入误差。下面是一个可重现的例子。

library(metafor)
library(dplyr)

lm1 <- lm(hp~mpg, data=mtcars[1:15,])
lm2 <- lm(hp~mpg, data=mtcars[1:32,])
lm3 <- lm(hp~mpg, data=mtcars[13:32,])

study <- c("study1", "study2", "study3")
beta_coef <- c(lm1$coefficients[2], 
               lm2$coefficients[2], 
               lm3$coefficients[2]) %>% as.numeric()
se <- c(1.856, 1.31,1.458) 

ci_lower <- c(confint(lm1)[2,1], 
              confint(lm2)[2,1], 
              confint(lm3)[2,1]) %>% as.numeric()

ci_upper <- c(confint(lm1)[2,2], 
              confint(lm2)[2,2], 
              confint(lm3)[2,2]) %>% as.numeric()

df <- cbind(study=study, 
            beta_coef=beta_coef, 
            se=se, 
            ci_lower=ci_lower, 
            ci_upper=ci_upper) %>% as.data.frame()

pooled <- rma(yi=beta_coef, vi=se, slab=study)

forest(pooled)

将森林图上的置信区间与数据框上的置信区间进行比较。

数据框

df <- cbind(study=study, 
            beta_coef=beta_coef, 
            se=se, 
            ci_lower=ci_lower, 
            ci_upper=ci_upper) %>% as.data.frame()

参数 vi 用于指定 抽样方差 ,但您将 标准误差 传递给参数。所以你应该这样做:

pooled <- rma(yi=beta_coef, sei=se, slab=study)

但是你还是会发现这里有差异,因为森林图中的CI是基于正态分布构造的,而你从回归模型中得到的CI是基于正态分布的在 t-distributions 上。如果你想要在森林图中完全相同的 CIs,你可以像这样将 CI 边界传递给函数:

forest(beta_coef, ci.lb=ci_lower, ci.ub=ci_upper)

如果您想将 meta-analysis 的汇总多边形添加到森林图中,可以使用 addpoly() 来完成。所以这个例子的完整代码是:

forest(beta_coef, ci.lb=ci_lower, ci.ub=ci_upper, ylim=c(-1.5,6))
addpoly(pooled, row=-1)
abline(h=0)