You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:20:30