【问题标题】:Metafor forest plot shows incorrect confidence intervals for odds ratiosMetafor 森林图显示优势比的置信区间不正确
【发布时间】:2021-03-25 14:06:10
【问题描述】:

我正在尝试绘制优势比和相应的 90% 置信区间,这是我之前使用包 brms 从比例优势模型中获得的。我制作了包含从模型中获得的优势比的向量(后验样本的中位数;x),以及下(ci.lb)和上(ci.ub)置信区间界限,并使用以下代码制作森林图:

x <- c(6.587028, 10.67589, 1.578881, 1.396755, 5.447785, 1.852427, 1.828179, 1.725313, 1.526206, 1.993046, 1.191804, 0.7648945)

ci.lb <- c(2.682959, 4.196124, 0.6783311, 0.547960, 2.011936, 0.7649611, 0.7492622, 0.6538183, 0.5299715, 0.8348141, 0.4814904, 0.2945799)

ci.ub <- c(17.843931, 29.200081, 3.7121095, 3.612463, 15.466248, 4.6075681, 4.3162345, 4.3404646, 4.3962568, 4.7397496, 2.9739579, 1.9560032)

forest(x, ci.lb, ci.ub, annotate=TRUE, showweights=FALSE, 
       header=headers, top=3, steps=5, 
       refline=0, digits=2L, xlab="Odds ratios", 
       slab=labels, efac=1, pch=15, col) 

但是,我的森林图上的置信区间与我的 ci.lb 和 ci.ub 向量中给出的置信区间不对应。这是我得到的情节:

谁能告诉我我做错了什么?

【问题讨论】:

    标签: r confidence-interval forestplot metafor


    【解决方案1】:

    OP 显示的森林图来自 metafor 包,而不是 meta 包。后者加载metafor,运行forest(x, ci.lb, ci.ub)时使用的函数是metafor::forest.default()。如果您查看此函数的文档 (https://wviechtb.github.io/metafor/reference/forest.default.html),您会看到前五个参数是 forest(x, vi, sei, ci.lb, ci.ub, ...)。因此,您将ci.lbci.ub 向量传递给参数visei,这是没有意义的。所以使用forest(x, ci.lb=ci.lb, ci.ub=ci.ub) 来确保这些向量被传递给正确的参数。这里的总体教训是不要依赖参数的位置匹配。

    【讨论】:

    • 您好 Wolfgang,感谢您的回复!这实际上也是我所期望的错误,但是当我尝试按照您的建议运行代码时,我收到以下错误,我觉得很困惑,因为我知道 ci.lb 和 ci.ub 会覆盖 vi 和 sei: Forest.default 中的错误(x,ci.lb = ci.lb,ci.ub = ci.ub,annotate = TRUE,:“vi”(或“sei”)的长度与(“ci.lb”的长度不匹配', 'ci.ub') 对。
    • 我刚刚用 CRAN 版本的 metafor 和 devel 版本运行了代码,它没有任何问题。请确保您使用的是当前版本的 metafor。
    • 嗨 Wolfgang,我正在使用最新版本的 R 和 metafor。然而,我清理了我最初使用的代码(在我最初的帖子中),确实它现在可以完美运行。具体来说,我只是使用了这个:forest(x, ci.lb = ci.lb, ci.ub = ci.ub, header=header, xlab="Odds ratios",slab=labels)。感谢您的所有帮助!
    【解决方案2】:

    您很可能正在使用 meta 包中的 forest。如果我加载那个库,我会得到和你一样的图:

    library(meta)
    forest(x, ci.lb, ci.ub)
    

    这个函数需要一个meta 类的对象。对于你现在所拥有的,也许这会起作用:

    library(forestplot)
    studynames = paste0("study",1:length(x))
    
    naming = list(
           "study"= studynames ,
            "odds ratio[95% CI]" = paste(round(x,digits=2),
            "[",
            round(ci.lb,digits=2),"-",
            round(ci.ub,digits=2),"]")
              )
    
    
    forestplot(labeltext=naming,mean=x,lower=ci.lb,upper=ci.ub)
    

    【讨论】:

    • 是的,这看起来更像我需要的!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2013-06-30
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多