我正试图找到一种简单的方法来计算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),而不是为每个水平单独设置效应值。