Metafor亚组分析森林图:如何按发表年份排序各亚组研究?
解决metafor森林图亚组内按发表年份排序的问题
要实现亚组内研究按发表年份排序,核心是正确生成排序索引并传递给forest()函数,或者先对数据集排序后再拟合模型。以下是具体步骤:
方法一:直接在forest()中指定排序索引
- 确认变量类型:确保年份变量
year是数值型(若为字符型,先转换:dat$year <- as.numeric(dat$year))。 - 生成排序索引:基于分组变量和年份生成升序(或降序,加
decreasing=TRUE)的排序位置:# 假设分组变量为group,数据集为dat ord <- order(dat$group, dat$year) # 亚组内按年份升序;降序则用order(dat$group, -dat$year) - 绘制森林图时传入索引:拟合模型后,将索引传给
forest()的order参数:library(metafor) # 示例用内置dat.bcg数据集演示 data(dat.bcg) dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg) dat$group <- ifelse(dat$lat < 40, "低纬度", "高纬度") # 构造分组变量 res <- rma(yi, vi, data=dat) # 按分组+年份排序绘制森林图 forest(res, order=ord, atransf=exp, xlab="相对风险", ilab=dat$year, ilab.xpos=log(0.2), # 显示年份 showweights=TRUE, header=TRUE) # 添加分组标题(需根据实际行数调整位置) text(-1.5, 13, "分组", pos=4) text(-1.5, c(11,5), c("高纬度", "低纬度"), pos=4)
方法二:先排序数据集再拟合模型(更稳妥)
如果担心模型数据与排序索引不匹配,可以先对数据集按分组+年份排序,再拟合模型,此时forest()默认会按排序后的顺序绘制:
# 排序数据集 dat_sorted <- dat[order(dat$group, dat$year), ] # 基于排序后的数据拟合模型 res_sorted <- rma(yi, vi, data=dat_sorted) # 绘制森林图 forest(res_sorted, atransf=exp, xlab="相对风险", ilab=dat_sorted$year, ilab.xpos=log(0.2), showweights=TRUE, header=TRUE) # 添加分组标题 text(-1.5, 13, "分组", pos=4) text(-1.5, c(11,5), c("高纬度", "低纬度"), pos=4)
常见问题排查
- 若排序后仍无效,检查
year变量是否为数值型(字符型年份会按字母序排序,而非时间顺序)。 - 确认分组变量
group的类型:若为因子,可通过factor(dat$group, levels=c("组1", "组2"))指定分组的显示顺序。
内容的提问来源于stack exchange,提问作者Longc
相关产品推荐
相关产品推荐

