Вызов функции prop.test в R с помощью dplyr

Я пытаюсь рассчитать несколько биномиальных пропорций доверительных интервалов. Мои данные находятся во фрейме данных, и хотя я могу успешно извлечь estimate от объекта, возвращенного prop.test, conf.int переменная кажется нулевой при запуске на фрейме данных.

library(dplyr)

cases <- c(50000, 1000, 10, 2343242)
population <- c(100000000, 500000000, 100000, 200000000)

df <- as.data.frame(cbind(cases, population))
df %>% mutate(rate = prop.test(cases, pop, conf.level=0.95)$estimate)

Это соответственно возвращает

    cases population       rate
1   50000      1e+08 0.00050000
2    1000      5e+08 0.00000200
3      10      1e+05 0.00010000
4 2343242      2e+08 0.01171621

Тем не менее, когда я бегу

df %>% mutate(confint.lower= prop.test(cases, pop, conf.level=0.95)$conf.int[1])

Я к сожалению получаю

Error in mutate_impl(.data, dots) : 
  Column `confint.lower` is of unsupported type NULL

Какие-нибудь мысли? Я знаю альтернативные способы вычисления доверительного интервала биномиальной пропорции, но мне бы очень хотелось научиться использовать dplyr Что ж.

Спасибо!

1 ответ

Решение

Ты можешь использовать dplyr::rowwise() сгруппировать по строкам:

df %>%
    rowwise() %>%
    mutate(lower_ci = prop.test(cases, pop, conf.level=0.95)$conf.int[1])

По умолчанию dplyr берет имена столбцов и обрабатывает их как векторы. Так что векторизованные функции, такие как @Jake Fisher, упомянутые выше, просто работают без rowwise() добавлено.

Вот что я бы сделал, чтобы перехватить все компоненты доверительного интервала сразу:

df %>%
    rowwise %>%
    mutate(tst = list(broom::tidy(prop.test(cases, pop, conf.level=0.95)))) %>%
    tidyr::unnest(tst)

Начиная с версии 0.8.3 dplyr, статус жизненного цикла rowwise()функция "допрос". Следовательно, я бы предпочел использоватьpurrr::map2() для достижения цели:

df %>%
  mutate(rate = map2(cases, pop, ~ prop.test(.x, .y, conf.level=0.95) %>%
                                     broom::tidy())) %>%
  unnest(rate)
Другие вопросы по тегам