【问题标题】:How to use escalc function?如何使用 escalc 功能?
【发布时间】:2025-12-12 19:00:01
【问题描述】:

我正在使用 metafor 包进行元分析。我想计算使用包的效果大小,但遇到了一些麻烦。我正在尝试使用 escalc 函数计算效果大小。我有一个文件,其中包含约 200 行的值,其中包含控制/测试均值方差和样本数的数据。对于每一行,我想计算效果大小。我现在想使用 escalc 函数来确定使用 SMD 的效果大小。

我目前的代码如下:

# escalc function
escalc <- function(measure, ai, bi, ci, di, n1i, n2i, x1i, x2i, t1i, t2i, m1i, m2i, sd1i, sd2i, xi, mi, ri, ti, sdi, r2i, ni, yi, vi, sei,
data, slab, subset, include, add=1/2, to="only0", drop00=FALSE, vtype="LS", var.names=c("yi","vi"), add.measure=FALSE, append=TRUE, replace=TRUE, digits, ...)

# apply data and add effect size col to data frame
data$ES <- escalc(measure = SMD, dat$MRE1, dat$MTE2, dat$VRE1, dat$VTE2, dat$NR1, dat$NR2, data = dat)

当我运行此代码时,似乎没有问题/错误(如果我多次运行代码,它会显示“错误:C 堆栈使用 15925888 太接近限制” - 不确定这意味着什么)但我的数据框没有每个研究的 ES 新列。当我突出显示新变量并单击 Enter(查看数据的样子)时,它显示为 NULL,所以我认为它实际上并没有运行。如何获得效果大小的摘要?

我不确定我做错了什么或如何查看我计算的效果大小。我一直在阅读 metafor 文档,但不确定我做错了什么(https://cran.r-project.org/web/packages/metafor/metafor.pdf)。我需要为每篇论文计算 escalc 吗?非常感谢任何帮助。

谢谢!

【问题讨论】:

    标签: r metafor


    【解决方案1】:

    你应该使用:

    dat <- escalc(measure="SMD", m1i=MRE1, m2i=MTE2, sd1i=sqrt(VRE1), sd2i=sqrt(VTE2), n1i=NR1, n2i=NR2, data=dat)
    

    请注意,SD 是参数 sd1isd2i 的输入,因此如果您有方差,我们需要取它们的平方根。

    【讨论】:

    • 感谢您的建议。我确实尝试过,但我不断收到此错误:“错误:C 堆栈使用 15924448 太接近限制”。你知道如何增加栈使用率吗?
    • 在这里工作得很好。一个例子:dat &lt;- data.frame(MRE1=c(1,1), MTE2=c(1,1), VRE1=c(1,1), VTE2=c(1,1), NR1=c(10,10), NR2=c(2,2)); dat &lt;- escalc(measure="SMD", m1i=MRE1, m2i=MTE2, sd1i=sqrt(VRE1), sd2i=sqrt(VTE2), n1i=NR1, n2i=NR2, data=dat) 请提供一个完全可重现的例子。此外,如果您的代码实际上包含 escalc &lt;- function(...),那么这没有任何意义(您正在覆盖 escalc 函数)。
    • 感谢您的帮助!我能够计算出效果大小!我不确定您是否知道如何执行此操作,但您知道如何使效果大小差异显示在数据框中吗?它一定是经过计算的,应该在我创建的新数据框中,因为其中的变量数量从 49 增加到 51,当我单击查看数据框时,我可以看到效果大小,但我看不到计算的方差.这是有原因的吗?
    • 听起来你正在使用 RStudio。当您查看数据(使用电子表格视图)时,它会显示前 50 个变量。在“0-50”旁边你会看到“> >>”——点击它,然后你就可以看到其余的了。