#r #gtsummary
Вопрос:
Я пытаюсь суммировать три непрерывные переменные одной категориальной переменной. Вот некоторые фиктивные данные :
test <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1)
)
Я могу легко стратифицировать данные по тертилям:
table<- test %>%
tbl_summary(
by=score_1,
statistic = all_continuous()~ "{mean} ({sd})"
) %>%
print()
Что сделает эту таблицу:
Однако мне нужно перенести эту таблицу: непрерывные переменные должны быть столбцами. Причина этого в том, что мне на самом деле нужно добавить еще два балла, поэтому данные на самом деле выглядят так:
test2 <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
score_2= sample(c("low","medium","high"),50, replace = T),
score_3= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1)
)
Я подумал о том, чтобы создать три таблицы, по одной для каждой оценки (с непрерывными переменными в виде столбцов), а затем объединить их с помощью tbl_stack. Но я не знаю, как сделать первую таблицу (и возможно ли это вообще с помощью gtsummary).
Надеюсь, в этом есть смысл.
Ответ №1:
В следующем выпуске gtsummary (v.1.5.0) в пакете будет функция, предназначенная для создания таблиц, подобных той, которую вы запрашиваете. Пока эта новая функция проверяется, вы можете использовать аналогичную (но не такую простую в использовании) функцию из пакета bstfun (на GitHub). bstfun-это пакет, в котором рождаются некоторые функции gtsummary, и когда они созревают, они переносятся в gtsummary. Пример кода ниже!
# remotes::install_github("ddsjoberg/bstfun")
library(gtsummary)
test <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1),
all_one = 1L
)
df_pvalues <-
c("land", "water", "fire") %>%
purrr::imap_dfc(
~aov(
formula = glue::glue("{.x} ~ score_1") %>% as.formula(),
data = test
) %>%
broom::tidy() %>%
dplyr::slice(1) %>%
dplyr::select(p.value) %>%
dplyr::mutate_all(style_pvalue) %>%
setNames(glue::glue("stat_1_{.y}"))
) %>%
mutate(label = "ANOVA p-value")
df_pvalues
#> # A tibble: 1 x 4
#> stat_1_1 stat_1_2 stat_1_3 label
#> <chr> <chr> <chr> <chr>
#> 1 0.12 0.6 >0.9 ANOVA p-value
tbl <-
c("land", "water", "fire") %>%
purrr::map(
~test %>%
bstfun::tbl_2way_summary(score_1, all_one, con = all_of(.x),
statistic = "{mean} ({sd})") %>%
modify_header(all_stat_cols() ~ paste0("**", .x, "**"))
) %>%
tbl_merge() %>%
modify_spanning_header(everything() ~ NA) %>%
modify_table_body(
~.x %>%
dplyr::bind_rows(df_pvalues)
)
Создано 2021-08-25 пакетом reprex (версия v2.0.1)
Комментарии:
1. Спасибо, Дэниел! это немного сбивало меня с толку, но я думаю, что понял. Есть ли способ добавить статистический тест в виде строки ниже? Я попробовал «add_p», но, очевидно, это не сработало.
2. какие значения вы хотите сравнить в значении p? Есть ли разница в среднем по шкале score_1, и в итоговой таблице будет 3 p-значения в новой строке?
3. Да, именно, еще один вариант, который приходит мне на ум, — это добавление звезд значимости.
4. Вау, большое спасибо, это очень полезно и поучительно для меня (и, надеюсь, для других).