森林地块R的线长

时间:2014-07-18 11:42:42

标签: r plot

我有一个data.frame

> s1g2
                      centre    Estimate          Var   n
factor(groupchange)2       1   0.6821912 1.486330e+00 217
factor(groupchange)21      2   0.3535025 1.622455e+00 165
factor(groupchange)22      3 -15.4053858 3.284365e+06 152
factor(groupchange)23      4  -0.2659903 1.837585e+00 137
factor(groupchange)24      5   0.4702335 2.198379e+00 201
factor(groupchange)25      6   1.1657077 9.546860e-01 159
> 

我想使用metafor

的forest命令绘制它

这就是我试过的

res <- rma(Estimate, Var, data=s1g2, method="ML")
sav <- blup(res)

par(family="mono", mar=c(5,4,1,2))
forest(res, refline=res$b, addcred=TRUE, xlim=c(-7,8),alim=c(-3,3), slab=1:6, psize=.8,
       ilab=paste0("(n = ", formatC(s1g2[["n"]], width=3, big.mark=","), ")"),
       ilab.xpos=-3.5, ilab.pos=2, rows=6:1+.15)

text(-7, 15, "Trial (total n)", pos=4)
text( 8, 15, "Log Odds Ratio [95% CI]", pos=2)

它可以工作但是中心= 3的箭头在左边太长了。 我怎样才能减少它?命令alim似乎只适用于右侧。

此外,还将接受使用另一个库进行绘图的解决方案。 我希望像:http://mcfromnz.files.wordpress.com/2012/11/forest_plot_2.png

1 个答案:

答案 0 :(得分:1)

我不知道估计代表什么,但有一个中心的值为-15.41(和一个巨大的差异)似乎与其余的不同。如果轴限制为-3到3,则估计实际上不会显示,并且CI很宽,它将覆盖整个轴范围。

无论如何,forest包中的各种metafor函数会强制执行包含实际数据的绘图/轴限制。这就是绘图/轴限制扩展到-15.41值的原因。

实质上,forest.rma中的这些行是您不需要的:

if (xlim[1] > min(yi, na.rm = TRUE)) {
    xlim[1] <- min(yi, na.rm = TRUE)
}
if (xlim[2] < max(yi, na.rm = TRUE)) {
    xlim[2] <- max(yi, na.rm = TRUE)
}
if (alim[1] > min(yi, na.rm = TRUE)) {
    alim[1] <- min(yi, na.rm = TRUE)
}
if (alim[2] < max(yi, na.rm = TRUE)) {
    alim[2] <- max(yi, na.rm = TRUE)

因此,一种选择是下载源包,注释掉这些行,然后从源代码安装包。

这是一个黑客解决方案:

res <- rma(Estimate, Var, data=s1g2, method="ML")
res$yi.f[3] <- NA
res$vi.f[3] <- NA

options(na.action="na.pass")
par(family="mono", mar=c(5,4,1,2))
forest(res, refline=res$b, addcred=TRUE, xlim=c(-7,8),alim=c(-3,3), slab=1:6, psize=.8,
       ilab=paste0("(n = ", formatC(s1g2[["n"]], width=3, big.mark=","), ")"),
       ilab.xpos=-3.5, ilab.pos=2, rows=6:1+.15)
text(-7, 15, "Trial (total n)", pos=4)
text( 8, 15, "Log Odds Ratio [95% CI]", pos=2)

library("shape")
Arrows(-3, 4.15, 3, 4.15, code=3, arr.type="triangle", )
rect(4, 3.5, 8, 4.5, col="white", border=NA)
text(4, 4.15, "-15.41 [ see note ]", pos=4)

你必须用箭头长度/高度旋转才能使它看起来像其他的一样(见help(Arrows))。而且你将不得不玩弄文本的位置。我不会添加实际的CI边界(-3567.41到3536.60),因为这些基本上没有意义。相反,我会在解释问题的情节中添加一个注释。