将值向量输入幂函数

Feed a vector of values into power function

我想估计不同水平的 N 和 SD 的最小可检测效应大小。 Power 始终固定为 0.8,alpha 始终固定为 0.05。

到目前为止,这是我的代码:

library(pwr)

power_fcn <- function(.x){
  
  power.t.test(n = .x, d = NULL, power = 0.8, sig.level = 0.05, alternative = "two.sided")
  
}

power_df <- 
  map_dfr(
    .x = seq(10000, 30000, by = 5000),
    .f = power_fcn
  )

但是上面returns这个错误:

Error: Argument 1 must be a data frame or a named atomic vector.

但据我所知 .x 是一个向量...

我希望能够制作的是这样的东西:

# A tibble: 5 x 5
      n power sig.level test      cohens_d
  <dbl> <dbl>     <dbl> <chr>        <dbl>
1 10000   0.8      0.05 two-sided   0.0229
2 15000   0.8      0.05 two-sided   0.0323
3 20000   0.8      0.05 two-sided   0.0280
4 25000   0.8      0.05 two-sided   0.0251
5 30000   0.8      0.05 two-sided   0.0229

理想情况下,函数的选项可以添加另一列,将 cohen 的 d 转换为我关心的变量的单位(即通过 SD)。

您可以使用以下-

library(dplyr)

power_fcn <- function(.x){
  tmp <- power.t.test(n = .x, d = NULL, power = 0.8, 
                      sig.level = 0.05, alternative = "two.sided")

  tibble(n = .x, power = 0.8, sig.level = 0.05, 
         test = 'two.sided', cohens_d = tmp$delta)
}

sd <- 0.5

purrr::map_dfr(
  .x = seq(10000, 30000, by = 5000),
  .f = power_fcn
) %>%
  mutate(mdes = cohens_d * sd)

#     n power sig.level test      cohens_d   mdes
#  <dbl> <dbl>     <dbl> <chr>        <dbl>  <dbl>
#1 10000   0.8      0.05 two.sided   0.0396 0.0198
#2 15000   0.8      0.05 two.sided   0.0323 0.0162
#3 20000   0.8      0.05 two.sided   0.0280 0.0140
#4 25000   0.8      0.05 two.sided   0.0251 0.0125
#5 30000   0.8      0.05 two.sided   0.0229 0.0114