R语言metafor包绘制有效样本量漏斗图报错求助
解决metafor包funnel图报错:No sample size information available
错误原因
当使用funnel.default()并设置yaxis="ninv"时,函数需要原始样本量信息来计算有效样本量的倒数,而你直接传入了自己计算的inv_n_tilda(该参数位置实际对应vi,即效应量的方差),导致函数无法获取所需的样本量数据,从而报错。
解决方案
方法1:先使用escalc()构建包含样本量的效应量对象(推荐)
escalc()会自动整合效应量、方差和样本量信息,让funnel()能直接识别样本量:
# 计算lnRR及方差,同时保留对照组和处理组的样本量 dat <- escalc(measure = "RR", m1i = treatment_mean, m2i = control_mean, n1i = treatment_n, n2i = control_n, data = Soil_mineral_nitrogen) # 绘制漏斗图,yaxis="ninv"自动基于样本量计算有效样本量倒数 par(mfrow = c(1, 2)) funnel(dat, yaxis = "ninv", ylab = "Effective sample size (ñ)", xlab = "Effect size (RR)", col = dat$unique_id, atransf = exp)
方法2:直接在funnel.default()中传递样本量参数
如果你已经手动计算了lnrr和对应的方差vi,可以直接传入对照组和处理组的样本量参数:
# 先计算lnRR对应的方差vi(示例公式,需根据RR的方差计算规则调整) Soil_mineral_nitrogen$vi <- with(Soil_mineral_nitrogen, (1/treatment_n) + (1/control_n)) par(mfrow = c(1, 2)) funnel(Soil_mineral_nitrogen$lnrr, vi = Soil_mineral_nitrogen$vi, n1i = Soil_mineral_nitrogen$treatment_n, n2i = Soil_mineral_nitrogen$control_n, yaxis = "ninv", ylab = "Effective sample size (ñ)", xlab = "Effect size (RR)", col = Soil_mineral_nitrogen$unique_id, atransf = exp)
关键提示
yaxis="ninv"模式下,函数会自动计算有效样本量的倒数,无需你提前计算inv_n_tilda。- 必须确保数据中包含对照组(
n2i)和处理组(n1i)的样本量字段,否则无法计算有效样本量。
内容的提问来源于stack exchange,提问作者madina_b
相关产品推荐
相关产品推荐

