Search code examples
rglmpurrrbroom

R purrr::map/broom::tidy Does Not Print Probability Values for GLM Model


I'm running into a problem with purrr::map and broom::tidy when running loglinear GLMs in R. For some reason, model p-values do not print when running many models but do print with a single model. In the end, I'd like the multiple models to print p values for each model as it does in the single model case. The provided example uses the built in "Titanic" data set (see William King's website).

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)

While I'm thinking about it, how does one stop broom::tidy from printing the warning messages about unrecognized columns?

Thanks in advance.


Solution

  • The issue is in the displaced parens for anova, The test = "Chisq" is wrapped outside the anova call i.e

    anova(glm(Freq ~ Sex * Survived, family = poisson, data = .x)), test="Chisq")
                                                               ^^^
    

    Implementing with the correct closing parens

    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