使用 sapply 同时计算多个列的统计信息

Compute stats for several columns at the same time using sapply

我有一个数据框如下:

# A tibble: 6 x 4
   Placebo    High  Medium      Low
     <dbl>   <dbl>   <dbl>    <dbl>
1  0.0400  -0.04    0.0100  0.0100 
2  0.04     0      -0.0100  0.04   
3  0.0200  -0.1    -0.05   -0.0200 
4  0.03    -0.0200  0.03   -0.00700
5 -0.00500 -0.0100  0.0200  0.0100 
6  0.0300  -0.0100 NA      NA  

您可以使用 effsize 包中的 cohen.d() 函数获取其中两列的 cohensD:

df <- data.frame(Placebo = c(0.0400, 0.04, 0.0200, 0.03, -0.00500, 0.0300),
                 Low = c(-0.04, 0, -0.1, -0.0200,  -0.0100, -0.0100),
                 Medium = c(0.0100, -0.0100, -0.05, 0.03,  0.0200, NA ),
                 High = c(0.0100, 0.04, -0.0200, -0.00700, 0.0100, NA))

library(effsize)
cohen.d(as.vector(na.omit(df$Placebo)), as.vector(na.omit(df$High)))

有趣的是,这段代码出现了以下错误:

数据错误[ group] : 维数不正确

但是,我想创建一个函数,允许您获取其中一列与其余列之间的所有 cohensd。

为了获得针对安慰剂的所有列的 cohensD,我们将使用类似的东西:

sapply(df, function(i) cohen.d(pull(df, as.vector(na.omit(!!Placebo))), as.vector(na.omit(i))))

但我不确定这是否有效。

编辑:我不想删除整行,因为可以针对不同的长度向量计算 cohens d。理想情况下,我想独立地获取每列删除 NA 的统计数据

最好通过创建逻辑索引以及 'Placebo'

分别删除每个列上的 NA
library(dplyr)
library(effsize)
df %>%   
  summarise(across(Low:High, ~ list({
             i1 <- complete.cases(Placebo)& complete.cases(.x)
             cohen.d(Placebo[i1], .x[i1])})))

或者如果我们想使用 lapply/sapply,遍历 Placebo

以外的列
lapply(df[-1], function(x) {
          x1 <- na.omit(cbind(df$Placebo, x))
          cohen.d(x1[,1], x1[,2])
})

-输出

$Low

Cohen's d

d estimate: 1.947312 (large)
95 percent confidence interval:
    lower     upper 
0.3854929 3.5091319 


$Medium

Cohen's d

d estimate: 0.9622504 (large)
95 percent confidence interval:
     lower      upper 
-0.5782851  2.5027860 


$High

Cohen's d

d estimate: 0.8884639 (large)
95 percent confidence interval:
     lower      upper 
-0.6402419  2.4171697