bbolker / broom.mixed

tidy methods for mixed models in R
227 stars 23 forks source link

adding no. of observations to `glance` summaries? #71

Open IndrajeetPatil opened 5 years ago

IndrajeetPatil commented 5 years ago

Maybe adding no. of observations nobs column to glance methods in broom.mixed will be a nice addition? I certaintly find this information useful to have.

# setup
set.seed(123)
library(tidyverse, warn.conflicts = FALSE)
library(tidymodels, warn.conflicts = FALSE)
library(ordinal)

# model
mod <- lme4::glmer(
  formula = Survived ~ Sex + Age + (Sex + Age | Class),
  # select 20% of the sample to reduce the time of execution
  data = dplyr::sample_frac(tbl = ggstatsplot::Titanic_full, size = 0.2),
  family = stats::binomial(link = "logit"),
  control = lme4::glmerControl(
    optimizer = "Nelder_Mead",
    calc.derivs = FALSE,
    boundary.tol = 1e-7
  )
)
# summary provided by `broom.mixed` package
broom.mixed::glance(mod)
#> # A tibble: 1 x 6
#>   sigma logLik   AIC   BIC deviance df.residual
#>   <dbl>  <dbl> <dbl> <dbl>    <dbl>       <int>
#> 1     1  -209.  436.  473.     400.         431
nobs(mod)
#> [1] 440

broom has recently started including this information in the glance summaries-

# summary provided by `broom` for linear model
# example-1
mod <- lm(mpg ~ wt + qsec, data = mtcars)
broom::glance(mod)
#> # A tibble: 1 x 12
#>   r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC
#>       <dbl>         <dbl> <dbl>     <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>
#> 1     0.826         0.814  2.60      69.0 9.39e-12     2  -74.4  157.  163.
#> # ... with 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>

# example-2
fit <- ordinal::clm(rating ~ temp * contact, data = wine)
broom::glance(fit)
#> # A tibble: 1 x 6
#>     edf   AIC   BIC logLik df.residual  nobs
#>   <int> <dbl> <dbl>  <dbl>       <dbl> <dbl>
#> 1     7  187.  203.  -86.4          65    72

Created on 2019-05-27 by the reprex package (v0.3.0)

