#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
, я был бы признателен, если бы увидел, как это возможно.
С наилучшими пожеланиями,
Флориан