Я учусь анализировать данные и представлять результаты РКИ с использованием R. Я пробовал читать документацию пакета и искал в Интернете, но не нашел решения для этой проблемы. У меня есть две группы участников, и я хочу выразить исходные данные для обеих групп, изменения в каждой группе (от исходного уровня до конечной точки) и разницу между конечными точками - все это для каждого результата - в одной таблице. Ниже я прикрепил пример таблицы.
Я смоделировал фрейм данных, попробовал написать код и буду обсуждать проблемы здесь.
ID <- seq(1:50)
data <- data.frame(ID)
data$drug <- rbinom(n = 50, 1, prob = 0.5)
data$drug <- factor(data$drug, levels = c(0, 1),
labels = c("Drug X", "Drug Y"))
data$wt_0 <- rnorm(n = 50, mean = 70, sd = 5)
data$wt_12 <- rnorm(50, 68, 4.9)
head(data)
library(gtsummary)
library(gt)
subset(data, select = -ID) %>%
tbl_summary(by = drug) %>%
add_p()
Я попытался добавить изменение в столбце веса вручную.
data_new <- data
data$wt_change <- data$wt_0 - data$wt_12
subset(data_new, select = -ID) %>%
tbl_summary(by = drug) %>%
add_p()
Мне нужна таблица, подобная той, что показана вначале. При этом каждая строка должна соответствовать только одному результату. Возможно ли использовать пакет gtsummary() или любой другой пакет в R? Было бы здорово, если бы кто-нибудь помог, потому что это может быть распространенный сценарий.
Примечание. Да, корректировка множественности как таковая не нарушается, мы заявим, что остальные тесты (кроме первичного теста) являются исследовательскими и не должны интерпретироваться как таковые.





Чтобы получить только одну строку для каждой переменной (вес, ИМТ и т. д.), может потребоваться использовать измененный фрейм данных:
df <- data %>%
tidyr::pivot_longer(starts_with("wt"),
names_to = "week", values_to = "weight", names_prefix = "wt_")
# A tibble: 100 x 4
ID drug week weight
<int> <fct> <chr> <dbl>
1 1 Drug X 0 66.3
2 1 Drug X 12 70.2
3 2 Drug X 0 72.3
4 2 Drug X 12 69.6
5 3 Drug X 0 78.2
Затем вы можете использовать tbl_summary с «по=неделе» внутри функции tbl_strata, стратифицируя препарат, а затем добавляя add_difference(), чтобы получить столбец «Среднее изменение» для каждого препарата.
tbl_1 <- df |>
select(-ID) |>
tbl_strata(strata = drug,
.tbl_fun = ~ tbl_summary(.x, by = week,
label=list(weight~"Weight (kg)"),
digits=list(everything() ~ 2),
statistic = list(all_continuous() ~ "{mean} ({sd})")) |>
add_difference(estimate_fun = weight~function(x) style_number(x, digits = 2)),
.header = "**{strata}**") |>
modify_header(all_stat_cols() ~ "**{level} weeks**",
estimate_1 ~"**Mean change**",
estimate_2 ~"**Mean change**")
tbl_1
К сожалению, add_difference() вычисляет группу 1 — группу 2, хотя вам, вероятно, нужна группа 2 — группа 1.
Чтобы получить столбец «Т-тест», в котором сравниваются изменения между двумя препаратами с течением времени, вы снова можете использовать add_difference().
tbl_2 <- mutate(data, weight=wt_0 - wt_12) |>
select(drug, weight) |>
tbl_summary(by=drug,
label=list(weight~"Weight (kg)"),
digits=list(everything() ~ 2)) |>
add_difference(estimate_fun=weight~function(x) style_number(x, digits = 2)) |>
modify_column_hide(c(stat_1, stat_2))
tbl_2
И поскольку мы гарантировали, что имена и метки двух вычисляемых переменных были одинаковыми, мы можем использовать tbl_merge, чтобы объединить эти два объекта gtsummary:
tbl_merge(list(tbl_1, tbl_2)) |>
modify_spanning_header(ends_with("1_1")~"**Drug X**",
ends_with("2_1")~"**Drug Y**",
ends_with("_2")~"**T-Test**")
Данные:
set.seed(123) # data created by OP.
Возможно, @Daniel D. Sjoberg сможет с этим помочь.
Большое спасибо, это помогло мне решить проблему, и я мог бы добавить и четвертую таблицу. Мне было интересно (как вы заметили), есть ли какой-нибудь способ вместо этого вычислить разницу между группой 2 и группой 1 (B минус A) наоборот? Это обычная ситуация, потому что в фармацевтической промышленности или других исследованиях в области медико-биологических наук мы часто измеряем изменения по сравнению с базовым уровнем. Можем ли мы добавить отрицательный знак (или умножить на -1, т. е. минус 1) числовые значения, используемые для вывода в столбцах оценки и ci? Кажется, должен быть обходной путь, но я не знаю, как, спасибо