我是森林图新手,想知道是否有一种方法可以在 RStudio 中制作风险比和 95% CI 的森林图,并包含如所附示例的子组。
到目前为止我已经尝试过这样做:
exposures <- c(rep("Race/Ethnicity", 6),
rep("Median Household Income", 5),
rep("Rurality, population", 5))
subgroups <- c("Hispanic (All Races)", "Non-Hispanic American Indian/Alaska Native",
"Non-Hispanic Asian American", "Non-Hispanic Black",
"Non-Hispanic Native Hawaiian and other Pacific Islander",
"Non-Hispanic White","<50,000", "50,000 to 59,999", "60,000 to 69,999",
"70,000 to 74,999", ">= 75,000", "Non-metropolitan,
not adjacent to metropolitan", "Non-metropolitan,
adjacent to metropolitan","Metropolitan, < 250,000",
"Metropolitan, 250,000 to 1 million", "Metropolitan, > 1 million")
HR <- c(1.2, 1.3, 0.9, 1.5, 1.4, 1.1, 1.2, 0.8, 0.9, 1.0, 1.1, 0.7, 1.0, 1.5, 0.7, 2.0)
CI <- c(1.0, 1.5, 0.7, 2.0, 1.1, 1.7, 0.9, 1.5, 0.7, 1.3, 1.0, 1.4, 1.1, 1.7, 0.9, 1.5)
data <- data.frame(exposures, subgroups, HR, CI)
您首先需要计算对数 CI 下限和上限。之后,使用
metafor
包:
if (!require("metafor")) {
install.packages("metafor")
library(metafor)
}
exposures <- c(rep("Race/Ethnicity", 6),
rep("Median Household Income", 5),
rep("Rurality, population", 5))
subgroups <- c("Hispanic (All Races)", "Non-Hispanic American Indian/Alaska Native",
"Non-Hispanic Asian American", "Non-Hispanic Black",
"Non-Hispanic Native Hawaiian and other Pacific Islander",
"Non-Hispanic White", "<50,000", "50,000 to 59,999", "60,000 to 69,999",
"70,000 to 74,999", ">= 75,000", "Non-metropolitan, not adjacent to metropolitan",
"Non-metropolitan, adjacent to metropolitan", "Metropolitan, < 250,000",
"Metropolitan, 250,000 to 1 million", "Metropolitan, > 1 million")
HR <- c(1.2, 1.3, 0.9, 1.5, 1.4, 1.1, 1.2, 0.8, 0.9, 1.0, 1.1, 0.7, 1.0, 1.5, 0.7, 2.0)
CI <- c(1.0, 1.5, 0.7, 2.0, 1.1, 1.7, 0.9, 1.5, 0.7, 1.3, 1.0, 1.4, 1.1, 1.7, 0.9, 1.5)
logHR <- log(HR)
lowerCI <- log(CI) - log(HR)
upperCI <- log(CI) + log(HR)
data <- data.frame(exposures, subgroups, HR, logHR, lowerCI, upperCI)
res <- rma(yi=logHR, sei=(upperCI-lowerCI)/3.92, data=data, method="REML")
forest(res, slab=paste(data$subgroups, data$exposures, sep=", "),
xlim=c(-2, 2), at=log(c(0.5, 1, 2)), atransf=exp,
ilab=cbind(HR, exp(lowerCI), exp(upperCI)), ilab.xpos=c(-0.75, -1.75, -2.75),
cex=.75, pch=1, efac=c(1.5), digits=2)
text(-2, 17, "Hazard Ratio (95% CI)", pos=4)
这给了你