快速提问:我已经看到 Cohen's d 计算了两种不同的方法来进行依赖样本 t 检验(例如,样本内设计以前后时间点测试药物的功效)。
- 使用 Cohen's d 等式分母中变化分数的标准差。
- 在 Cohen's d 等式的分母中使用预测试分数的标准差。
我发现很少有文献真正描述使用哪个和/或何时使用任一选项。
有什么快速的想法吗?
快速提问:我已经看到 Cohen's d 计算了两种不同的方法来进行依赖样本 t 检验(例如,样本内设计以前后时间点测试药物的功效)。
我发现很少有文献真正描述使用哪个和/或何时使用任一选项。
有什么快速的想法吗?
Geoff Cumming 对此事有一些评论(摘自Cumming,2013 年):
然而,在许多情况下,标准化器的最佳选择并不是对所讨论的效果进行推断所需的 SD。例如,考虑配对设计,例如一个简单的前后实验,其中一组参与者提供前测和后测数据。最合适的标准化器几乎总是(Cumming,2012,第 290-294 页;Cumming & Finch,2001,第 568-570 页)对预测试人群中 SD 的估计,也许是,我们数据中的预测试 SD。相比之下,关于差异的推断需要,即配对差异的 SD——无论是用于配对 t 检验还是计算差异的 CI(Cumming & Finch, 2005)。在前测和后测分数相关的程度上,将小于,我们的实验将更加敏感,并且使用作为标准器错误计算的 d 值将太大。
作为标准器的主要原因是,作为参考单位的预测试总体 SD 实际上总是具有最佳的概念意义。另一个重要原因是获得的 d 值可能与其他配对设计实验给出的 d 值相当,这些实验可能具有不同的前测-后测相关性以及不同设计的实验,包括独立组设计,所有这些都检查了同样的效果。所有这些情况下的 d 值很可能具有可比性,因为它们使用相同的标准器——对照或预测试 SD。这种可比性对于荟萃分析以及在上下文中有意义的解释至关重要。
我在Frontiers in Psychology中找到了正式答案。如果是检验统计量,是观察次数,则:
但请注意,有些报告的公式略有不同,即
参见此处,例如.
这是一个建议的 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 )
我希望它有所帮助。