Я работаю над проектом, который включает в себя двоичную переменную ответа, двоичный классификатор обработки и некоторые другие категориальные и непрерывные ковариаты, которые были важны в нашем одномерном анализе. Мой текущий исследовательский вопрос связан с потенциальными эффектами взаимодействия лечения и ковариат участников.
Мой набор данных уже разделен на 3 частично перекрывающиеся группы участников.
I * sh для проверки гипотезы потенциального взаимодействия между лечением и ковариатами путем моделирования основных эффектов каждой переменной-предиктора (лечения и ковариат) и применения серии регрессионных моделей логистики c, каждая из которых включает одна пара лечения: ковариатические взаимодействия.
Пример может быть представлен следующим образом:
# Create a dataset with 3 partially overlapping groups
x <-
tibble(id = 1:50,
outcome = rbinom(50, size = 1, 0.5),
intervention = rbinom(50, size = 1, 0.5),
p1 = rbinom(50, size = 1, 0.5),
p2 = rbinom(50, size = 1, 0.5),
p3 = rbinom(50, size = 1, 0.5),
p4 = rnorm(50, 50, 10)) %>%
list(d1 = .,
d2 = (slice(., sample(1:50, size = 40, replace = FALSE))),
d3 = (slice(., sample(1:50, size = 45, replace = FALSE)))) %>%
enframe(name = "subset") %>%
unnest(value) %>%
mutate_at(1:7, as.character)
c <- paste0("p", 1:4)
# Formula with partially-specified interaction term
f <- "outcome ~ intervention + p1 + p2 + p3 + p4 + intervention:"
Мой вопрос таков: каков наиболее последовательный и последовательный способ выполнения это? Каковы различные альтернативы. В конечном счете, что является наиболее эффективным с точки зрения краткости кода и читабельности?
Вот пример решения, которое немного хакери sh. Я могу придумать еще несколько на макушке, но ни один из них не будет особенно элегантным.
f <- "outcome ~ intervention + p1 + p2 + p3 + p4 + intervention:"
x %>%
mutate_at("p4", function(x) as.character(0)) %>%
select(-outcome, -intervention) %>%
pivot_longer(cols = c("p1", "p2", "p3", "p4")) %>%
select(-value) %>%
left_join(x, by = c("subset", "id")) %>%
group_by(subset, name) %>%
nest() %>%
mutate(fit = map2(data, name,
~glm(as.formula(paste0(f, .y)), .x, family = "binomial")))
Заранее большое спасибо!