r语言 - Cohen d 效应大小,用于多个简单效应比较,具有 2 个以上水平(在交互作用之后)



我正试图找到一种简单的方法来计算Cohen's d(标准化平均差),用于交互作用后的多个简单效果比较。

在本例中,我有一个具有2个级别的因子和一个具有3个级别的因子。我将计算2x2方差分析并找到相互作用。然后我想跟进具体的t检验比较,并报告效应大小。

如果有一个包或一个简单的函数或一个简单的方法来做到这一点,请分享!首先,制作一些数据:

df1 <- data.frame(cond1 = rep(0:1, 500),
cond2 = sample(0:2, 1000, replace = TRUE),
dv = rnorm(1000, 2, 1)
)
#fit the model
model <- lm(dv ~ cond1*cond2, df1)

测试交互的两两比较(这里不是符号,但假装是)

emm <- emmeans::emmeans(model, pairwise ~ cond1|cond2)
#can do cond1|cond2 or cond2|cond1, both work

这似乎应该工作,但我不知道为什么我得到这个错误信息:

emmeans::eff_size(emm, sigma = sigma(model), edf = df.residual(model))
#Error in update.default(object, tran = NULL) : need an object with call component

如此:

summary(psych::cohen.d.by(df1 ~ cond1 + cond2))

但如果我想以另一种方式进行两两比较,这就行不通了:

summary(psych::cohen.d.by(df1 ~ cond2 + cond1))
#Error in `.rowNamesDF<-`(x, value = value) : invalid 'row.names' length

如果我只有一个条件变量,我会使用rstatix::但是,据我所知,这个包和函数不允许输入超过1个分组变量。

rstatix::cohens_d(df1, dv ~ cond)

还有其他建议吗?

我要找的是每个比较的列表中每个比较的标准化平均差。我知道有很多比较,但这是社会科学中的一个常见程序,应该有一个函数来做这件事。

您的代码没有任何问题。它运行如下:

set.seed(123)
df1 <- data.frame(cond1 = rep(0:1, 500),
cond2 = sample(0:2, 1000, replace = TRUE),
dv = rnorm(1000, 2, 1)
)
model <- lm(dv ~ cond1*cond2, df1)
emm <- emmeans::emmeans(model, pairwise ~ cond1|cond2)
emmeans::eff_size(emm, sigma = sigma(model), edf = df.residual(model))
## Since 'object' is a list, we are using the contrasts already present.
## cond2 = 1.02:
##  contrast effect.size     SE  df lower.CL upper.CL
##  (0 - 1)       0.0245 0.0633 996  -0.0996    0.149
## 
## sigma used for effect sizes: 1.006 
## Confidence level used: 0.95

由reprex包(v2.0.0)在2021-08-23创建

所以在运行eff_size()

之前,您必须做一些其他操作(例如,用其他东西替换model)。但是,我建议您将cond2设置为模型中的因素。你把它当作一个数值预测器,这就是为什么它会被降低到它的平均值(在这种情况下是1.02),而不是为每个水平单独设置效应值。

最新更新