Добавить столбец с p-значением в qwraps::summary_table

#r #r-markdown #qwraps2

#r #r-уценка #qwraps2

Вопрос:

Я хочу сделать небольшую сводную таблицу для моих коллег в R-Markdown, используя qwraps::summary_table . Data.frame содержит информацию о различных экспозициях. Все переменные кодируются как двоичные.

 library(qwraps2)
library(dplyr)

pop <- rbinom(n = 1000, size = 1, prob = runif(n = 10, min = 0, max = 1))
exp <- rbinom(n = 1000, size = 1, prob = .5)

ID <- c(1:500)
therapy <- factor(sample(x = pop, size = 500, replace = TRUE), labels = c("Control", "Intervention"))
exp_1 <- sample(x = exp, size = 500, replace = TRUE)
exp_2 <- sample(x = exp, size = 500, replace = TRUE)
exp_3 <- sample(x = exp, size = 500, replace = TRUE)
exp_4 <- sample(x = exp, size = 500, replace = TRUE)

df <- data.frame(ID, exp_1, exp_2, exp_3, exp_4, therapy)
head(df)
 

На следующем шаге я создаю простую сводную таблицу следующим образом. В таблице я хочу, чтобы группы (контроль или вмешательство) были в виде столбцов, а экспозиции — в виде строк:

 my_summary <-
  list(list("Exposure 1" = ~ n_perc(exp_1 %in% 1),
            "Exposure 2" = ~ n_perc(exp_2 %in% 1),
            "Exposure 3" = ~ n_perc(exp_3 %in% 1),
            "Exposure 4" = ~ n_perc(exp_4 %in% 1))
       )

my_table <- summary_table(group_by(df, therapy), my_summary)
my_table
 

На следующем шаге я хотел добавить еще один столбец, содержащий p-значения для групповых различий между контрольной и интервенционной группами, например, с fisher.test помощью . Я прочитал, ?qwraps::summary_table что cbind это подходящий метод для класса qwraps2_summary_table , но, честно говоря, я с этим борюсь. Я пробовал разные способы, но, к сожалению, потерпел неудачу.

Есть ли удобный способ добавлять отдельные столбцы с помощью qwraps::summary_table , в частности, p-значений в соответствии с сгруппированными столбцами?

Спасибо за вашу помощь!

С наилучшими пожеланиями,
Флориан

Ответ №1:

[РЕШАЕМАЯ] Между тем, после долгих исследований по этой теме я нашел удобный и простой способ добавить столбец p.values. Возможно, это не самое умное решение, но оно сработало, по крайней мере, для меня.

Сначала я вычислил p.значения с помощью функции, которая извлекает p.значения из возвращаемых выходных fisher.test данных и сохраняет их в объекте, в моем случае в простом числовом векторе:

 # write function to extract fishers.test
fisher.pvalue <- function(x) {
     value <- fisher.test(x)$p.value
     return(value)
 }

# fisher test/generate pvalues
p.vals <- round(sapply(list(
  table(df$exp_1, df$therapy),
  table(df$exp_2, df$therapy),
  table(df$exp_3, df$therapy),
  table(df$exp_4, df$therapy)), fisher.pvalue), digits = 2)
 

На следующем шаге я просто добавил пустой столбец таблицы с именем P-Values и добавил p.vals его в ячейки столбца.

 overall_table <- cbind(my_table, "P-Value" = "") # create empty column
overall_table[9:12] <- p.vals # add vals to empty column
# overall_table <- cbind(my_table, "P-Value" = p.vals) works the same way in one line of code

overall_table 
 

В моем случае я просто искал соответствующие индексы ячеек в overall_table (for P-Values = 9:12) и заполнял их, используя базовый синтаксис. В виньетке qwraps2 (https://cran.r-project.org/web/packages/qwraps2/vignettes/summary-statistics.html ), автор использовал регулярные выражения для определения правильных ячеек (см. Раздел 3.2).

Если есть другие способы добавления отдельных столбцов qwraps2::summary_table , я был бы признателен, если бы увидел, как это возможно.

С наилучшими пожеланиями,
Флориан