首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算数据帧中所有组对的cohens d

计算数据帧中所有组对的cohens d
EN

Stack Overflow用户
提问于 2019-09-11 23:47:28
回答 1查看 252关注 0票数 1

使用r包"effsize“,我试图计算数据中所有组对之间的cohens d,并将所有成对d估计输出为矩阵。我提供了一些测试数据来说明这一点。我想要一个所有组1、2和3对的d个估计值的矩阵。

我正在努力寻找从哪里开始做这个。我知道这可以使用循环来完成,但由于我的实际数据包含1000个组,每个组有6000个数据点,所以我认为这会很慢。

代码语言:javascript
复制
library("effsize")

test <- data.frame(
   score=c(2,3,42,1,2,3,4,5,5,6,8,2),
   group=c(1,1,1,1,2,2,2,2,3,3,3,3)
)

这与使用pairwise.wilcox.test()为wilcox秩和提供的功能类似。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-12 00:14:13

您所要做的就是注意到,combn函数一次输出n元素的组合( k ),并且还可以将一个函数应用于每个结果组合。在这种情况下,问题要求一次两个组的组合,并将函数fun应用于每个组。

代码语言:javascript
复制
fun <- function(x) {
  cohen.d(x[[1]]$score, x[[2]]$score)
}

sp <- split(test, test$group)
cmb <- combn(sp, 2, fun)

cmb[, 1]
#[[1]]
#[1] "Cohen's d"
#
#[[2]]
#[1] "d"
#
#[[3]]
#[1] 0.5992954
#
#[[4]]
#    lower     upper 
#-1.169345  2.367936 
#
#[[5]]
#[1] 0.95
#
#[[6]]
#[1] medium
#Levels: negligible < small < medium < large

上面的代码可以写成一个完成所有工作并返回一个矩阵的函数。

代码语言:javascript
复制
cohen.d.pairwise.test <- function(DF, scoreCol, groupCol){
  fun <- function(x) {
    eff <- cohen.d(x[[1]][[scoreCol]], x[[2]][[scoreCol]])
    c(eff[["estimate"]],
      eff[["conf.int"]][1],
      eff[["conf.int"]][2],
      eff[["conf.level"]])
  }
  sp <- split(DF, DF[[groupCol]])
  cmb <- combn(sp, 2, fun)
  rownames(cmb) <- c("estimate", "lower", "upper", "conf.level")
  t(cmb)
}

cohen.d.pairwise.test(test, scoreCol = "score", groupCol = "group")
#       estimate     lower     upper conf.level
#[1,]  0.5992954 -1.169345 2.3679357       0.95
#[2,]  0.4732232 -1.281054 2.2275008       0.95
#[3,] -0.8795932 -2.691556 0.9323698       0.95
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57892707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档