diff --git a/API b/API
index c4d8f43..f28db71 100644
--- a/API
+++ b/API
@@ -1,9 +1,28 @@
+# API for broomExtra package
+
+## Exported functions
+
augment(x, ...)
-easystats_to_tidy_names(x)
glance(x, ...)
glance_performance(x, ...)
-grouped_augment(data, grouping.vars, ..f, ..., augment.args = list)
+grouped_augment(data, grouping.vars, ..f, ..., augment.args = list())
grouped_glance(data, grouping.vars, ..f, ...)
-grouped_tidy(data, grouping.vars, ..f, ..., tidy.args = list)
+grouped_tidy(data, grouping.vars, ..f, ..., tidy.args = list())
tidy(x, ...)
tidy_parameters(x, conf.int = TRUE, ...)
+
+## Reexported objects
+
+magrittr::%$%
+zeallot::%<-%
+magrittr::%<>%
+magrittr::%>%
+rlang::%|%
+rlang::%||%
+tibble::as_tibble
+generics::augment
+ipmisc::easystats_to_tidy_names
+tibble::enframe
+generics::glance
+tibble::tibble
+generics::tidy
diff --git a/CRAN-RELEASE b/CRAN-RELEASE
index 5f62403..65392b0 100644
--- a/CRAN-RELEASE
+++ b/CRAN-RELEASE
@@ -1,2 +1,2 @@
-This package was submitted to CRAN on 2020-09-02.
-Once it is accepted, delete this file and tag the release (commit a6ec5f7).
+This package was submitted to CRAN on 2020-09-14.
+Once it is accepted, delete this file and tag the release (commit 241e35c).
diff --git a/DESCRIPTION b/DESCRIPTION
index eca516f..7d3351b 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
Type: Package
Package: broomExtra
Title: Enhancements for 'broom' and 'easystats' Package Families
-Version: 4.0.5.9000
+Version: 4.0.6
Authors@R:
person(given = "Indrajeet",
family = "Patil",
@@ -24,10 +24,10 @@ BugReports: https://github.com/IndrajeetPatil/broomExtra/issues
Depends:
R (>= 3.6.0)
Imports:
- broom,
+ broom (>= 0.7.0),
broom.mixed,
dplyr,
- ipmisc,
+ ipmisc (>= 3.2.0),
parameters,
performance,
rlang
@@ -43,5 +43,6 @@ Suggests:
Encoding: UTF-8
Language: en-US
LazyData: true
-Roxygen: list(markdown = TRUE)
+Roxygen: list(markdown = TRUE, roclets = c("rd", "namespace",
+ "collate", "pkgapi::api_roclet"))
RoxygenNote: 7.1.1
diff --git a/NAMESPACE b/NAMESPACE
index b35f98e..9d4b910 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -28,8 +28,6 @@ importFrom(dplyr,group_by_at)
importFrom(dplyr,group_modify)
importFrom(dplyr,intersect)
importFrom(dplyr,mutate)
-importFrom(dplyr,recode)
-importFrom(dplyr,rename_all)
importFrom(dplyr,select)
importFrom(dplyr,ungroup)
importFrom(ipmisc,"%$%")
@@ -37,6 +35,7 @@ importFrom(ipmisc,"%<-%")
importFrom(ipmisc,"%<>%")
importFrom(ipmisc,"%>%")
importFrom(ipmisc,as_tibble)
+importFrom(ipmisc,easystats_to_tidy_names)
importFrom(ipmisc,enframe)
importFrom(ipmisc,tibble)
importFrom(parameters,model_parameters)
diff --git a/NEWS.md b/NEWS.md
index 8fdcf93..33aeb31 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,6 +1,8 @@
-# broomExtra 4.0.5.9000
+# broomExtra 4.0.6
- Minor tweak to the documentation.
+
+ - `easystats_to_tidy_names` is now reexported from `ipmisc`.
# broomExtra 4.0.5
diff --git a/R/easystats_to_tidy_names.R b/R/easystats_to_tidy_names.R
deleted file mode 100644
index 0f7c471..0000000
--- a/R/easystats_to_tidy_names.R
+++ /dev/null
@@ -1,54 +0,0 @@
-#' @name easystats_to_tidy_names
-#' @title Convert `easystats` package outputs to `tidymodels` conventions.
-#' @description Both `broom` package from `tidymodels` universe and `parameters`
-#' package from `easystats` universe can provide model summaries for a large
-#' number of model objects. This is a convenience function that converts
-#' naming conventions adopted in `easystats` to the ones adopted in the
-#' `broom` package.
-#'
-#' @param x A statistical model object
-#'
-#' @importFrom dplyr rename_all recode
-#'
-#' @examples
-#' # example model object
-#' mod <- stats::lm(formula = wt ~ am * cyl, data = mtcars)
-#'
-#' # `tidy`-fied output
-#' easystats_to_tidy_names(parameters::model_parameters(mod))
-#' @export
-
-easystats_to_tidy_names <- function(x) {
- as_tibble(x) %>%
- dplyr::rename_all(.tbl = ., .funs = tolower) %>%
- dplyr::rename_all(.tbl = ., .funs = ~ gsub(x = ., pattern = "_", replacement = ".")) %>%
- dplyr::rename_all(
- .tbl = .,
- .funs = dplyr::recode,
- # parameters
- "parameter" = "term",
- "coefficient" = "estimate",
- "median" = "estimate",
- "se" = "std.error",
- "ci.low" = "conf.low",
- "ci.high" = "conf.high",
- "f" = "statistic",
- "t" = "statistic",
- "z" = "statistic",
- "t / f" = "statistic",
- "z / f" = "statistic",
- "chisq" = "statistic",
- "p" = "p.value",
- # effectsize
- "cohens.d" = "estimate",
- "hedges.g" = "estimate",
- # correlation
- # "df" = "parameter",
- "r" = "estimate",
- "rho" = "estimate",
- "s" = "statistic",
- # performance
- "r2" = "r.squared",
- "r2.adjusted" = "adj.r.squared"
- )
-}
diff --git a/R/generics.R b/R/generics.R
index 122bf52..4933d5d 100644
--- a/R/generics.R
+++ b/R/generics.R
@@ -18,7 +18,7 @@
#'
#' @examples
#' set.seed(123)
-#' lm.mod <- lm(Sepal.Length~ Species, iris)
+#' lm.mod <- lm(Sepal.Length ~ Species, iris)
#' broomExtra::tidy(x = lm.mod, conf.int = TRUE)
#' @export
@@ -53,7 +53,7 @@ tidy <- function(x, ...) {
#'
#' @examples
#' set.seed(123)
-#' lm.mod <- lm(Sepal.Length~ Species, iris)
+#' lm.mod <- lm(Sepal.Length ~ Species, iris)
#' broomExtra::glance(lm.mod)
#' @export
@@ -87,7 +87,7 @@ glance <- function(x, ...) {
#'
#' @examples
#' set.seed(123)
-#' lm.mod <- lm(Sepal.Length~ Species, iris)
+#' lm.mod <- lm(Sepal.Length ~ Species, iris)
#' broomExtra::augment(lm.mod)
#' @export
diff --git a/R/generics_easystats.R b/R/generics_easystats.R
index f95d4db..8fd7b7a 100644
--- a/R/generics_easystats.R
+++ b/R/generics_easystats.R
@@ -17,7 +17,6 @@
#' set.seed(123)
#' mod <- lm(mpg ~ wt + cyl, data = mtcars)
#' broomExtra::tidy_parameters(mod)
-#'
#' @importFrom rlang is_null
#' @importFrom parameters model_parameters
#'
@@ -79,7 +78,6 @@ tidy_parameters <- function(x, conf.int = TRUE, ...) {
#' set.seed(123)
#' mod <- lm(mpg ~ wt + cyl, data = mtcars)
#' broomExtra::glance_performance(mod)
-#'
#' @importFrom dplyr select intersect
#' @importFrom rlang is_null
#' @importFrom performance model_performance
diff --git a/R/grouped_generics.R b/R/grouped_generics.R
index 177c17d..1fb8c54 100644
--- a/R/grouped_generics.R
+++ b/R/grouped_generics.R
@@ -39,7 +39,6 @@ grouped_tidy <- function(data,
# functions passed to `group_modify` must accept
# `.x` and `.y` arguments, where `.x` is the data
tidy_group <- function(.x, .y) {
-
# presumes `..f` will work with these args
model <- ..f(.y = ..., data = .x)
@@ -86,7 +85,6 @@ grouped_glance <- function(data,
# functions passed to `group_modify` must accept
# `.x` and `.y` arguments, where `.x` is the data
glance_group <- function(.x, .y) {
-
# presumes `..f` will work with these args
model <- ..f(.y = ..., data = .x)
@@ -135,7 +133,6 @@ grouped_augment <- function(data,
# functions passed to `group_modify` must accept
# `.x` and `.y` arguments, where `.x` is the data
augment_group <- function(.x, .y) {
-
# presumes `..f` will work with these args
model <- ..f(.y = ..., data = .x)
diff --git a/R/reexports.R b/R/reexports.R
index 3792f84..666f579 100644
--- a/R/reexports.R
+++ b/R/reexports.R
@@ -36,3 +36,9 @@ ipmisc::enframe
#' @export
#' @importFrom ipmisc as_tibble
ipmisc::as_tibble
+
+# ----------------------- other -------------------------------------
+
+#' @export
+#' @importFrom ipmisc easystats_to_tidy_names
+ipmisc::easystats_to_tidy_names
diff --git a/README.md b/README.md
index 3f0ab98..bd69505 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,3 @@
-
`broomExtra`: Enhancements for `broom` and `easystats` Package Families
@@ -6,11 +5,11 @@
| Package | Status | Usage | GitHub | References |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [![CRAN\_Release\_Badge](http://www.r-pkg.org/badges/version-ago/broomExtra)](https://CRAN.R-project.org/package=broomExtra) | [![Travis Build Status](https://travis-ci.org/IndrajeetPatil/broomExtra.svg?branch=master)](https://travis-ci.org/IndrajeetPatil/broomExtra) | [![Daily downloads badge](https://cranlogs.r-pkg.org/badges/last-day/broomExtra?color=blue)](https://CRAN.R-project.org/package=broomExtra) | [![GitHub version](https://img.shields.io/badge/GitHub-4.0.5-orange.svg?style=flat-square)](https://github.com/IndrajeetPatil/broomExtra/) | [![Website](https://img.shields.io/badge/website-broomExtra-orange.svg?colorB=E91E63)](https://indrajeetpatil.github.io/broomExtra/) |
+| [![CRAN_Release_Badge](http://www.r-pkg.org/badges/version-ago/broomExtra)](https://CRAN.R-project.org/package=broomExtra) | [![Travis Build Status](https://travis-ci.org/IndrajeetPatil/broomExtra.svg?branch=master)](https://travis-ci.org/IndrajeetPatil/broomExtra) | [![Daily downloads badge](https://cranlogs.r-pkg.org/badges/last-day/broomExtra?color=blue)](https://CRAN.R-project.org/package=broomExtra) | [![GitHub version](https://img.shields.io/badge/GitHub-4.0.5-orange.svg?style=flat-square)](https://github.com/IndrajeetPatil/broomExtra/) | [![Website](https://img.shields.io/badge/website-broomExtra-orange.svg?colorB=E91E63)](https://indrajeetpatil.github.io/broomExtra/) |
| [![CRAN Checks](https://cranchecks.info/badges/summary/broomExtra)](https://cran.r-project.org/web/checks/check_results_broomExtra.html) | [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/IndrajeetPatil/broomExtra?branch=master&svg=true)](https://ci.appveyor.com/project/IndrajeetPatil/broomExtra) | [![Weekly downloads badge](https://cranlogs.r-pkg.org/badges/last-week/broomExtra?color=blue)](https://CRAN.R-project.org/package=broomExtra) | [![Forks](https://img.shields.io/badge/forks-4-blue.svg)](https://github.com/IndrajeetPatil/broomExtra/) | [![Rdoc](https://www.rdocumentation.org/badges/version/broomExtra/)](https://rdrr.io/cran/broomExtra/) |
| [![minimal R version](https://img.shields.io/badge/R%3E%3D-3.6.0-6666ff.svg)](https://cran.r-project.org/) | [![lifecycle](https://img.shields.io/badge/lifecycle-maturing-blue.svg)](https://www.tidyverse.org/lifecycle/) | [![Monthly downloads badge](https://cranlogs.r-pkg.org/badges/last-month/broomExtra?color=blue)](https://CRAN.R-project.org/package=broomExtra) | [![Github Issues](https://img.shields.io/badge/issues-0-red.svg)](https://github.com/IndrajeetPatil/broomExtra/issues) | [![vignettes](https://img.shields.io/badge/vignettes-4.0.5-orange.svg?colorB=FF5722)](https://github.com/IndrajeetPatil/broomExtra/blob/master/README.md) |
| [![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/IndrajeetPatil/broomExtra.svg)](https://github.com/IndrajeetPatil/broomExtra) | [![Coverage Status](https://coveralls.io/repos/github/IndrajeetPatil/broomExtra/badge.svg?branch=master)](https://coveralls.io/github/IndrajeetPatil/broomExtra?branch=master) | [![Total downloads badge](https://cranlogs.r-pkg.org/badges/grand-total/broomExtra?color=blue)](https://CRAN.R-project.org/package=broomExtra) | [![Github Stars](https://img.shields.io/github/stars/IndrajeetPatil/broomExtra.svg?style=social&label=Github)](https://github.com/IndrajeetPatil/broomExtra) | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3597451.svg)](https://doi.org/10.5281/zenodo.3597451) |
-| [![Licence](https://img.shields.io/badge/licence-GPL--3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [![Codecov test coverage](https://codecov.io/gh/IndrajeetPatil/broomExtra/branch/master/graph/badge.svg)](https://codecov.io/gh/IndrajeetPatil/broomExtra?branch=master) | [![HitCount](http://hits.dwyl.io/IndrajeetPatil/broomExtra.svg)](http://hits.dwyl.io/IndrajeetPatil/broomExtra) | [![Last-changedate](https://img.shields.io/badge/last%20change-2020--09--10-yellowgreen.svg)](https://github.com/IndrajeetPatil/broomExtra/commits/master) | [![GitHub last commit](https://img.shields.io/github/last-commit/IndrajeetPatil/broomExtra.svg)](https://github.com/IndrajeetPatil/broomExtra/commits/master) |
+| [![Licence](https://img.shields.io/badge/licence-GPL--3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [![Codecov test coverage](https://codecov.io/gh/IndrajeetPatil/broomExtra/branch/master/graph/badge.svg)](https://codecov.io/gh/IndrajeetPatil/broomExtra?branch=master) | [![HitCount](http://hits.dwyl.io/IndrajeetPatil/broomExtra.svg)](http://hits.dwyl.io/IndrajeetPatil/broomExtra) | [![Last-changedate](https://img.shields.io/badge/last%20change-2020--09--14-yellowgreen.svg)](https://github.com/IndrajeetPatil/broomExtra/commits/master) | [![GitHub last commit](https://img.shields.io/github/last-commit/IndrajeetPatil/broomExtra.svg)](https://github.com/IndrajeetPatil/broomExtra/commits/master) |
| [![status](https://tinyverse.netlify.com/badge/broomExtra)](https://CRAN.R-project.org/package=broomExtra) | [![R build status](https://github.com/IndrajeetPatil/broomExtra/workflows/R-CMD-check/badge.svg)](https://github.com/IndrajeetPatil/broomExtra) | [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/broomExtra/community) | [![Project Status](http://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) | [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/IndrajeetPatil/broomExtra/issues) |
Raison d’être
@@ -51,7 +50,9 @@ Installation
To get the latest, stable `CRAN` release:
- install.packages("broomExtra")
+``` r
+install.packages("broomExtra")
+```
You can get the **development** version of the package from `GitHub`. To
see what new changes (and bug fixes) have been made to the package since
@@ -61,24 +62,30 @@ here:
If you are in hurry and want to reduce the time of installation, prefer-
- # needed package to download from GitHub repo
- install.packages("remotes")
- remotes::install_github(
- repo = "IndrajeetPatil/broomExtra", # package path on GitHub
- quick = TRUE # skips docs, demos, and vignettes
- )
+``` r
+# needed package to download from GitHub repo
+install.packages("remotes")
+remotes::install_github(
+ repo = "IndrajeetPatil/broomExtra", # package path on GitHub
+ quick = TRUE # skips docs, demos, and vignettes
+)
+```
If time is not a constraint-
- remotes::install_github(
- repo = "IndrajeetPatil/broomExtra", # package path on GitHub
- dependencies = TRUE, # installs packages which broomExtra depends on
- upgrade_dependencies = TRUE # updates any out of date dependencies
- )
+``` r
+remotes::install_github(
+ repo = "IndrajeetPatil/broomExtra", # package path on GitHub
+ dependencies = TRUE, # installs packages which broomExtra depends on
+ upgrade_dependencies = TRUE # updates any out of date dependencies
+)
+```
Otherwise, the quicker option is-
- remotes::install_github("IndrajeetPatil/broomExtra")
+``` r
+remotes::install_github("IndrajeetPatil/broomExtra")
+```
hybrid generics
===============
@@ -110,71 +117,65 @@ either from `broomExtra::tidy` or `parameters::model_parameters`.
Sometimes the method will not be available in `broom`, while it will be
in `parameters`:
- # mixor object
- set.seed(123)
- library("mixor")
- data("SmokingPrevention")
-
- # data frame must be sorted by id variable
- SmokingPrevention <- SmokingPrevention[order(SmokingPrevention$class), ]
-
- # school model
- mod_mixor <-
- mixor(
- formula = thksord ~ thkspre + cc + tv + cctv,
- data = SmokingPrevention,
- id = school, link = "logit"
- )
-
- # tidier in `broom`-family?
- broomExtra::tidy(mod_mixor)
- #> NULL
-
- # using hybrid function
- broomExtra::tidy_parameters(mod_mixor)
- #> # A tibble: 8 x 9
- #> term estimate std.error conf.low conf.high statistic df.error
- #>
- #> 1 (Intercept) 0.0882 0.313 -0.526 0.702 0.282 Inf
- #> 2 Threshold2 1.24 0.0883 1.07 1.41 14.1 Inf
- #> 3 Threshold3 2.42 0.0836 2.26 2.58 28.9 Inf
- #> 4 thkspre 0.403 0.0429 0.319 0.487 9.39 Inf
- #> 5 cc 0.924 0.371 0.196 1.65 2.49 Inf
- #> 6 tv 0.275 0.315 -0.342 0.893 0.873 Inf
- #> 7 cctv -0.466 0.406 -1.26 0.330 -1.15 Inf
- #> 8 Random.(Intercept) 0.0735 0.0495 -0.0235 0.170 1.49 Inf
- #> p.value effects
- #>
- #> 1 0.778 fixed
- #> 2 0 fixed
- #> 3 0 fixed
- #> 4 0 fixed
- #> 5 0.0128 fixed
- #> 6 0.383 fixed
- #> 7 0.251 fixed
- #> 8 0.137 random
+``` r
+# mixor object
+set.seed(123)
+library("mixor")
+data("SmokingPrevention")
+
+# data frame must be sorted by id variable
+SmokingPrevention <- SmokingPrevention[order(SmokingPrevention$class), ]
+
+# school model
+mod_mixor <-
+ mixor(
+ formula = thksord ~ thkspre + cc + tv + cctv,
+ data = SmokingPrevention,
+ id = school, link = "logit"
+ )
+
+# tidier in `broom`-family?
+broomExtra::tidy(mod_mixor)
+#> NULL
+
+# using hybrid function
+broomExtra::tidy_parameters(mod_mixor)
+#> # A tibble: 8 x 9
+#> term estimate std.error conf.low conf.high statistic df.error p.value effects
+#>
+#> 1 (Intercept) 0.0882 0.313 -0.526 0.702 0.282 Inf 0.778 fixed
+#> 2 Threshold2 1.24 0.0883 1.07 1.41 14.1 Inf 0 fixed
+#> 3 Threshold3 2.42 0.0836 2.26 2.58 28.9 Inf 0 fixed
+#> 4 thkspre 0.403 0.0429 0.319 0.487 9.39 Inf 0 fixed
+#> 5 cc 0.924 0.371 0.196 1.65 2.49 Inf 0.0128 fixed
+#> 6 tv 0.275 0.315 -0.342 0.893 0.873 Inf 0.383 fixed
+#> 7 cctv -0.466 0.406 -1.26 0.330 -1.15 Inf 0.251 fixed
+#> 8 Random.(Intercept) 0.0735 0.0495 -0.0235 0.170 1.49 Inf 0.137 random
+```
While other times, it will be the other way around:
- # model
- library(orcutt)
- set.seed(123)
- reg <- stats::lm(formula = mpg ~ wt + qsec + disp, data = mtcars)
- co <- orcutt::cochrane.orcutt(reg)
-
- # no tidier available in `parameters`
- parameters::model_parameters(co)
- #> Error in `[.data.frame`(md, , needed.vars, drop = FALSE): undefined columns selected
-
- # `tidy_parameters` still won't fail
- broomExtra::tidy_parameters(co)
- #> # A tibble: 4 x 5
- #> term estimate std.error statistic p.value
- #>
- #> 1 (Intercept) 21.8 6.63 3.29 0.00279
- #> 2 wt -4.85 1.33 -3.65 0.00112
- #> 3 qsec 0.797 0.370 2.15 0.0402
- #> 4 disp -0.00136 0.0110 -0.123 0.903
+``` r
+# model
+library(orcutt)
+set.seed(123)
+reg <- stats::lm(formula = mpg ~ wt + qsec + disp, data = mtcars)
+co <- orcutt::cochrane.orcutt(reg)
+
+# no tidier available in `parameters`
+parameters::model_parameters(co)
+#> Error in `[.data.frame`(md, , needed.vars, drop = FALSE): undefined columns selected
+
+# `tidy_parameters` still won't fail
+broomExtra::tidy_parameters(co)
+#> # A tibble: 4 x 5
+#> term estimate std.error statistic p.value
+#>
+#> 1 (Intercept) 21.8 6.63 3.29 0.00279
+#> 2 wt -4.85 1.33 -3.65 0.00112
+#> 3 qsec 0.797 0.370 2.15 0.0402
+#> 4 disp -0.00136 0.0110 -0.123 0.903
+```
These functions are robust such that they won’t
fail if the `...` contains misspecified arguments.
@@ -183,98 +184,82 @@ This makes these functions much easier to work with while writing
wrapper functions around `broomExtra::tidy` or
`parameters::model_parameters`.
- # setup
- set.seed(123)
- library(lavaan)
-
- # model specs
- HS.model <- " visual =~ x1 + x2 + x3
- textual =~ x4 + x5 + x6
- speed =~ x7 + x8 + x9 "
-
- # model
- mod_lavaan <-
- lavaan(
- HS.model,
- data = HolzingerSwineford1939,
- auto.var = TRUE,
- auto.fix.first = TRUE,
- auto.cov.lv.x = TRUE
- )
-
- # tidy method with additional arguments
- broom::tidy(mod_lavaan, exponentiate = TRUE)
- #> Error in lavaan::parameterEstimates(x, ci = conf.int, level = conf.level, : unused argument (exponentiate = TRUE)
-
- # parameters method with additional arguments
- parameters::model_parameters(mod_lavaan, exponentiate = TRUE)
- #> Error in lavaan::parameterEstimates(model, se = TRUE, level = ci, ...): unused argument (exponentiate = TRUE)
-
- # using hybrid function
- broomExtra::tidy_parameters(mod_lavaan, exponentiate = TRUE)
- #> # A tibble: 12 x 9
- #> to operator from estimate std.error conf.low conf.high p.value
- #>
- #> 1 visual =~ x1 1 0 1 1 0.
- #> 2 visual =~ x2 0.554 0.0997 0.358 0.749 2.80e- 8
- #> 3 visual =~ x3 0.729 0.109 0.516 0.943 2.31e-11
- #> 4 textual =~ x4 1 0 1 1 0.
- #> 5 textual =~ x5 1.11 0.0654 0.985 1.24 0.
- #> 6 textual =~ x6 0.926 0.0554 0.817 1.03 0.
- #> 7 speed =~ x7 1 0 1 1 0.
- #> 8 speed =~ x8 1.18 0.165 0.857 1.50 8.56e-13
- #> 9 speed =~ x9 1.08 0.151 0.785 1.38 8.40e-13
- #> 10 visual ~~ textual 0.408 0.0735 0.264 0.552 2.82e- 8
- #> 11 visual ~~ speed 0.262 0.0563 0.152 0.373 3.17e- 6
- #> 12 textual ~~ speed 0.173 0.0493 0.0768 0.270 4.35e- 4
- #> type
- #>
- #> 1 Loading
- #> 2 Loading
- #> 3 Loading
- #> 4 Loading
- #> 5 Loading
- #> 6 Loading
- #> 7 Loading
- #> 8 Loading
- #> 9 Loading
- #> 10 Correlation
- #> 11 Correlation
- #> 12 Correlation
+``` r
+# setup
+set.seed(123)
+library(lavaan)
+
+# model specs
+HS.model <- " visual =~ x1 + x2 + x3
+ textual =~ x4 + x5 + x6
+ speed =~ x7 + x8 + x9 "
+
+# model
+mod_lavaan <-
+ lavaan(
+ HS.model,
+ data = HolzingerSwineford1939,
+ auto.var = TRUE,
+ auto.fix.first = TRUE,
+ auto.cov.lv.x = TRUE
+ )
+
+# tidy method with additional arguments
+broom::tidy(mod_lavaan, exponentiate = TRUE)
+#> Error in lavaan::parameterEstimates(x, ci = conf.int, level = conf.level, : unused argument (exponentiate = TRUE)
+
+# parameters method with additional arguments
+parameters::model_parameters(mod_lavaan, exponentiate = TRUE)
+#> Error in lavaan::parameterEstimates(model, se = TRUE, level = ci, ...): unused argument (exponentiate = TRUE)
+
+# using hybrid function
+broomExtra::tidy_parameters(mod_lavaan, exponentiate = TRUE)
+#> # A tibble: 12 x 9
+#> to operator from estimate std.error conf.low conf.high p.value type
+#>
+#> 1 visual =~ x1 1 0 1 1 0. Loading
+#> 2 visual =~ x2 0.554 0.0997 0.358 0.749 2.80e- 8 Loading
+#> 3 visual =~ x3 0.729 0.109 0.516 0.943 2.31e-11 Loading
+#> 4 textual =~ x4 1 0 1 1 0. Loading
+#> 5 textual =~ x5 1.11 0.0654 0.985 1.24 0. Loading
+#> 6 textual =~ x6 0.926 0.0554 0.817 1.03 0. Loading
+#> 7 speed =~ x7 1 0 1 1 0. Loading
+#> 8 speed =~ x8 1.18 0.165 0.857 1.50 8.56e-13 Loading
+#> 9 speed =~ x9 1.08 0.151 0.785 1.38 8.40e-13 Loading
+#> 10 visual ~~ textual 0.408 0.0735 0.264 0.552 2.82e- 8 Correlation
+#> 11 visual ~~ speed 0.262 0.0563 0.152 0.373 3.17e- 6 Correlation
+#> 12 textual ~~ speed 0.173 0.0493 0.0768 0.270 4.35e- 4 Correlation
+```
Additionally, the *p*-values and confidence
intervals for regression estimates are consistently included.
- # setup
- set.seed(123)
- library(MASS)
- mod <- rlm(stack.loss ~ ., stackloss)
-
- # broom output (no p-values present)
- broomExtra::tidy(mod, conf.int = TRUE)
- #> # A tibble: 4 x 6
- #> term estimate std.error statistic conf.low conf.high
- #>
- #> 1 (Intercept) -41.0 9.81 -4.18 -60.2 -21.8
- #> 2 Air.Flow 0.829 0.111 7.46 0.611 1.05
- #> 3 Water.Temp 0.926 0.303 3.05 0.331 1.52
- #> 4 Acid.Conc. -0.128 0.129 -0.992 -0.380 0.125
-
- # using `tidy_parameters` (p-values present)
- broomExtra::tidy_parameters(mod)
- #> # A tibble: 4 x 8
- #> term estimate std.error conf.low conf.high statistic df.error
- #>
- #> 1 (Intercept) -41.0 9.81 -61.7 -20.3 -4.18 17
- #> 2 Air.Flow 0.829 0.111 0.595 1.06 7.46 17
- #> 3 Water.Temp 0.926 0.303 0.286 1.57 3.05 17
- #> 4 Acid.Conc. -0.128 0.129 -0.400 0.144 -0.992 17
- #> p.value
- #>
- #> 1 0.000624
- #> 2 0.000000933
- #> 3 0.00720
- #> 4 0.335
+``` r
+# setup
+set.seed(123)
+library(MASS)
+mod <- rlm(stack.loss ~ ., stackloss)
+
+# broom output (no p-values present)
+broomExtra::tidy(mod, conf.int = TRUE)
+#> # A tibble: 4 x 6
+#> term estimate std.error statistic conf.low conf.high
+#>
+#> 1 (Intercept) -41.0 9.81 -4.18 -60.2 -21.8
+#> 2 Air.Flow 0.829 0.111 7.46 0.611 1.05
+#> 3 Water.Temp 0.926 0.303 3.05 0.331 1.52
+#> 4 Acid.Conc. -0.128 0.129 -0.992 -0.380 0.125
+
+# using `tidy_parameters` (p-values present)
+broomExtra::tidy_parameters(mod)
+#> # A tibble: 4 x 8
+#> term estimate std.error conf.low conf.high statistic df.error p.value
+#>
+#> 1 (Intercept) -41.0 9.81 -61.7 -20.3 -4.18 17 0.000624
+#> 2 Air.Flow 0.829 0.111 0.595 1.06 7.46 17 0.000000933
+#> 3 Water.Temp 0.926 0.303 0.286 1.57 3.05 17 0.00720
+#> 4 Acid.Conc. -0.128 0.129 -0.400 0.144 -0.992 17 0.335
+```
Benefits of using `glance_performance`
--------------------------------------
@@ -283,56 +268,57 @@ Benefits of using `glance_performance`
summary either from `broom::glance` or `performance::model_performance`.
- # mixor object
- set.seed(123)
- library("mixor")
- data("SmokingPrevention")
-
- # data frame must be sorted by id variable
- SmokingPrevention <- SmokingPrevention[order(SmokingPrevention$class), ]
-
- # school model
- mod_mixor <-
- mixor(
- formula = thksord ~ thkspre + cc + tv + cctv,
- data = SmokingPrevention,
- id = school, link = "logit"
- )
-
- # glance method in `broom`-family?
- broomExtra::glance(mod_mixor)
- #> NULL
-
- # using hybrid function
- broomExtra::glance_performance(mod_mixor)
- #> # A tibble: 1 x 2
- #> aic bic
- #>
- #> 1 -2128. -2133.
+``` r
+# mixor object
+set.seed(123)
+library("mixor")
+data("SmokingPrevention")
+
+# data frame must be sorted by id variable
+SmokingPrevention <- SmokingPrevention[order(SmokingPrevention$class), ]
+
+# school model
+mod_mixor <-
+ mixor(
+ formula = thksord ~ thkspre + cc + tv + cctv,
+ data = SmokingPrevention,
+ id = school, link = "logit"
+ )
+
+# glance method in `broom`-family?
+broomExtra::glance(mod_mixor)
+#> NULL
+
+# using hybrid function
+broomExtra::glance_performance(mod_mixor)
+#> # A tibble: 1 x 2
+#> aic bic
+#>
+#> 1 -2128. -2133.
+```
Sometimes the method will be available in `broom`, but not in
`easystats`, but `glance_performance` will manage to choose the
appropriate method for you. For example-
- # model
- library(orcutt)
- set.seed(123)
- reg <- stats::lm(formula = mpg ~ wt + qsec + disp, data = mtcars)
- co <- orcutt::cochrane.orcutt(reg)
-
- # no method available in `performance`
- performance::model_performance(co)
- #> Error in UseMethod("model_performance"): no applicable method for 'model_performance' applied to an object of class "orcutt"
-
- # `glance_performance` doesn't fail
- broomExtra::glance_performance(co)
- #> # A tibble: 1 x 9
- #> r.squared adj.r.squared rho number.interaction dw.original p.value.original
- #>
- #> 1 0.799 0.777 0.268 7 1.50 0.0406
- #> dw.transformed p.value.transformed nobs
- #>
- #> 1 2.06 0.521 32
+``` r
+# model
+library(orcutt)
+set.seed(123)
+reg <- stats::lm(formula = mpg ~ wt + qsec + disp, data = mtcars)
+co <- orcutt::cochrane.orcutt(reg)
+
+# no method available in `performance`
+performance::model_performance(co)
+#> Error in UseMethod("model_performance"): no applicable method for 'model_performance' applied to an object of class "orcutt"
+
+# `glance_performance` doesn't fail
+broomExtra::glance_performance(co)
+#> # A tibble: 1 x 9
+#> r.squared adj.r.squared rho number.interaction dw.original p.value.original dw.transformed p.value.transformed nobs
+#>
+#> 1 0.799 0.777 0.268 7 1.50 0.0406 2.06 0.521 32
+```
Additionally, it will return model summary that
contains combined metrics from these two packages.
@@ -341,33 +327,32 @@ For example, some unique performance measures are present only in the
`performance` package contains (e.g., Nagelkerke’s *R*-squared, Tjur’s
*R*-squared, etc.), but not `broom` package and *vice versa*.
- # setup
- set.seed(123)
-
- # model
- model <-
- stats::glm(
- formula = am ~ wt + cyl,
- data = mtcars,
- family = binomial
- )
-
- # `broom` output
- broomExtra::glance(model)
- #> # A tibble: 1 x 8
- #> null.deviance df.null logLik AIC BIC deviance df.residual nobs
- #>
- #> 1 43.2 31 -7.37 20.7 25.1 14.7 29 32
-
- # combined output
- broomExtra::glance_performance(model)
- #> # A tibble: 1 x 14
- #> null.deviance df.null loglik aic bic deviance df.residual nobs r2.tjur
- #>
- #> 1 43.2 31 -7.37 20.7 25.1 14.7 29 32 0.705
- #> rmse logloss score.log score.spherical pcp
- #>
- #> 1 0.678 0.230 -19.0 0.116 0.858
+``` r
+# setup
+set.seed(123)
+
+# model
+model <-
+ stats::glm(
+ formula = am ~ wt + cyl,
+ data = mtcars,
+ family = binomial
+ )
+
+# `broom` output
+broomExtra::glance(model)
+#> # A tibble: 1 x 8
+#> null.deviance df.null logLik AIC BIC deviance df.residual nobs
+#>
+#> 1 43.2 31 -7.37 20.7 25.1 14.7 29 32
+
+# combined output
+broomExtra::glance_performance(model)
+#> # A tibble: 1 x 14
+#> null.deviance df.null loglik aic bic deviance df.residual nobs r2.tjur rmse logloss score.log score.spherical pcp
+#>
+#> 1 43.2 31 -7.37 20.7 25.1 14.7 29 32 0.705 0.678 0.230 -19.0 0.116 0.858
+```
generic functions
=================
@@ -393,46 +378,48 @@ tidy dataframe
Let’s get a tidy tibble back containing results from various regression
models.
- set.seed(123)
- library(lme4)
- library(ordinal)
-
- # mixed-effects models (`broom.mixed` will be used)
- lmm.mod <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
- broomExtra::tidy(x = lmm.mod, effects = "fixed")
- #> # A tibble: 2 x 5
- #> effect term estimate std.error statistic
- #>
- #> 1 fixed (Intercept) 251. 6.82 36.8
- #> 2 fixed Days 10.5 1.55 6.77
-
- # linear model (`broom` will be used)
- lm.mod <- lm(Reaction ~ Days, sleepstudy)
- broomExtra::tidy(lm.mod, conf.int = TRUE)
- #> # A tibble: 2 x 7
- #> term estimate std.error statistic p.value conf.low conf.high
- #>
- #> 1 (Intercept) 251. 6.61 38.0 2.16e-87 238. 264.
- #> 2 Days 10.5 1.24 8.45 9.89e-15 8.02 12.9
-
- # another example with `broom`
- # cumulative Link Models
- clm.mod <- clm(rating ~ temp * contact, data = wine)
- broomExtra::tidy(x = clm.mod, exponentiate = TRUE)
- #> # A tibble: 7 x 6
- #> term estimate std.error statistic p.value coef.type
- #>
- #> 1 1|2 0.244 0.545 -2.59 9.66e- 3 intercept
- #> 2 2|3 3.14 0.510 2.24 2.48e- 2 intercept
- #> 3 3|4 29.3 0.638 5.29 1.21e- 7 intercept
- #> 4 4|5 140. 0.751 6.58 4.66e-11 intercept
- #> 5 tempwarm 10.2 0.701 3.31 9.28e- 4 location
- #> 6 contactyes 3.85 0.660 2.04 4.13e- 2 location
- #> 7 tempwarm:contactyes 1.43 0.924 0.389 6.97e- 1 location
-
- # unsupported object (the function will return `NULL` in such cases)
- broomExtra::tidy(list(1, c("x", "y")))
- #> NULL
+``` r
+set.seed(123)
+library(lme4)
+library(ordinal)
+
+# mixed-effects models (`broom.mixed` will be used)
+lmm.mod <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
+broomExtra::tidy(x = lmm.mod, effects = "fixed")
+#> # A tibble: 2 x 5
+#> effect term estimate std.error statistic
+#>
+#> 1 fixed (Intercept) 251. 6.82 36.8
+#> 2 fixed Days 10.5 1.55 6.77
+
+# linear model (`broom` will be used)
+lm.mod <- lm(Reaction ~ Days, sleepstudy)
+broomExtra::tidy(lm.mod, conf.int = TRUE)
+#> # A tibble: 2 x 7
+#> term estimate std.error statistic p.value conf.low conf.high
+#>
+#> 1 (Intercept) 251. 6.61 38.0 2.16e-87 238. 264.
+#> 2 Days 10.5 1.24 8.45 9.89e-15 8.02 12.9
+
+# another example with `broom`
+# cumulative Link Models
+clm.mod <- clm(rating ~ temp * contact, data = wine)
+broomExtra::tidy(x = clm.mod, exponentiate = TRUE)
+#> # A tibble: 7 x 6
+#> term estimate std.error statistic p.value coef.type
+#>
+#> 1 1|2 0.244 0.545 -2.59 9.66e- 3 intercept
+#> 2 2|3 3.14 0.510 2.24 2.48e- 2 intercept
+#> 3 3|4 29.3 0.638 5.29 1.21e- 7 intercept
+#> 4 4|5 140. 0.751 6.58 4.66e-11 intercept
+#> 5 tempwarm 10.2 0.701 3.31 9.28e- 4 location
+#> 6 contactyes 3.85 0.660 2.04 4.13e- 2 location
+#> 7 tempwarm:contactyes 1.43 0.924 0.389 6.97e- 1 location
+
+# unsupported object (the function will return `NULL` in such cases)
+broomExtra::tidy(list(1, c("x", "y")))
+#> NULL
+```
model summaries
---------------
@@ -440,121 +427,110 @@ model summaries
Getting a `tibble` containing model summary and other performance
measures.
- set.seed(123)
- library(lme4)
- library(ordinal)
-
- # mixed-effects model
- lmm.mod <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
- broomExtra::glance(lmm.mod)
- #> # A tibble: 1 x 6
- #> sigma logLik AIC BIC REMLcrit df.residual
- #>
- #> 1 25.6 -872. 1756. 1775. 1744. 174
-
- # linear model
- lm.mod <- lm(Reaction ~ Days, sleepstudy)
- broomExtra::glance(lm.mod)
- #> # A tibble: 1 x 12
- #> r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
- #>
- #> 1 0.286 0.282 47.7 71.5 9.89e-15 1 -950. 1906. 1916.
- #> deviance df.residual nobs
- #>
- #> 1 405252. 178 180
-
- # another example with `broom`
- # cumulative Link Models
- clm.mod <- clm(rating ~ temp * contact, data = wine)
- broomExtra::glance(clm.mod)
- #> # A tibble: 1 x 6
- #> edf AIC BIC logLik df.residual nobs
- #>
- #> 1 7 187. 203. -86.4162 65 72
-
- # in case no glance method is available (`NULL` will be returned)
- broomExtra::glance(acf(lh, plot = FALSE))
- #> NULL
+``` r
+set.seed(123)
+library(lme4)
+library(ordinal)
+
+# mixed-effects model
+lmm.mod <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
+broomExtra::glance(lmm.mod)
+#> # A tibble: 1 x 6
+#> sigma logLik AIC BIC REMLcrit df.residual
+#>
+#> 1 25.6 -872. 1756. 1775. 1744. 174
+
+# linear model
+lm.mod <- lm(Reaction ~ Days, sleepstudy)
+broomExtra::glance(lm.mod)
+#> # A tibble: 1 x 12
+#> r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC deviance df.residual nobs
+#>
+#> 1 0.286 0.282 47.7 71.5 9.89e-15 1 -950. 1906. 1916. 405252. 178 180
+
+# another example with `broom`
+# cumulative Link Models
+clm.mod <- clm(rating ~ temp * contact, data = wine)
+broomExtra::glance(clm.mod)
+#> # A tibble: 1 x 6
+#> edf AIC BIC logLik df.residual nobs
+#>
+#> 1 7 187. 203. -86.4162 65 72
+
+# in case no glance method is available (`NULL` will be returned)
+broomExtra::glance(acf(lh, plot = FALSE))
+#> NULL
+```
augmented dataframe
-------------------
Getting a `tibble` by augmenting data with information from an object.
- set.seed(123)
- library(lme4)
- library(ordinal)
-
- # mixed-effects model
- lmm.mod <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
- broomExtra::augment(lmm.mod)
- #> # A tibble: 180 x 14
- #> Reaction Days Subject .fitted .resid .hat .cooksd .fixed .mu .offset
- #>
- #> 1 250. 0 308 254. -4.10 0.229 0.00496 251. 254. 0
- #> 2 259. 1 308 273. -14.6 0.170 0.0402 262. 273. 0
- #> 3 251. 2 308 293. -42.2 0.127 0.226 272. 293. 0
- #> 4 321. 3 308 313. 8.78 0.101 0.00731 283. 313. 0
- #> 5 357. 4 308 332. 24.5 0.0910 0.0506 293. 332. 0
- #> 6 415. 5 308 352. 62.7 0.0981 0.362 304. 352. 0
- #> 7 382. 6 308 372. 10.5 0.122 0.0134 314. 372. 0
- #> 8 290. 7 308 391. -101. 0.162 1.81 325. 391. 0
- #> 9 431. 8 308 411. 19.6 0.219 0.106 335. 411. 0
- #> 10 466. 9 308 431. 35.7 0.293 0.571 346. 431. 0
- #> .sqrtXwt .sqrtrwt .weights .wtres
- #>
- #> 1 1 1 1 -4.10
- #> 2 1 1 1 -14.6
- #> 3 1 1 1 -42.2
- #> 4 1 1 1 8.78
- #> 5 1 1 1 24.5
- #> 6 1 1 1 62.7
- #> 7 1 1 1 10.5
- #> 8 1 1 1 -101.
- #> 9 1 1 1 19.6
- #> 10 1 1 1 35.7
- #> # ... with 170 more rows
-
- # linear model
- lm.mod <- lm(Reaction ~ Days, sleepstudy)
- broomExtra::augment(lm.mod)
- #> # A tibble: 180 x 8
- #> Reaction Days .fitted .resid .std.resid .hat .sigma .cooksd
- #>
- #> 1 250. 0 251. -1.85 -0.0390 0.0192 47.8 0.0000149
- #> 2 259. 1 262. -3.17 -0.0669 0.0138 47.8 0.0000313
- #> 3 251. 2 272. -21.5 -0.454 0.00976 47.8 0.00101
- #> 4 321. 3 283. 38.6 0.813 0.00707 47.8 0.00235
- #> 5 357. 4 293. 63.6 1.34 0.00572 47.6 0.00514
- #> 6 415. 5 304. 111. 2.33 0.00572 47.1 0.0157
- #> 7 382. 6 314. 68.0 1.43 0.00707 47.6 0.00728
- #> 8 290. 7 325. -34.5 -0.727 0.00976 47.8 0.00261
- #> 9 431. 8 335. 95.4 2.01 0.0138 47.3 0.0284
- #> 10 466. 9 346. 121. 2.56 0.0192 47.0 0.0639
- #> # ... with 170 more rows
-
- # another example with `broom`
- # cumulative Link Models
- clm.mod <- clm(rating ~ temp * contact, data = wine)
- broomExtra::augment(x = clm.mod, newdata = wine, type.predict = "prob")
- #> # A tibble: 72 x 7
- #> response rating temp contact bottle judge .fitted
- #>
- #> 1 36 2 cold no 1 1 0.562
- #> 2 48 3 cold no 2 1 0.209
- #> 3 47 3 cold yes 3 1 0.435
- #> 4 67 4 cold yes 4 1 0.0894
- #> 5 77 4 warm no 5 1 0.190
- #> 6 60 4 warm no 6 1 0.190
- #> 7 83 5 warm yes 7 1 0.286
- #> 8 90 5 warm yes 8 1 0.286
- #> 9 17 1 cold no 1 2 0.196
- #> 10 22 2 cold no 2 2 0.562
- #> # ... with 62 more rows
-
- # in case no augment method is available (`NULL` will be returned)
- broomExtra::augment(stats::anova(stats::lm(wt ~ am, mtcars)))
- #> NULL
+``` r
+set.seed(123)
+library(lme4)
+library(ordinal)
+
+# mixed-effects model
+lmm.mod <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
+broomExtra::augment(lmm.mod)
+#> # A tibble: 180 x 14
+#> Reaction Days Subject .fitted .resid .hat .cooksd .fixed .mu .offset .sqrtXwt .sqrtrwt .weights .wtres
+#>