У меня есть фрейм данных от 4 участников (идентифицированных через id
) с переменными a
и b
, которые были измерены в три разных времени:
И мне нужно рассчитать величину эффекта (d Коэна) для изменений между:
pre
до post1
post1
до post2
По каждой из переменных (a
и b
).
Есть ли способ, которым я могу использовать purrr::map
для его расчета?
Данные:
library(tidyverse)
set.seed(1234)
df <- data.frame(
vars = rep(letters[1:2], 12),
value = sample(1:100, 24),
phase = rep(factor(c("pre","post1","post2"), levels = c("pre","post1","post2")),4)
)
В моем ожидаемом выходе , ясначала посчитайте% изменения, а затем я получу среднее значение.Наконец, мой последний столбец d
- это размер эффекта.Код для его генерации:
library(effsize)
## Calculate Effect Size for `a` in `pre` - `post1`
a1 <- df %>%
filter(vars == "a" & phase != "post2") %>%
mutate(phase = fct_drop(phase)) %>%
cohen.d(value ~ phase, data = ., paired = T) %>%
.$estimate
## Calculate Effect Size for `a` in `post1` - `post2`
a2 <- df %>%
filter(vars == "a" & phase != "pre") %>%
mutate(phase = fct_drop(phase)) %>%
cohen.d(value ~ phase, data = ., paired = T) %>%
.$estimate
## Calculate Effect Size for `b` in `pre` - `post1`
b1 <- df %>%
filter(vars == "b" & phase != "post2") %>%
mutate(phase = fct_drop(phase)) %>%
cohen.d(value ~ phase, data = ., paired = T) %>%
.$estimate
## Calculate Effect Size for `b` in `post1` - `post2`
b2 <- df %>%
filter(vars == "b" & phase != "pre") %>%
mutate(phase = fct_drop(phase)) %>%
cohen.d(value ~ phase, data = ., paired = T) %>%
.$estimate
# Mutate eff sizes to data frame
df %>%
spread(phase, value) %>%
mutate("pre - post1" = (post1/pre-1)*100, "post1 - post2" = (post2/post1-1)*100) %>% # calculate % change
select(-pre, -post1, -post2) %>%
gather("phase", "pct_change", 3:4) %>%
group_by(phase, vars) %>%
summarise(Mean_pct_change = mean(pct_change)) %>% # calculate mean % change
ungroup() %>%
mutate(d = c(a2, b2, a1, b1)) # mutate effect sizes
# A tibble: 4 x 4
phase vars Mean_pct_change d
<chr> <fct> <dbl> <dbl>
1 post1 - post2 a 158. -0.988
2 post1 - post2 b -37.1 0.558
3 pre - post1 a 690. -3.36
4 pre - post1 b 11.6 -0.383