Cohen's d 用于相关样本 t 检验

机器算法验证 t检验 规模效应
2022-03-17 14:44:53

快速提问:我已经看到 Cohen's d 计算了两种不同的方法来进行依赖样本 t 检验(例如,样本内设计以前后时间点测试药物的功效)。

  1. 使用 Cohen's d 等式分母中变化分数的标准差。
  2. 在 Cohen's d 等式的分母中使用预测试分数的标准差。

我发现很少有文献真正描述使用哪个和/或何时使用任一选项。

有什么快速的想法吗?

3个回答

Geoff Cumming 对此事有一些评论(摘自Cumming,2013 年):

然而,在许多情况下,标准化器的最佳选择并不是对所讨论的效果进行推断所需的 SD。例如,考虑配对设计,例如一个简单的前后实验,其中一组参与者提供前测和后测数据。最合适的标准化器几乎总是(Cumming,2012,第 290-294 页;Cumming & Finch,2001,第 568-570 页)对预测试人群中 SD 的估计,也许是,我们数据中的预测试 SD。相比之下,关于差异的推断需要,即配对差异的 SD——无论是用于配对 t 检验还是计算差异的 CI(Cumming & Finch, 2005)。在前测和后测分数相关的程度上,s1sdiffsdiff将小于,我们的实验将更加敏感,并且使用作为标准器错误计算的 d 值将太大。s1sdiff

作为标准器的主要原因是,作为参考单位的预测试总体 SD 实际上总是具有最佳的概念意义。另一个重要原因是获得的 d 值可能与其他配对设计实验给出的 d 值相当,这些实验可能具有不同的前测-后测相关性以及不同设计的实验,包括独立组设计,所有这些都检查了同样的效果。所有这些情况下的 d 值很可能具有可比性,因为它们使用相同的标准器——对照或预测试 SD。这种可比性对于荟萃分析以及在上下文中有意义的解释至关重要。spre

我在Frontiers in Psychology中找到了正式答案如果是检验统计量,是观察次数,则:tN

d2tN

但请注意,有些报告的公式略有不同,即 参见此处,例如.

d2tN22tdf

这是一个建议的 R 函数,用于计算 Hedges 的 g(Cohen 的 d 的无偏版本)以及其在受试者之间或受试者内设计的置信区间:

gethedgesg <-function( x1, x2, design = "between", coverage = 0.95) {
  # mandatory arguments are x1 and x2, both a vector of data

  require(psych) # for the functions SD and harmonic.mean.

  # store the columns in a dataframe: more convenient to handle one variable than two
  X <- data.frame(x1,x2)

  # get basic descriptive statistics
  ns  <- lengths(X)
  mns <- colMeans(X)
  sds <- SD(X)

  # get pairwise statistics
  ntilde <- harmonic.mean(ns)
  dmn    <- abs(mns[2]-mns[1])
  sdp    <- sqrt( (ns[1]-1) *sds[1]^2 + (ns[2]-1)*sds[2]^2) / sqrt(ns[1]+ns[2]-2)

  # compute biased Cohen's d (equation 1) 
  cohend <- dmn / sdp

  # compute unbiased Hedges' g (equations 2a and 3)
  eta     <- ns[1] + ns[2] - 2
  J       <- gamma(eta/2) / (sqrt(eta/2) * gamma((eta-1)/2) )
  hedgesg <-  cohend * J

  # compute noncentrality parameter (equation 5a or 5b depending on the design)
  lambda <- if(design == "between") {
    hedgesg * sqrt( ntilde/2)
  } else {
    r <- cor(X)[1,2]
    hedgesg * sqrt( ntilde/(2 * (1-r)) )
  }

  # confidence interval of the hedges g (equations 6 and 7)
  tlow <- qt(1/2 - coverage/2, df = eta, ncp = lambda )
  thig <- qt(1/2 + coverage/2, df = eta, ncp = lambda )

  dlow <- tlow / lambda * hedgesg 
  dhig <- thig / lambda * hedgesg 

  # all done! display the results
  cat("Hedges'g = ", hedgesg, "\n", coverage*100, "% CI = [", dlow, dhig, "]\n")

}

以下是它的使用方法:

x1 <- c(53, 68, 66, 69, 83, 91)
x2 <- c(49, 60, 67, 75, 78, 89)

# using the defaults: between design and 95% coverage
gethedgesg(x1, x2)

# changing the defaults explicitely
gethedgesg(x1, x2, design = "within", coverage = 0.90 )

我希望它有所帮助。