将连续数据的相关性转换为 Cohen's d 时的解释

机器算法验证 r 荟萃分析 规模效应
2022-03-30 19:42:25

一本流行的元分析教科书 (1) 讨论了如何将相关性转换为 Cohen 的(即标准化均值差):rd

在此处输入图像描述

我对如何解释结果感到困惑,不知道比较的两个“组”对应的是什么。我可以为这个公式 (2) 找到的推导是针对点双列相关,即 Pearson 的相关性是在已经二分法的上计算的,而不是在上面的文本(突出显示)清楚地说明的连续数据上计算的。 dX

因此,我进行了以下模拟,其中我构建了双变量正态数据,对进行了中位数拆分(因为这些公式假设组大小相等),然后将我使用二分数据计算进行比较我通过转换连续的相关性获得:XddXY

# convert Cohen's d to r
# assumes equal sample sizes in each group
# see Borenstein text
d_to_r = Vectorize( function(d) {
  d / sqrt(d^2 + 4)
}, vectorize.args = "d" )

# this is the inverse of above, so also needs equal sample sizes
r_to_d = Vectorize( function(r) {
  (2 * r) / (1 - r^2)
}, vectorize.args = "r" )

# generate bivariate normal X and Y
library(MASS)
N = 100000
cor = matrix( c(1, 0.5, 0.5, 1), byrow = TRUE, nrow=2 )
data = as.data.frame( mvrnorm( n = N, mu = c(0, 0), Sigma = cor ) )
names(data) = c("xc", "y")

# dichotomize X
# Borenstein does not say WHERE to dichotomize
# but for equal group sizes, we would need to use median
cutoff = median(data$xc)  # should be almost 0
data$xb = ifelse( data$xc < cutoff, 0, 1 )

##### Method 0: True Cohen's d Using Dichotomized X

# with metafor (using bias correction)
library(metafor)
ES = escalc( m1i = m1, m2i = m0, n1i = n1, n2i = n0,
             sd1i = sqrt(sig2.1), sd2i = sqrt(sig2.0), measure = "SMD" )
( d.real = ES$yi[1] )

# sanity check: manually (without slight bias correction)
sig2.0 = var( data$y[ data$xb == 0 ] )
sig2.1 = var( data$y[ data$xb == 1 ] )
n0 = sum( data$xb == 0 )
n1 = sum( data$xb == 1 )
m0 = mean( data$y[ data$xb == 0 ] )
m1 = mean( data$y[ data$xb == 1 ] )

num = (n0 - 1) * sig2.0 + (n1 - 1) * sig2.1
denom = n0 + n1 - 2
sig.pool = sqrt( num / denom )
( d.man = (m1 - m0) / sig.pool )


##### Method 1: Borenstein's Transformation on Correlation Using Continuous X
rc = cor( data$xc, data$y )


##### Method 2: Borenstein's Transformation on Correlation Using Binary X
rb = cor( data$xb, data$y )

##### Compare Them
d.real; r_to_d( rc ); r_to_d( rb )
# MIDDLE ONE IS HORRIBLE. 

该模拟表明,点双列相关 ( ) 的转换与二分数据 ( )rb中的“真实”科恩一致,而连续数据 ( ) 的相关转换则完全不同。(当然,无论如何这两种转换都不可能起作用,因为这两种相关性显然不等价。)dd.realrc

我的问题:教科书在说什么?也就是说,在什么情况下,您可以将在连续数据上计算的相关性转换为 Cohen 的的精确解释是什么?dd

参考

  1. Borenstein, M., Hedges, LV, Higgins, J., & Rothstein, HR (2009)。元分析导论。约翰威利父子公司

  2. McGrath, RE 和 Meyer, GJ (2006)。当效果大小不一致时:r 和 d 的情况。心理学方法,11(4),386。

1个回答

你遇到了我的一个私人问题。我认为书中给出的解释(基于两个连续变量的相关系数的 r 到 d 转换值)没有任何意义。这里没有发生明确或隐含的二分法(以及哪个变量,第一个还是第二个?以及在什么时候二分法?),我从未见过任何适当的分析证明这种解释是合理的。

在另一个方向上,将 d 转换为 r 是完全有意义的,只要我们意识到转换会产生点双列相关系数(不是双变量正态分布或其他一些双变量分布的 Pearson 积矩相关系数)两个连续变量)。准确地说,转换的正确方程是其中书中的公式 7.7 并不完全正确,尽管差异通常很小。一个例子:

rpb=dd2+h,
h=mn1+mn2
m=n1+n22

grp <- c(0,0,0,0,1,1,1,1,1,1)
out <- c(2,4,3,4,2,3,5,4,5,5)
cor(grp, out) ### point-biserial correlation

这产生:

[1] 0.3340213

首先,我们计算标准化均值差:

m <- c(by(out, grp, mean))
v <- c(by(out, grp, var))
n <- c(by(out, grp, length))
vp <- ((n[1] - 1)*v[1] + (n[2] - 1)*v[2]) / (n[1] + n[2] - 2)
d <- (m[2] - m[1]) / sqrt(vp)

精确转换:

m <- n[1] + n[2] - 2
h <- m/n[1] + m/n[2]
d / sqrt(d^2 + h)

这产生:

[1] 0.3340213

正如它应该。现在试试 Borenstein 等人的方程式:

a <- (n[1] + n[2])^2 / (n[1]*n[2])
d / sqrt(d^2 + a)

这产生:

0.3021478

不太对。

此外,这种转换并不假定“一个连续变量被二分法来创建治疗组和对照组”。(第 49 页)。不需要这样的假设。当我们要将广告价值转换为双序列相关系数时,假设(连续变量被二分法)发挥作用。看:

Jacobs, P. 和 Viechtbauer, W. (2017)。用于荟萃分析的双序列相关性及其抽样方差的估计。研究合成方法,8(2),161-180。doi:10.1002/jrsm.1218

第 49 页的最后一段也很成问题。它表明我们可以向任何方向转变措施。但是对转换后的度量的解释非常可疑(例如从两个连续变量的相关性到 d 的情况)。此外,这种转换措施的抽样方差通常比本段所暗示的要复杂得多。例如,如果您执行 d-to-r-to-z(因此,从标准化均值差到点双列相关,然后应用 Fisher 的 r-to-z 变换),则结果值的抽样方差不是_ 1/(n3). 当 r 是两个连续变量(二元正态)之间的相关性时,适用 r 到 z 的转换,这里不是这种情况。这方面的另一篇相关文章是:

普斯特乔夫斯基,JE(2014 年)。当设计使用极端组、二分法或实验控制时,从 d 转换为 r 到 z。心理方法,19(1),92-112。