For Loop在R中产生多个Cohen D比较

时间:2020-03-16 19:38:11

标签: r for-loop

我有以下数据框:

cat <- rep(c("A","B","C","D"),100)
value <- rnorm(100,0,1)
df <- data.frame(cat,value)
df$cat <- as.character(df$cat)

我想创建一个for循环(或应用族),将一个组与另一个组进行比较,并输出一个包含类别名称和Cohen D作为值的单个数据框。

作为输出的某种效果:

B .20
C .50
D .80

我的尝试只适用于一次迭代,但是找到了NaN,我希望在那儿可以看到循环迭代来计算其他比较。

mjrgrp <- c("A")
mnrgrp <- c("B","C","D","F")

cd <- NULL
cohensD <- function(catVar,valueVar){
  for(i in mnrgrp){
    mjrgrp <- valueVar[catVar %in% mjrgrp]
    mnrgrp <- valueVar[catVar == i]

    mjr_mean <- mean(mjrgrp,na.rm = T)
    mnr_mean <- mean(mnrgrp,na.rm = T)

    mjr_N <- length(mjrgrp)
    mnr_N <- length(mnrgrp)
    mean_diff <- abs(mjr_mean-mnr_mean)
    pool_sd <- (mjr_N-1) * var(mjrgrp,na.rm = T) + (mnr_N-1) * var(mnrgrp,na.rm = T)
    pool_sd <- pool_sd/((mjr_N-1) + (mnr_N-1))
    pool_sd <- sqrt(pool_sd)

    cd[[i]]  <- mean_diff/pool_sd
  }
  return(cd)
}

cohensD(df$cat,df$value)

0 个答案:

没有答案