假设下面的代码(如Viechtbauer,2010中所示):
library(metafor)
data("dat.bcg", package = "metafor")
dat <- escalc(measure = "RR", ai = tpos, bi = tneg, ci = cpos, di = cneg, data = dat.bcg, append = TRUE)
res <- rma(ai = tpos, bi = tneg, ci = cpos, di = cneg, data = dat, measure = "RR")
forest(res, slab = paste(dat$author, dat$year, sep = ", "), xlim = c(-16, 6), at = log(c(0.05, 0.25, 1, 4)), atransf = exp, ilab = cbind(dat$tpos, dat$tneg, dat$cpos, dat$cneg), ilab.xpos = c(-9.5, -8, -6, -4.5), cex = 0.75)
op <- par(cex = 0.75, font = 2)
text(c(-9.5, -8, -6, -4.5), 15, c("TB+", "TB-", "TB+", "TB-"))
text(c(-8.75, -5.25), 16, c("Vaccinated", "Control"))
text(-16, 15, "Author(s) and Year", pos = 4)
text(6, 15, "Relative Risk [95% CI]", pos = 2)
par(op)
这给出了如下森林图:
那么如何更改图表中置信区间的格式呢?是否可以用括号替换括号并使用&#34;到&#34;而不是&#34;,&#34;?如何使用&#34; - &#34;或长期宣传而不是&#34;,&#34;?这应该改变,即[0.13,1.26]至(0.13至1.26)或(0.13 - 1.26)
答案 0 :(得分:5)
您需要对forest.rma
的代码进行一些黑客攻击。几个步骤:
通过输入函数名称显示当前版本的代码:
forest.rma # Copy the name and the code and paste into the console
# Add an assignment operator `<-`
# leave off the bytecode and environment notations at the bottom
或者您可以在编辑器中执行此操作,这可能是首选方法,因为您可能希望将此代码保存到.Rprofile
文件。
1)将参数添加到参数列表中:
forest.rma <-
function (x, annotate = TRUE, addfit = TRUE, addcred = FALSE,
showweights = FALSE, xlim, alim, clim, ylim, at, steps = 5,
level = x$level, digits = 2, refline = 0, xlab, slab, mlab,
ilab, ilab.xpos, ilab.pos, order, transf, atransf, targs,
rows, efac = 1, pch = 15, psize, col, border, lty, cex, cex.lab,
cex.axis, annosep = " , ", bkt=c("[", "]"), ...)
{ # ....not showing all the _long_ function body
# Scroll down to almost the bottom of the function body
2)查找并更改annotext
cbind
- 赋值的参数。有几个地方可能会构建annotext
,但只有其中一个匹配您的&#34;格式目标&#34;。找到一个看起来像这样的人:
# annotext <- cbind(annotext[, 1], " [ ", annotext[,
# 2], " , ", annotext[, 3], " ]")
更改为:
annotext <- cbind(annotext[, 1], bkt[1], annotext[,
2], annosep, annotext[, 3], bkt[2] )
# hit enter to get the modification to hold in your workspace
3)现在为函数分配正确的环境,以便它可以与兄弟姐妹很好地配合:
environment(forest.rma) <- environment(forest.default)
# if you forget this step you see this error:
forest.rma中的错误(res,slab = paste(dat $ author,dat $ year,sep =&#34;,&#34;),: 找不到功能&#34; .setlab&#34;
并使用您选择的新参数调用它:
png(); forest(res, slab = paste(dat$author, dat$year, sep = ", "), xlim = c(-16, 6), at = log(c(0.05, 0.25, 1, 4)), atransf = exp, ilab = cbind(dat$tpos, dat$tneg, dat$cpos, dat$cneg), ilab.xpos = c(-9.5, -8, -6, -4.5), cex = 0.75, annosep=" to ", bkt = c( "(", ")" ) )
op <- par(cex = 0.75, font = 2)
text(c(-9.5, -8, -6, -4.5), 15, c("TB+", "TB-", "TB+", "TB-"))
text(c(-8.75, -5.25), 16, c("Vaccinated", "Control"))
text(-16, 15, "Author(s) and Year", pos = 4)
text(6, 15, "Relative Risk [95% CI]", pos = 2)
dev.off()
答案 1 :(得分:2)
这是一个不需要更改forest.rma()
函数代码的解决方案。我使用annotate=FALSE
,以便该函数不会注释森林图,而是自己添加这些注释。
library(metafor)
data("dat.bcg", package = "metafor")
dat <- escalc(measure = "RR", ai = tpos, bi = tneg, ci = cpos, di = cneg, data = dat.bcg, append = TRUE)
res <- rma(ai = tpos, bi = tneg, ci = cpos, di = cneg, data = dat, measure = "RR")
### note the use of annotate=FALSE in forest()
forest(res, slab = paste(dat$author, dat$year, sep = ", "), xlim = c(-16, 6),
at = log(c(0.05, 0.25, 1, 4)), atransf = exp,
ilab = cbind(dat$tpos, dat$tneg, dat$cpos, dat$cneg), ilab.xpos = c(-9.5, -8, -6, -4.5),
cex = 0.75, annotate=FALSE)
op <- par(cex = 0.75, font = 2)
text(c(-9.5, -8, -6, -4.5), 15, c("TB+", "TB-", "TB+", "TB-"))
text(c(-8.75, -5.25), 16, c("Vaccinated", "Control"))
text(-16, 15, "Author(s) and Year", pos = 4)
text(6, 15, "Relative Risk [95% CI]", pos = 2)
### add annotations manually
tmp <- summary(dat, transf=exp)[,c("yi","ci.lb","ci.ub")] ### for the individual studies
tmp <- rbind(tmp, with(predict(res, transf=exp), c(pred, ci.lb, ci.ub))) ### add model estimate and CI bounds
sav <- apply(tmp, 2, formatC, format="f", digits=2)
annotext <- apply(sav, 1, function(x) {paste0(x[1], " (", x[2], " to ", x[3], ")")})
text(6, c(res$k:1, -1), annotext, pos=2, font=1)
par(op)