Session info ``` r devtools::session_info() #> - Session info ---------------------------------------------------------- #> setting value #> version R version 3.6.0 alpha (2019-03-29 r76300) #> os Windows 10 x64 #> system x86_64, mingw32 #> ui RTerm #> language (EN) #> collate English_United States.1252 #> ctype English_United States.1252 #> tz America/New_York #> date 2019-05-27 #> #> - Packages -------------------------------------------------------------- #> package * version date lib #> abind 1.4-5 2016-07-21 [1] #> assertthat 0.2.1 2019-03-21 [1] #> backports 1.1.4 2019-04-10 [1] #> base64enc 0.1-3 2015-07-28 [1] #> BayesFactor 0.9.12-4.2 2018-05-19 [1] #> bayesplot 1.7.0 2019-05-23 [1] #> boot 1.3-21 2019-03-01 [2] #> broom * 0.5.2.9001 2019-04-09 [1] #> broom.mixed 0.2.4.9000 2019-03-14 [1] #> broomExtra 0.0.3.9000 2019-05-20 [1] #> callr 3.2.0 2019-03-15 [1] #> car 3.0-3 2019-05-27 [1] #> carData 3.0-2 2018-09-30 [1] #> cellranger 1.1.0 2016-07-27 [1] #> class 7.3-15 2019-01-01 [1] #> cli 1.1.0 2019-03-19 [1] #> cluster 2.0.7-1 2018-04-13 [2] #> coda 0.19-2 2018-10-08 [1] #> codetools 0.2-16 2018-12-24 [1] #> coin 1.3-0 2019-03-08 [1] #> colorspace 1.4-1 2019-03-18 [1] #> colourpicker 1.0 2017-09-27 [1] #> cowplot 0.9.4 2019-01-08 [1] #> crayon 1.3.4 2017-09-16 [1] #> crosstalk 1.0.0 2016-12-21 [1] #> curl 3.3 2019-01-10 [1] #> data.table 1.12.2 2019-04-07 [1] #> DEoptimR 1.0-8 2016-11-19 [1] #> desc 1.2.0 2019-04-03 [1] #> DescTools 0.99.28 2019-03-17 [1] #> devtools 2.0.2 2019-04-08 [1] #> dials * 0.0.2 2018-12-09 [1] #> digest 0.6.19 2019-05-20 [1] #> dplyr * 0.8.1 2019-05-14 [1] #> DT 0.6 2019-05-09 [1] #> dygraphs 1.1.1.6 2018-07-11 [1] #> ellipsis 0.1.0 2019-02-19 [1] #> emmeans 1.3.4 2019-04-21 [1] #> EMT 1.1 2013-01-29 [1] #> estimability 1.3 2018-02-11 [1] #> evaluate 0.13 2019-02-12 [1] #> expm 0.999-4 2019-03-21 [1] #> ez 4.4-0 2016-11-02 [1] #> fansi 0.4.0 2018-11-05 [1] #> fit.models 0.5-14 2017-04-06 [1] #> forcats * 0.4.0 2019-02-17 [1] #> foreign 0.8-71 2018-07-20 [2] #> fs 1.3.1 2019-05-06 [1] #> generics 0.0.2 2019-03-05 [1] #> ggcorrplot 0.1.3 2019-05-19 [1] #> ggExtra 0.8 2019-02-23 [1] #> ggplot2 * 3.1.1.9000 2019-05-25 [1] #> ggrepel 0.8.1 2019-05-07 [1] #> ggridges 0.5.1 2018-09-27 [1] #> ggsignif 0.5.0 2019-02-20 [1] #> ggstatsplot 0.0.10.9000 2019-05-26 [1] #> glue 1.3.1 2019-03-12 [1] #> gower 0.2.1 2019-05-14 [1] #> gridExtra 2.3 2017-09-09 [1] #> groupedstats 0.0.7 2019-05-28 [1] #> gtable 0.3.0 2019-03-25 [1] #> gtools 3.8.1 2018-06-26 [1] #> haven 2.1.0 2019-02-19 [1] #> highr 0.8 2019-03-20 [1] #> hms 0.4.2 2018-03-10 [1] #> htmltools 0.3.6 2017-04-28 [1] #> htmlwidgets 1.3 2018-09-30 [1] #> httpuv 1.5.1 2019-04-05 [1] #> httr 1.4.0 2018-12-11 [1] #> igraph 1.2.4.1 2019-04-22 [1] #> infer * 0.4.0.1 2019-04-22 [1] #> inline 0.3.15 2018-05-18 [1] #> insight 0.3.0 2019-05-11 [1] #> ipred 0.9-9 2019-04-28 [1] #> janeaustenr 0.1.5 2017-06-10 [1] #> jmv 0.9.6.1 2019-04-22 [1] #> jmvcore 0.9.6.4 2019-03-28 [1] #> jsonlite 1.6 2018-12-07 [1] #> knitr 1.23 2019-05-18 [1] #> LaplacesDemon 16.1.1 2018-06-30 [1] #> later 0.8.0 2019-02-11 [1] #> lattice 0.20-38 2018-11-04 [2] #> lava 1.6.5 2019-02-12 [1] #> lazyeval 0.2.2 2019-03-15 [1] #> libcoin 1.0-4 2019-02-28 [1] #> lme4 1.1-21 2019-03-05 [1] #> lmtest 0.9-37 2019-04-30 [1] #> logspline 2.1.12 2019-02-05 [1] #> loo 2.1.0 2019-03-13 [1] #> lubridate 1.7.4 2018-04-11 [1] #> magrittr 1.5 2014-11-22 [1] #> manipulate 1.0.1 2014-12-24 [1] #> markdown 0.9 2018-12-07 [1] #> MASS 7.3-51.4 2019-03-31 [1] #> Matrix 1.2-17 2019-03-22 [1] #> MatrixModels 0.4-1 2015-08-22 [1] #> matrixStats 0.54.0 2018-07-23 [1] #> mc2d 0.1-18 2017-03-06 [1] #> memoise 1.1.0 2017-04-21 [1] #> metaBMA 0.3.9 2017-08-04 [1] #> metafor 2.1-0 2019-05-14 [1] #> mgcv 1.8-28 2019-03-21 [1] #> mime 0.6 2018-10-05 [1] #> miniUI 0.1.1.1 2018-05-18 [1] #> minqa 1.2.4 2014-10-09 [1] #> mnormt 1.5-5 2016-10-15 [1] #> modelr 0.1.4 2019-02-18 [1] #> modeltools 0.2-22 2018-07-16 [1] #> multcomp 1.4-10 2019-03-05 [1] #> multcompView 0.1-7 2015-07-31 [1] #> munsell 0.5.0 2018-06-12 [1] #> mvtnorm 1.0-10 2019-03-05 [1] #> nlme 3.1-137 2018-04-07 [2] #> nloptr 1.2.1 2018-10-03 [1] #> nnet 7.3-12 2016-02-02 [2] #> nortest 1.0-4 2015-07-30 [1] #> numDeriv 2016.8-1 2016-08-27 [1] #> openxlsx 4.1.0 2018-05-26 [1] #> ordinal * 2019.4-25 2019-04-25 [1] #> paletteer 0.2.1.9000 2019-03-25 [1] #> parsnip * 0.0.2 2019-03-22 [1] #> pbapply 1.4-0 2019-02-05 [1] #> pcaPP 1.9-73 2018-01-14 [1] #> pillar 1.4.0 2019-05-11 [1] #> pkgbuild 1.0.3 2019-03-20 [1] #> pkgconfig 2.0.2 2018-08-16 [1] #> pkgload 1.0.2 2018-10-29 [1] #> plyr 1.8.4 2016-06-08 [1] #> prettyunits 1.0.2 2015-07-13 [1] #> pROC 1.14.0 2019-03-12 [1] #> processx 3.3.1 2019-05-08 [1] #> prodlim 2018.04.18 2018-04-18 [1] #> promises 1.0.1 2018-04-13 [1] #> ps 1.3.0 2018-12-21 [1] #> psych 1.8.12 2019-01-12 [1] #> purrr * 0.3.2 2019-03-15 [1] #> purrrlyr 0.0.5 2019-03-15 [1] #> R6 2.4.0 2019-02-14 [1] #> rcompanion 2.1.7 2019-04-09 [1] #> Rcpp 1.0.1 2019-03-17 [1] #> readr * 1.3.1 2018-12-21 [1] #> readxl 1.3.1 2019-03-13 [1] #> recipes * 0.1.5 2019-03-21 [1] #> remotes 2.0.4 2019-04-10 [1] #> reshape 0.8.8 2018-10-23 [1] #> reshape2 1.4.3 2017-12-11 [1] #> rio 0.5.16 2018-11-26 [1] #> rjson 0.2.20 2018-06-08 [1] #> rlang 0.3.4 2019-04-07 [1] #> rmarkdown 1.13 2019-05-22 [1] #> robust 0.4-18 2017-04-27 [1] #> robustbase 0.93-5 2019-05-12 [1] #> rpart 4.1-13 2018-02-23 [2] #> rprojroot 1.3-2 2018-01-03 [1] #> rrcov 1.4-7 2018-11-15 [1] #> rsample * 0.0.4 2019-01-07 [1] #> rsconnect 0.8.13 2019-01-10 [1] #> rstan 2.18.2 2018-11-07 [1] #> rstanarm 2.18.2 2018-11-10 [1] #> rstantools 1.5.1 2018-08-22 [1] #> rstudioapi 0.10 2019-03-19 [1] #> runjags 2.0.4-2 2016-07-25 [1] #> rvest 0.3.4 2019-05-15 [1] #> sandwich 2.5-1 2019-04-06 [1] #> scales * 1.0.0 2018-08-09 [1] #> sessioninfo 1.1.1 2018-11-05 [1] #> shiny 1.3.2 2019-04-22 [1] #> shinyjs 1.0 2018-01-08 [1] #> shinystan 2.5.0 2018-05-01 [1] #> shinythemes 1.1.2 2018-11-06 [1] #> sjlabelled 1.0.17 2019-03-10 [1] #> sjmisc 2.7.9 2019-03-16 [1] #> sjstats 0.17.4 2019-03-15 [1] #> skimr 1.0.6 2019-05-27 [1] #> SnowballC 0.6.0 2019-01-15 [1] #> StanHeaders 2.18.1 2019-01-28 [1] #> stringi 1.4.3 2019-03-12 [1] #> stringr * 1.4.0 2019-02-10 [1] #> survival 2.43-3 2018-11-26 [2] #> testthat 2.1.1 2019-04-23 [1] #> TH.data 1.0-10 2019-01-21 [1] #> threejs 0.3.1 2017-08-13 [1] #> tibble * 2.1.1 2019-03-16 [1] #> tidymodels * 0.0.2 2018-11-27 [1] #> tidyposterior 0.0.2 2018-11-15 [1] #> tidypredict 0.3.0 2019-01-10 [1] #> tidyr * 0.8.3 2019-03-01 [1] #> tidyselect 0.2.5 2018-10-11 [1] #> tidytext 0.2.0 2018-10-17 [1] #> tidyverse * 1.2.1 2017-11-14 [1] #> timeDate 3043.102 2018-02-21 [1] #> TMB 1.7.15 2018-11-09 [1] #> tokenizers 0.2.1 2018-03-29 [1] #> ucminf 1.1-4 2016-08-18 [1] #> usethis 1.5.0 2019-04-07 [1] #> utf8 1.1.4 2018-05-24 [1] #> vctrs 0.1.0 2018-11-29 [1] #> withr 2.1.2 2018-03-15 [1] #> WRS2 1.0-0 2019-04-16 [1] #> xfun 0.7 2019-05-14 [1] #> xml2 1.2.0 2018-01-24 [1] #> xtable 1.8-4 2019-04-21 [1] #> xts 0.11-2 2018-11-05 [1] #> yaml 2.2.0 2018-07-25 [1] #> yardstick * 0.0.3 2019-03-08 [1] #> zeallot 0.1.0 2018-01-28 [1] #> zip 2.0.2 2019-05-13 [1] #> zoo 1.8-5 2019-03-21 [1] #> source #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> local #> Github (bbolker/broom.mixed@c2de407) #> local #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.2) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.3) #> CRAN (R 3.5.0) #> Github (r-lib/desc@c860e7b) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.3) #> Github (brodieG/fansi@ab11e9c) #> CRAN (R 3.5.1) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> Github (r-lib/generics@c15ac43) #> CRAN (R 3.6.0) #> Github (daattali/ggExtra@dd74c0f) #> Github (tidyverse/ggplot2@1f6f0cb) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> local #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> local #> CRAN (R 3.6.0) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.3) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.3) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.3) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.2) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.5.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> Github (EmilHvitfeldt/paletteer@38cdb34) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.5.2) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.2) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> R-Forge (R 3.6.0) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.5.3) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.5.1) #> CRAN (R 3.6.0) #> CRAN (R 3.6.0) #> #> [1] C:/Users/inp099/Documents/R/win-library/3.6 #> [2] C:/Program Files/R/R-3.6.0alpha/library ```
corybrunson commented 2 years ago

This is implemented for some classes (stanreg, gamlss) but not others (merMod). This last case would require an extra line in the internal helper finish_glance(). I don't know why that function is flagged for fixing, but lme4 does include a nobs.merMod method that could be used there. I'd be glad to give it a try (if there's no a priori reason it shouldn't work) and submit a PR (if indeed it works).

bbolker commented 2 years ago

Definitely no reason it shouldn't work. I think finish_glance() might be a leftover function from broom (possibly even deprecated there now?) that tries to create a "generic" glance object by trying all of the widely implemented methods (AIC, R2, nobs, etc etc). Could probably be refactored, but a quick-and-dirty fix would also be welcome. (Could look at broom to see how it's done there now ...)

corybrunson commented 2 years ago

Note: I'm pressed for time right now but would be glad to come back in a month or two to see about removing finish_glance() and making the lme4 tidiers standalone!