Коэффициент шансов, коэффициент риска и пакет эпитул. Когда анализ должен опираться только на кросс-таблицы и зависит от среды - PullRequest
0 голосов
/ 26 февраля 2020

При работе в эпидемиология , коэффициент ODDS и другие меры риска всегда необходимы. Однако иногда мы моделируем данные не через glm, а исключительно на кросс-таблицах. С учетом сказанного, мне интересно, может ли кто-нибудь помочь разобраться с onequestions :

вопрос 1. Допустим, у меня есть набор данных с age_rank (factor) и headache_frequency ( Нет головной боли Низкочастотная промежуточная и высокочастотная), и я хочу проверить соотношение как переменной, так и вероятности того, что она будет назначена на «отсутствие головной боли» / низкочастотный (et c) групп как функция age_rank. Теперь я создаю несколько «манекенов» для этого:

ds <- ds %>% 
      mutate(no_headache = as.factor(if_else(headache_frequency == "No headache","yes","no")))
oddsratio(ds$age_group, ds$no_headache)

Затем:

ds <- ds %>% 
  mutate(low_headache = as.factor(if_else(headache_frequency == "Low frequency","yes","no")))

oddsratio(ds$age_group, ds$low_headache)

Я бы хотел ускорить решение, проверив все группы. Во-первых, я подумал, что «фильтр» может быть хорошим вариантом:

ds %>% 
  filter(headache_frequency == "No headache") %>% 
  oddsratio(headache_frequency, age_group)

Но эта ошибка приводит к результатам:

Error in oddsratio(., headache_frequency, age_group) : 
  object 'headache_frequency' not found

Затем я представил, что могу сгруппировать свои данные , но, конечно, это решение было неосуществимым:

ds %>% 
  group_by(headache_frequency) %>% 
  oddsratio(.,age_group)

Спасибо.
Поскольку этот вопрос может быть интересен для других людей, следуйте приведенному ниже коду, чтобы воспроизвести все команды:

dput(ds)

ds <- structure(list(headache_frequency = structure(c(4L, 4L, 3L, 3L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
                                                      4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                                      3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                      2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                      1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                      1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("No headache", 
                                                                                                                              "Low frequency", "Intermediate", "High frequency"), class = "factor"), 
                     age_group = structure(c(2L, 2L, 2L, 3L, 1L, 1L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                             3L, 3L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 1L, 2L, 2L, 2L, 
                                             2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                             3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                             3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                             3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
                     ), .Label = c("[10,12]", "(12,15]", "(15,Inf]"), class = "factor"), 
                     no_headache = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                               1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                               2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                               2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                               2L), .Label = c("no", "yes"), class = "factor"), levels = c("yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", 
                                                                                                           "yes", "yes", "yes", "yes", "yes"), low_headache = structure(c(1L, 
                                                                                                                                                                          1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 
                                                                                                                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                          1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("no", "yes"), class = "factor")), class = c("tbl_df", 
                                                                                                                                                                                                                                                                  "tbl", "data.frame"), row.names = c(NA, -339L))
library(tidyverse)
library(epitools)
library(janitor)


#Create a specific variable
ds <- ds %>% 
  mutate(no_headache = as.factor(if_else(headache_frequency == "No headache","yes","no")))

# Odds Ratio 
oddsratio(ds$age_group, ds$no_headache)

ds <- ds %>% 
  mutate(low_headache = as.factor(if_else(headache_frequency == "Low frequency","yes","no")))

oddsratio(ds$age_group, ds$low_headache)


ds %>% 
  filter(headache_frequency == "No headache") %>% 
  oddsratio(headache_frequency, age_group)



ds %>% 
  group_by(headache_frequency) %>% 
  oddsratio(.,age_group)
...