在它所说的metafor
库的文档中,如果未指定可选参数psize
,则绘制点大小与估计的精度成比例。据我所知,精确度是方差的倒数。
metafor库如何从置信区间计算点大小?
如何只放大磅值? cex
也会影响文字大小。
例如
library(metafor)
model_data <- read.table(dec = ",", text="
OR lower upper
age 0,9678479 0,9326182 1,002493
sex 1,0679667 0,4987457 2,280504
ApacheeII 0,9288701 0,8728417 0,984529",
header=T)
forest(x=model_data$OR,
ci.lb=model_data$lower,
ci.ub=model_data$upper,
annotate=TRUE,
cex=1.2,
at=seq(0,6,1),
refline=1,
digits=c(3,1),
xlim=c(-1,2),
xlab="OR",
slab=rownames(model_data))
答案 0 :(得分:0)
至于1:
forest.default()
中的相关代码行是:
vi <- ((ci.ub - ci.lb) / (2*qnorm(alpha/2, lower.tail=FALSE)))^2
因此,该函数假设您正在向函数提供对称Wald-tye置信区间(CI)的边界,然后根据该函数反向计算方差。这适用于对数比例和对数比例上的相应CI边界,但您显然直接将原始比例的OR和CI边界应用于函数。然后这没有多大意义。通常,优先比率的CI实际上首先在对数尺度上计算(然后取幂)。这些数据似乎也是如此:
round(with(model_data, log(upper) - log(OR)), 2)
round(with(model_data, log(OR) - log(lower)), 2)
这表明在对数刻度上,CI边界是对称的(围绕log(OR))。因此,这些CI边界很可能是对数尺度上的Wald类型CI。所以,这样做会更有意义:
dat <- log(model_data)
forest(x=dat$OR, ci.lb=dat$lower, ci.ub=dat$upper,
annotate=TRUE, cex=1.2, at=seq(-2,2,1), digits=c(3,1),
xlim=c(-5,7), xlab="OR", slab=rownames(dat), atransf=exp)
因此,提供日志(OR)和相应的CI边界到函数,然后使用atransf
参数进行反向转换。实质上,这会将x轴放在对数刻度上。
至于2:
您必须自己计算磅值,然后通过psize
参数将它们提供给函数。
答案 1 :(得分:0)
感谢您的帮助!
通过你的提示和函数的源代码,我终于设法给出了点大小的一个因素:
library(metafor)
model_data <- read.table(dec = ",", text="
OR lower upper
age 0,9678479 0,9326182 1,002493
sex 1,0679667 0,4987457 2,280504
ApacheeII 0,9288701 0,8728417 0,984529",
header=T)
dat <- log(model_data)
ci.lb = dat$lower
ci.ub = dat$upper
#taken from forest.default source code
level = 95
alpha <- ifelse(level > 1, (100 - level)/100, 1 - level)
vi <- ((ci.ub - ci.lb)/(2 * qnorm(alpha/2, lower.tail = FALSE)))^2
wi <- 1/sqrt(vi)
psize <- wi/sum(wi, na.rm = TRUE)
psize <- (psize - min(psize, na.rm = TRUE))/(max(psize,
na.rm = TRUE) - min(psize, na.rm = TRUE))
psize <- (psize * 1) + 0.5
forest(x=dat$OR,
ci.lb = ci.lb,
ci.ub = ci.ub,
cex = 1.5,
annotate=FALSE,
at=seq(-1,1,1),
xlim=c(-1.1,1.1),
xlab="OR",
slab=rownames(dat),
psize=psize*.7,
atransf=exp
)