#r #glm #purrr #broom
#r #glm #purrr #broom
Вопрос:
Я сталкиваюсь с проблемой с purrr::map и broom ::tidy при запуске логлинейных GLM в R. По какой-то причине модельные p-значения не выводятся при запуске многих моделей, но печатаются с одной моделью. В конце концов, я бы хотел, чтобы несколько моделей выводили значения p для каждой модели, как это делается в случае с одной моделью. В приведенном примере используется встроенный набор данных «Титаник» (см. Веб-сайт Уильяма Кинга).
data(Titanic)
#convert to data frame
T.df <- as.data.frame(Titanic)
head(T.df)
#run glm as loglinear model
model1 <- glm(Freq ~ Sex * Survived, family = poisson, data = T.df)
#print model with tidy--p-values print here
broom::tidy(anova(model1, test = "Chisq"))
#Now run multiple models by class
#Note the models print just fine but without p values
T.df %>%
tidyr::nest(-Class) %>%
dplyr::mutate(
fit = purrr::map(data, ~ anova(glm(Freq ~ Sex * Survived, family = poisson, data = .x)), test="Chisq"),
tidied = purrr::map(fit, broom::tidy)
) %>%
tidyr::unnest(tidied)
Пока я думаю об этом, как остановить broom:: tidy от печати предупреждающих сообщений о нераспознанных столбцах?
Заранее спасибо.
Комментарии:
1. Вы смотрели на виньетку broom и dplyr ? Могут быть немного устаревшими, поскольку они поощряют отход от
do
, но все равно должны работать
Ответ №1:
Проблема заключается в смещенных скобках для anova
, test = "Chisq"
они заключены вне anova
вызова, т.Е.
anova(glm(Freq ~ Sex * Survived, family = poisson, data = .x)), test="Chisq")
^^^
Реализация с правильными закрывающими скобками
T.df %>%
nest(-Class) %>%
mutate(tidied = map(data, ~
glm(Freq ~ Sex * Survived, family = poisson, data = .x) %>%
anova(., test = "Chisq") %>%
broom::tidy(.))) %>%
unnest(tidied)
# A tibble: 16 x 7
# Class term df Deviance Resid..Df Resid..Dev p.value
# <fct> <chr> <int> <dbl> <int> <dbl> <dbl>
# 1 1st NULL NA NA 7 590. NA
# 2 1st Sex 1 3.78 6 586. 5.20e- 2
# 3 1st Survived 1 20.4 5 566. 6.28e- 6
# 4 1st Sex:Survived 1 162. 4 404. 4.78e- 37
# 5 2nd NULL NA NA 7 476. NA
# 6 2nd Sex 1 18.9 6 457. 1.37e- 5
# 7 2nd Survived 1 8.47 5 449. 3.62e- 3
# 8 2nd Sex:Survived 1 163. 4 286. 2.54e- 37
# 9 3rd NULL NA NA 7 876. NA
#10 3rd Sex 1 145. 6 732. 2.54e- 33
#11 3rd Survived 1 181. 5 550. 2.36e- 41
#12 3rd Sex:Survived 1 57.8 4 493. 2.92e- 14
#13 Crew NULL NA NA 7 2535. NA
#14 Crew Sex 1 1014. 6 1522. 2.02e-222
#15 Crew Survived 1 252. 5 1269. 7.85e- 57
#16 Crew Sex:Survived 1 42.4 4 1227. 7.63e- 11
Комментарии:
1. Большое спасибо! Простое исправление и более эффективный код. Передача выходных данных модели в вызов anova работает очень хорошо.