#r #gtsummary
Вопрос:
Я использовал функцию R gtsummary, но теперь столкнулся с проблемой, связанной с переменными, существующими в подмножествах друг друга. У меня есть два скрининговых теста, которые независимо друг от друга могут быть положительными, что создало проблему с использованием by = с tbl_summary. Это привело меня к созданию двух отдельных таблиц и объединению их с функцией tbl_merge.
Однако я хотел бы рассчитать p-значения для различий между тестами. Есть ли какой-либо способ сделать это с объектом в формате table_merge или извлечь из него информацию и рассчитать необходимую мне статистику?
По запросу я публикую пример кода из базы данных mtcars.
Пример кода ————————————————————
data(mtcars)
mtcars_tab <- mtcars %>%
mutate(
drat_4 = ifelse(drat >= 4, 1, 0),
wtp_3 = ifelse(wt >= 3, 1, 0),
testp = ifelse(drat_4 == 1 | wtp_3 == 1, 1, 0)) %>%
select(testp,vs,am)
tab <-
tbl_summary(mtcars_tab,
missing = "no",
by = testp
) %>%
add_p
tab
Я бы хотел, чтобы таблица разделилась на один столбец, в котором значение drat_4 положительное, и другой столбец, в котором значение wtp_3 положительное, но мне трудно с этим, так как они перекрываются. Кроме того, я бы затем сравнил переменные для положительных случаев drat_4 и wtp_3 и добавил p-значения в таблицу. Извините, если это вас смущает. Я постараюсь уточнить!
Был бы очень признателен вам за помощь в этом!
Комментарии:
1.
chisq.test()
возможно, это то, что вы ищете. Не могли бы вы предоставить данные и код, чтобы мы могли воссоздать вашу проблему? Используйтеdput(your_data)
, копируйте и вставляйте выходные данные в свой вопрос, чтобы легко делиться R-объектами с другими.2. Если вы опубликуете воспроизводимый пример, включающий данные и код, которые мы можем запустить на нашей машине, мы сможем помочь. Пожалуйста, также укажите код для расчета теста на разницу.
3. Спасибо, @DanielD.Sjoberg и Тилл за ответы! Я добавил код и уточнил пример. Пожалуйста, дайте мне знать, если я смогу дополнительно прояснить этот вопрос.
Ответ №1:
Я думаю, что пример кода решает вашу проблему. Вам нужно будет дополнить код правильным сравнением двух столбцов, которое учитывает, что эти две группы не являются взаимоисключающими.
library(gtsummary)
library(tidyverse)
packageVersion("gtsummary")
#> [1] '1.4.0.9004'
mtcars_tab <-
mtcars %>%
mutate(
drat_4 = ifelse(drat >= 4, 1, 0),
wtp_3 = ifelse(wt >= 3, 1, 0)
) %>%
select(drat_4, wtp_3, cyl, mpg)
with(mtcars_tab, table(drat_4, wtp_3))
#> wtp_3
#> drat_4 0 1
#> 0 6 19
#> 1 6 1
# table among drat_4 test positive
tbl1 <-
mtcars_tab %>%
filter(drat_4 == 1) %>%
tbl_summary(
missing = "no",
type = mpg ~ "continuous",
include = -c(drat_4, wtp_3)
)
# table among wtp_3 test positive
tbl2 <-
mtcars_tab %>%
filter(wtp_3 == 1) %>%
tbl_summary(
missing = "no",
type = mpg ~ "continuous",
include = -c(drat_4, wtp_3)
)
# create a table with the variable and the p.value
tbl_with_pvalue <-
tibble(
variable = c("cyl", "mpg"),
row_type = "label",
# you'll need to write a proper function here to get the p-values from an approrate test
p.value = c(0.033, 0.044)
)
tbl_final <-
# merge the two tables
tbl_merge(list(tbl1, tbl2)) %>%
# add a pvalue comparing the two columns
modify_table_body(
~.x %>%
dplyr::left_join(
tbl_with_pvalue,
by = c("variable", "row_type")
)
) %>%
# add header for new pvalue column
modify_header(p.value ~ "**p-value**") %>%
# add a formatting function for p-value
modify_fmt_fun(p.value ~ style_pvalue)
Создано 2021-05-06 пакетом reprex (v2.0.0)
Комментарии:
1. Спасибо вам за это решение! Я и сам делал нечто подобное. Существует ли какой-либо способ извлечения сумм и процентов из объектов gtsummary для ввода в функцию для вычисления p-значений?
2. Да! Вот пример, чтобы перейти к подсчетам в первой таблице для переменной cyl
tbl_final %>% purrr::pluck("tbls", 1, "meta_data", "df_stats", 1)