Вызов функции 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)