metafor包是否仅接受单研究单行的长格式数据?多行数据需转置吗?
关于metafor包数据格式的问题
metafor包并非仅接受单研究对应一行的格式,需根据数据类型和分析需求灵活处理:
若你的数据是「单研究的实验组、对照组各占一行」(每行对应一个组,通过研究ID关联),使用
escalc计算组间效应量(如SMD、RR、OR等)时,确实需要将数据转换为单研究单行的宽格式——因为escalc需要明确传入两组各自的统计量(如样本量、均值、标准差)。不过这个转换可以用数据工具快速完成,无需手动操作。举个实际操作例子:
假设你有长格式分组数据:dat_long <- data.frame( study = c(1,1,2,2), group = c("treat", "control", "treat", "control"), n = c(50,50,40,40), mean = c(10,8,12,9), sd = c(2.3,2.1,3.0,2.8) )用
tidyr转为宽格式:library(tidyr) dat_wide <- dat_long %>% pivot_wider( id_cols = study, names_from = group, values_from = c(n, mean, sd), names_sep = "_" )再传入
escalc计算效应量:library(metafor) dat_wide <- escalc(measure = "SMD", m1i = mean_treat, n1i = n_treat, sd1i = sd_treat, m2i = mean_control, n2i = n_control, sd2i = sd_control, data = dat_wide)若你的数据是「单研究内包含多个效应量」(比如同一研究的不同结局指标、亚组分析结果各占一行),这种长格式反而更适合直接分析,无需转置为单行。可以用
rma.mv等函数构建多级元分析模型,处理研究内的聚类效应:dat_multi <- data.frame( study = c(1,1,2,2), outcome = c("A", "B", "A", "B"), yi = c(0.8, 0.6, 1.0, 0.7), vi = c(0.05, 0.04, 0.06, 0.03) ) model <- rma.mv(yi ~ 1, V = vi, random = ~ 1 | study/outcome, data = dat_multi)
简单总结:如果是组间对比的分组数据,需要转宽格式给escalc;如果是同一研究的多个效应量,长格式可直接用于后续分析。
内容的提问来源于stack exchange,提问作者shizzle
相关产品推荐
相关产品推荐

