我有以下数据框:
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)