Cohen d的符号不受R中因子水平的倒序影响

时间:2018-11-12 14:07:55

标签: r

我正在使用Cohen的d(使用cohen.d()包中的effsize实现)来衡量因子在两个级别之间的因变量中的效应大小。

我的代码如下:cohen.d(d, f),其中d是数值的向量,f是具有两个级别的因数:“ A”和“ B”。

根据我的理解,科恩d的符号取决于在公式中输入的均值顺序(即因子水平)。但是,即使我颠倒了cohen.d()中的级别顺序,我的f命令也会返回一个负值(和负CI)。

以下是可重现的示例:

library('effsize')
# Load in Chickweight data
a=ChickWeight

# Cohens d requires two levels in factor f, so take the first two available in Diet
a=a[a$Diet==c(1,2),]
a$Diet=a$Diet[ , drop=T]

# Compute cohen's d with default order of Diet
d1 = a$weight
f1 = a$Diet
cohen1 = cohen.d(d1,f1)

# Re-order levels of Diet
a$Diet = relevel(a$Diet, ref=2)

# Re-compute cohen's d
d2 = a$weight
f2 = a$Diet
cohen2 = cohen.d(d2,f2)

# Compare values
cohen1
cohen2 

谁能解释为什么会这样,和/或我做错了什么?

提前感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

我不确定您示例中问题背后的原因是什么(也许其他人可以在这里发表评论),但是如果您查看?cohen.d下的示例,有几种不同的计算方法它:

treatment = rnorm(100,mean=10)
control = rnorm(100,mean=12)
d = (c(treatment,control))
f = rep(c("Treatment","Control"),each=100)
## compute Cohen's d
## treatment and control
cohen.d(treatment,control)
## data and factor
cohen.d(d,f)
## formula interface
cohen.d(d ~ f)

如果使用第一个示例cohen.d(treatment, control)并将其反转为cohen.d(control, treatment),则会得到以下信息:

cohen.d(treatment, control)
Cohen's d

d estimate: -1.871982 (large)
95 percent confidence interval:
      inf       sup 
-2.206416 -1.537547 

cohen.d(control, treatment)
Cohen's d

d estimate: 1.871982 (large)
95 percent confidence interval:
     inf      sup 
1.537547 2.206416

因此,使用示例中的两个向量方法处理数据,我们可以做到:

a1 <- a[a$Diet == 1,"weight"]
a2 <- a[a$Diet == 2,"weight"]
cohen3a <- cohen.d(a1, a2)
cohen3b <- cohen.d(a2, a1)

我注意到f示例中的?cohen.d不是一个因素,而是一个字符向量。我尝试使用cohen.d(d, f)方法,但没有找到解决方案。想看看别人是否对此有任何看法。