Вычисление p-значений из объекта tbl_merge?

#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
 

Таблица 1

Я бы хотел, чтобы таблица разделилась на один столбец, в котором значение 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)