From ae6b05a82fe2f1777c11f06509b3ebb9d6430b7a Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 09:27:08 +0100 Subject: [PATCH 01/23] minor --- vignettes/simulate_residuals.Rmd | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/vignettes/simulate_residuals.Rmd b/vignettes/simulate_residuals.Rmd index 8d751fe87..0c968cdb0 100644 --- a/vignettes/simulate_residuals.Rmd +++ b/vignettes/simulate_residuals.Rmd @@ -3,6 +3,8 @@ title: "Checking simulated residuals" output: rmarkdown::html_vignette: toc: true + fig_width: 10.08 + fig_height: 6 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} @@ -14,14 +16,11 @@ editor_options: ```{r , include=FALSE} library(knitr) -library(performance) knitr::opts_chunk$set( dpi = 600, out.width = "100%", collapse = TRUE, comment = "#>", - fig.width = 7, - fig.height = 5, warning = FALSE, message = FALSE ) @@ -45,18 +44,17 @@ The basic workflow for simulated residual checks using `simulate_residuals()` is First, fit a model: ```{r} -library(glmmTMB) - -model <- glmmTMB( +model <- glmmTMB::glmmTMB( count ~ mined + spp + (1 | site), family = poisson, - data = Salamanders + data = glmmTMB::Salamanders ) ``` Next, simulate residuals from the model: ```{r} +library(performance) simulated_residuals <- simulate_residuals(model) simulated_residuals @@ -73,7 +71,6 @@ head(residuals(simulated_residuals)) Note that since this inherits the DHARMa class, all the methods implemented in DHARMa just work, including all the tests: ```{r} -library(DHARMa) DHARMa::testUniformity(simulated_residuals, plot = FALSE) ``` From 28a5fa7765eb9650b1a725a4ffae0e214e225aa7 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 11:58:12 +0100 Subject: [PATCH 02/23] case study vignette --- _pkgdown.yaml | 5 + vignettes/check_model_practical.Rmd | 214 +++++++++++++++++++++++++++ vignettes/images/figure_workflow.png | Bin 0 -> 83313 bytes 3 files changed, 219 insertions(+) create mode 100644 vignettes/check_model_practical.Rmd create mode 100644 vignettes/images/figure_workflow.png diff --git a/_pkgdown.yaml b/_pkgdown.yaml index 3ac6db6fc..f4efe80c1 100644 --- a/_pkgdown.yaml +++ b/_pkgdown.yaml @@ -58,3 +58,8 @@ articles: contents: - compare - r2 + + - title: Case Studies + navbar: ~ + contents: + - check_model_practical diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd new file mode 100644 index 000000000..33f817b3a --- /dev/null +++ b/vignettes/check_model_practical.Rmd @@ -0,0 +1,214 @@ +--- +title: "How to arrive at the best model fit" +output: + rmarkdown::html_vignette: + toc: true + fig_width: 11 + fig_height: 8 +tags: [r, performance] +vignette: > + \usepackage[utf8]{inputenc} + %\VignetteIndexEntry{How to arrive at the best model fit} + %\VignetteEngine{knitr::rmarkdown} +editor_options: + chunk_output_type: console +--- + +```{r , include=FALSE} +library(knitr) +knitr::opts_chunk$set( + dpi = 600, + out.width = "100%", + collapse = TRUE, + comment = "#>", + warning = FALSE, + message = FALSE +) +options(knitr.kable.NA = "") +options(digits = 2) + +pkgs <- c("DHARMa", "glmmTMB", "see", "parameters") +successfully_loaded <- vapply(pkgs, requireNamespace, FUN.VALUE = logical(1L), quietly = TRUE) +can_evaluate <- all(successfully_loaded) + +if (can_evaluate) { + knitr::opts_chunk$set(eval = TRUE) + vapply(pkgs, require, FUN.VALUE = logical(1L), quietly = TRUE, character.only = TRUE) +} else { + knitr::opts_chunk$set(eval = FALSE) +} +``` + +This vignette shows how to use the *performance* package to check the fit of a model, how to detect misspecification and how to improve your model. The basic workflow of the *performance* package can be summarized as follows: + +- fit a regression model +- check the model fit and assess model fit indices +- if necessary, fit another model that could potentially improve the fit +- compare the model fit indices and perform statistical tests to determine which model is the best fit + +![Workflow of the performance package](images/figure_workflow.png){width="100%"} + +In the following, we will demonstrate this workflow using a model with a count response variable. We will fit a Poisson regression model to the Salamanders dataset from the *glmmTMB* package. The dataset contains counts of salamanders in different sites, along with information on the number of mines and the species of salamanders. We will check the model fit and assess the model fit indices. + +Problems that may arise with count response variables are _zero inflation_ and _overdispersion_. Zero inflation occurs when there are more zeros in the data than expected under the Poisson distribution. Overdispersion occurs when the variance of the data is greater than the mean, which violates the assumption of equidispersion in the Poisson distribution. + +We will check for these problems and suggest ways to improve the model fit, i.e. if necessary, we will fit another model that could potentially improve the fit. Finally, we will compare the model fit indices and perform statistical tests to determine which model is the best fit. + +## Fit the initial model + +We start with a generalized mixed effects model, using a Poisson distribution. + +```{r} +library(performance) +model1 <- glmmTMB::glmmTMB( + count ~ mined + spp + (1 | site), + family = poisson, + data = glmmTMB::Salamanders +) +``` + +First, let us look at the summary of the model. + +```{r} +library(parameters) +model_parameters(model1) +``` + +We see a lot of statistically significant estimates here. No matter, which [philosophy](https://easystats.github.io/parameters/reference/p_function.html) you follow, our conclusions we draw from statistical models will be inaccurate if our modeling assumptions are a poor fit for the situation. Hence, checking model fit is essential. + +In *performance*, we can conducte a comprehensive visual inspection of our model fit using `check_model()`. We won't go into details of all the plots here, but you can find more information on all created diagnostic plots in the [dedicated vignette](https://easystats.github.io/performance/articles/check_model.html). + +For now, we want to focus on the _posterior predictive checks_, _dispersion and zero-inflation_ as well as the Q-Q plot (_uniformity of residuals_). + +```{r} +check_model(model1, dot_size = 1.2) +``` + +Note that unlike `plot()`, which is a base R function to create diagnostic plots, `check_model()` relies on *simulated residuals* for the Q-Q plot, which is more accurate for non-Gaussian models. See [this vignette](https://easystats.github.io/performance/articles/simulate_residuals.html) and the documentation of `simulated_residuals()` for further details. + +The above plot suggests that we may have issues with overdispersion and/or zero-inflation. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()`, which will perform statistical tests (based on simulated residuals). These tests can additionally be used beyond the visual inspection. + +```{r} +check_overdispersion(model1) + +check_zeroinflation(model1) +``` + +As we can see, our model seems to suffer both from overdispersion and zero-inflation. + +## First attemot at improving the model fit + +We can try to improve the model fit by fitting a model with zero-inflation component: + +```{r} +model2 <- glmmTMB::glmmTMB( + count ~ mined + spp + (1 | site), + ziformula = ~ mined + spp, + family = poisson, + data = glmmTMB::Salamanders +) +check_model(model2, dot_size = 1.2) +``` + +Looking at the above plots, the zero-inflation seems to be addressed properpy (see especially _posterior predictive checks_ and _uniformity of residuals_, the Q-Q plot). However, the overdispersion still could present. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()` again. + +```{r} +check_overdispersion(model2) + +check_zeroinflation(model2) +``` + +Indeed, the overdispersion is still present. + +## Second attemot at improving the model fit + +We can try to address this issue by fitting a negative binomial model instead of using a Poisson distribution. + +```{r} +model3 <- glmmTMB::glmmTMB( + count ~ mined + spp + (1 | site), + ziformula = ~ mined + spp, + family = glmmTMB::nbinom1, + data = glmmTMB::Salamanders +) +check_model(model3, dot_size = 1.2) +``` + +Now we see that the plot showing _misspecified dispersion and zero-inflation_ suggests that the overdispersion is addressed properly. Let us check again: + +```{r} +check_overdispersion(model3) + +check_zeroinflation(model3) +``` + +## Comparing model fit indices + +There are different model fit indices that can be used to compare models. For our purpose, we rely on the Akaike Information Criterion (AIC), the corrected Akaike Information Criterion (AICc), the Bayesian Information Criterion (BIC), and the Proper Scoring Rules. We can compare the models using `compare_performance()` and `plot()`. + +```{r} +result <- compare_performance( + model1, model2, model3, + metrics = c("AIC", "AICc", "BIC", "SCORE") +) +result + +plot(result) +``` + +The weighted AIC and BIC range from 0 to 1, indicating better model fit the closer the value is to 1. The AICc is a corrected version of the AIC for small sample sizes. The Proper Scoring Rules range from -Inf to 0, with higher values (i.e. closer to 0) indicating better model fit. + +The above results suggest that indeed our third model is the best fit. + +## Statistical tests for model comparison + +We can also perform statistical tests to determine which model is the best fit using `test_performance()` or `anova()`. `test_performance()` automatically selects an appropriate test based on the model family. You can also call the different tests, like `test_likelihoodratio()`, `test_bf()`, `test_wald()` or `test_vuong()` directly. + +```{r} +test_performance(model1, model2, model3) +``` + +We see, first, that `test_performance()` used the Bayes factor (based on BIC comparison) to compare the models. And second, that both the second and third model seem to be significantly better than the first model. + +Now we compare the second against the third model +```{r} +test_performance(model2, model3) + +test_likelihoodratio(model2, model3) +``` + +We see that both the Bayes factor and likelihood ratio test suggest that the third model is significantly better than the second model. + +What does this mean for our inference? + +```{r} +model_parameters(model3) +``` + +Obviously, although we might have found the best fitting model, coefficients for the _zero-inflation_ component of our model look rather spurious. We have *very* high coefficients here. We still might find a better distributional family for our model, and try `nbinom2` now. + +```{r} +model4 <- glmmTMB::glmmTMB( + count ~ mined + spp + (1 | site), + ziformula = ~ mined + spp, + family = glmmTMB::nbinom2, + data = glmmTMB::Salamanders +) +check_model(model4, dot_size = 1.2) + +check_overdispersion(model4) + +check_zeroinflation(model4) + +test_likelihoodratio(model3, model4) + +model_parameters(model4) +``` + +Based on these results, we might even go with `model4`. + +# Conclusion + +Statistics is hard. It is not just about fitting a model, but also about checking the model fit and improving the model. This also requires domain knowledge to consider whether all relevant predictors are included in the model (and whether all included predictors are relevant!). + +The *performance* package provides a comprehensive set of tools to help you with this task. We have demonstrated how to use these tools to check the fit of a model, detect misspecification, and improve the model. We have also shown how to compare the model fit indices and perform statistical tests to determine which model is the best fit. We hope this vignette has been helpful in guiding you through this process. diff --git a/vignettes/images/figure_workflow.png b/vignettes/images/figure_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..2d826c203995c78e1c85b12656810b6a972c1207 GIT binary patch literal 83313 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 literal 0 HcmV?d00001 From b66db2368019abf5c3968d9ecf9ce97609494523 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:01:51 +0100 Subject: [PATCH 03/23] spelling --- inst/WORDLIST | 2 ++ vignettes/check_model_practical.Rmd | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/inst/WORDLIST b/inst/WORDLIST index be923aed4..617ca698f 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -253,6 +253,7 @@ discriminations doi easystats et +equidispersion explicitely favour fixest @@ -284,6 +285,7 @@ mfx mhurdle mis misspecification +misspecified mlm mlogit modelfit diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index 33f817b3a..e3b5d78e2 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -76,7 +76,7 @@ model_parameters(model1) We see a lot of statistically significant estimates here. No matter, which [philosophy](https://easystats.github.io/parameters/reference/p_function.html) you follow, our conclusions we draw from statistical models will be inaccurate if our modeling assumptions are a poor fit for the situation. Hence, checking model fit is essential. -In *performance*, we can conducte a comprehensive visual inspection of our model fit using `check_model()`. We won't go into details of all the plots here, but you can find more information on all created diagnostic plots in the [dedicated vignette](https://easystats.github.io/performance/articles/check_model.html). +In *performance*, we can conduct a comprehensive visual inspection of our model fit using `check_model()`. We won't go into details of all the plots here, but you can find more information on all created diagnostic plots in the [dedicated vignette](https://easystats.github.io/performance/articles/check_model.html). For now, we want to focus on the _posterior predictive checks_, _dispersion and zero-inflation_ as well as the Q-Q plot (_uniformity of residuals_). @@ -96,7 +96,7 @@ check_zeroinflation(model1) As we can see, our model seems to suffer both from overdispersion and zero-inflation. -## First attemot at improving the model fit +## First attempt at improving the model fit We can try to improve the model fit by fitting a model with zero-inflation component: @@ -110,7 +110,7 @@ model2 <- glmmTMB::glmmTMB( check_model(model2, dot_size = 1.2) ``` -Looking at the above plots, the zero-inflation seems to be addressed properpy (see especially _posterior predictive checks_ and _uniformity of residuals_, the Q-Q plot). However, the overdispersion still could present. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()` again. +Looking at the above plots, the zero-inflation seems to be addressed properly (see especially _posterior predictive checks_ and _uniformity of residuals_, the Q-Q plot). However, the overdispersion still could present. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()` again. ```{r} check_overdispersion(model2) From ed8dc8cccc1d360daebdae02e12441951eebefe2 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:10:01 +0100 Subject: [PATCH 04/23] fixes --- DESCRIPTION | 1 + vignettes/check_model_practical.Rmd | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 68ce7de42..9060334f5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -154,3 +154,4 @@ Config/Needs/website: r-lib/pkgdown, easystats/easystatstemplate Config/rcmdcheck/ignore-inconsequential-notes: true +Remotes: easystats/see diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index e3b5d78e2..c5610715b 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -120,7 +120,7 @@ check_zeroinflation(model2) Indeed, the overdispersion is still present. -## Second attemot at improving the model fit +## Second attempt at improving the model fit We can try to address this issue by fitting a negative binomial model instead of using a Poisson distribution. From a9b154b420abea6d93fab50489aeff992a3ac2ff Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:11:22 +0100 Subject: [PATCH 05/23] no caption --- vignettes/check_model_practical.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index c5610715b..e97b9f839 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -46,7 +46,7 @@ This vignette shows how to use the *performance* package to check the fit of a m - if necessary, fit another model that could potentially improve the fit - compare the model fit indices and perform statistical tests to determine which model is the best fit -![Workflow of the performance package](images/figure_workflow.png){width="100%"} +![](images/figure_workflow.png){width="100%"} In the following, we will demonstrate this workflow using a model with a count response variable. We will fit a Poisson regression model to the Salamanders dataset from the *glmmTMB* package. The dataset contains counts of salamanders in different sites, along with information on the number of mines and the species of salamanders. We will check the model fit and assess the model fit indices. From ab48c3b40a3f6e4a7b77350d56f8775d9eb4e8f8 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:12:25 +0100 Subject: [PATCH 06/23] tweak --- vignettes/check_model_practical.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index e97b9f839..10ef9d7b6 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -3,8 +3,8 @@ title: "How to arrive at the best model fit" output: rmarkdown::html_vignette: toc: true - fig_width: 11 - fig_height: 8 + fig_width: 15 + fig_height: 15 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} From 2890c8129dc76db587a5f14aa4799ae757a9eed3 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:13:13 +0100 Subject: [PATCH 07/23] typo --- vignettes/check_model_practical.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index 10ef9d7b6..b02c20cab 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -84,7 +84,7 @@ For now, we want to focus on the _posterior predictive checks_, _dispersion and check_model(model1, dot_size = 1.2) ``` -Note that unlike `plot()`, which is a base R function to create diagnostic plots, `check_model()` relies on *simulated residuals* for the Q-Q plot, which is more accurate for non-Gaussian models. See [this vignette](https://easystats.github.io/performance/articles/simulate_residuals.html) and the documentation of `simulated_residuals()` for further details. +Note that unlike `plot()`, which is a base R function to create diagnostic plots, `check_model()` relies on *simulated residuals* for the Q-Q plot, which is more accurate for non-Gaussian models. See [this vignette](https://easystats.github.io/performance/articles/simulate_residuals.html) and the documentation of `simulate_residuals()` for further details. The above plot suggests that we may have issues with overdispersion and/or zero-inflation. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()`, which will perform statistical tests (based on simulated residuals). These tests can additionally be used beyond the visual inspection. From 21f16e4fef5216936e6e860fa7495610296aa91d Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:14:03 +0100 Subject: [PATCH 08/23] allow messages --- vignettes/check_model_practical.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index b02c20cab..30a32b1ad 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -22,7 +22,7 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>", warning = FALSE, - message = FALSE + message = TRUE ) options(knitr.kable.NA = "") options(digits = 2) From 2710289e18d87ad795d9fa1118de9b8dc56699a0 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:14:25 +0100 Subject: [PATCH 09/23] minor --- vignettes/check_model_practical.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index 30a32b1ad..2ef9af6f2 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -41,10 +41,10 @@ if (can_evaluate) { This vignette shows how to use the *performance* package to check the fit of a model, how to detect misspecification and how to improve your model. The basic workflow of the *performance* package can be summarized as follows: -- fit a regression model -- check the model fit and assess model fit indices -- if necessary, fit another model that could potentially improve the fit -- compare the model fit indices and perform statistical tests to determine which model is the best fit +- fit a regression model +- check the model fit and assess model fit indices +- if necessary, fit another model that could potentially improve the fit +- compare the model fit indices and perform statistical tests to determine which model is the best fit ![](images/figure_workflow.png){width="100%"} From 3460cb3c015d4cb3432a446185cae6458c85c8d0 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:16:55 +0100 Subject: [PATCH 10/23] resize img --- vignettes/check_model_practical.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index 2ef9af6f2..d3353ba58 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -46,7 +46,7 @@ This vignette shows how to use the *performance* package to check the fit of a m - if necessary, fit another model that could potentially improve the fit - compare the model fit indices and perform statistical tests to determine which model is the best fit -![](images/figure_workflow.png){width="100%"} +![](images/figure_workflow.png){width="75%"} In the following, we will demonstrate this workflow using a model with a count response variable. We will fit a Poisson regression model to the Salamanders dataset from the *glmmTMB* package. The dataset contains counts of salamanders in different sites, along with information on the number of mines and the species of salamanders. We will check the model fit and assess the model fit indices. From 36079584f1cc752eee2016225a1963274bf40a3f Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:40:51 +0100 Subject: [PATCH 11/23] tweak img --- vignettes/check_model_practical.Rmd | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index d3353ba58..db34c5a21 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -3,8 +3,8 @@ title: "How to arrive at the best model fit" output: rmarkdown::html_vignette: toc: true - fig_width: 15 - fig_height: 15 + fig_width: 18 + fig_height: 18 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} @@ -18,7 +18,8 @@ editor_options: library(knitr) knitr::opts_chunk$set( dpi = 600, - out.width = "100%", + out.width = "90%", + out.height = "90%", collapse = TRUE, comment = "#>", warning = FALSE, From 38da349a8f0acced49eaf765db05535742d41098 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:55:46 +0100 Subject: [PATCH 12/23] tweak img --- vignettes/check_model_practical.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index db34c5a21..b45f6afe8 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -3,8 +3,8 @@ title: "How to arrive at the best model fit" output: rmarkdown::html_vignette: toc: true - fig_width: 18 - fig_height: 18 + fig_width: 19 + fig_height: 19 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} @@ -18,8 +18,8 @@ editor_options: library(knitr) knitr::opts_chunk$set( dpi = 600, - out.width = "90%", - out.height = "90%", + out.width = "100%", + out.height = "100%", collapse = TRUE, comment = "#>", warning = FALSE, From 012a2497da3f8f50aa8b02c479c217e9b207d183 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 12:56:25 +0100 Subject: [PATCH 13/23] typo --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index b12a34e96..1ff9ab142 100644 --- a/NEWS.md +++ b/NEWS.md @@ -58,7 +58,7 @@ `performance_aic()`. * Improved plots for overdispersion-checks for negative-binomial models from - package *glmmTMB* (affects `check_overdispersion()` and `check_mnodel()`). + package *glmmTMB* (affects `check_overdispersion()` and `check_model()`). * Improved detection rates for singularity in `check_singularity()` for models from package *glmmTMB*. From bd545fa5fe91ef292fc3670169887faa8a878d03 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 13:26:34 +0100 Subject: [PATCH 14/23] test --- vignettes/check_model_practical.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index b45f6afe8..93001c488 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -3,8 +3,8 @@ title: "How to arrive at the best model fit" output: rmarkdown::html_vignette: toc: true - fig_width: 19 - fig_height: 19 + fig_width: 12 + fig_height: 12 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} @@ -17,7 +17,7 @@ editor_options: ```{r , include=FALSE} library(knitr) knitr::opts_chunk$set( - dpi = 600, + dpi = 1200, out.width = "100%", out.height = "100%", collapse = TRUE, From ee02385f5d122e16fd5596a6bd8d48482a10a207 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 13:29:02 +0100 Subject: [PATCH 15/23] fix --- vignettes/check_model_practical.Rmd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index 93001c488..0e9e1f943 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -3,8 +3,6 @@ title: "How to arrive at the best model fit" output: rmarkdown::html_vignette: toc: true - fig_width: 12 - fig_height: 12 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} @@ -17,7 +15,9 @@ editor_options: ```{r , include=FALSE} library(knitr) knitr::opts_chunk$set( - dpi = 1200, + dpi = 300, + fig.width = 7, + fig.height = 5, out.width = "100%", out.height = "100%", collapse = TRUE, @@ -81,7 +81,7 @@ In *performance*, we can conduct a comprehensive visual inspection of our model For now, we want to focus on the _posterior predictive checks_, _dispersion and zero-inflation_ as well as the Q-Q plot (_uniformity of residuals_). -```{r} +```{r fig.height=12, fig.width=10} check_model(model1, dot_size = 1.2) ``` @@ -101,7 +101,7 @@ As we can see, our model seems to suffer both from overdispersion and zero-infla We can try to improve the model fit by fitting a model with zero-inflation component: -```{r} +```{r fig.height=12, fig.width=10} model2 <- glmmTMB::glmmTMB( count ~ mined + spp + (1 | site), ziformula = ~ mined + spp, @@ -125,7 +125,7 @@ Indeed, the overdispersion is still present. We can try to address this issue by fitting a negative binomial model instead of using a Poisson distribution. -```{r} +```{r fig.height=12, fig.width=10} model3 <- glmmTMB::glmmTMB( count ~ mined + spp + (1 | site), ziformula = ~ mined + spp, @@ -188,7 +188,7 @@ model_parameters(model3) Obviously, although we might have found the best fitting model, coefficients for the _zero-inflation_ component of our model look rather spurious. We have *very* high coefficients here. We still might find a better distributional family for our model, and try `nbinom2` now. -```{r} +```{r fig.height=12, fig.width=10} model4 <- glmmTMB::glmmTMB( count ~ mined + spp + (1 | site), ziformula = ~ mined + spp, From 271f2510b5f5e936293eb98a91ddaa3b02d2057e Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 14:03:59 +0100 Subject: [PATCH 16/23] typo --- vignettes/check_model_practical.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index 0e9e1f943..fbb473210 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -111,7 +111,7 @@ model2 <- glmmTMB::glmmTMB( check_model(model2, dot_size = 1.2) ``` -Looking at the above plots, the zero-inflation seems to be addressed properly (see especially _posterior predictive checks_ and _uniformity of residuals_, the Q-Q plot). However, the overdispersion still could present. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()` again. +Looking at the above plots, the zero-inflation seems to be addressed properly (see especially _posterior predictive checks_ and _uniformity of residuals_, the Q-Q plot). However, the overdispersion still could be present. We can check for these problems using `check_overdispersion()` and `check_zeroinflation()` again. ```{r} check_overdispersion(model2) From 81bb4979804de825f78bd1b87f493951d4ed2cd1 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 14:04:48 +0100 Subject: [PATCH 17/23] wording --- vignettes/check_model_practical.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model_practical.Rmd b/vignettes/check_model_practical.Rmd index fbb473210..53ca7ab58 100644 --- a/vignettes/check_model_practical.Rmd +++ b/vignettes/check_model_practical.Rmd @@ -135,7 +135,7 @@ model3 <- glmmTMB::glmmTMB( check_model(model3, dot_size = 1.2) ``` -Now we see that the plot showing _misspecified dispersion and zero-inflation_ suggests that the overdispersion is addressed properly. Let us check again: +Now we see that the plot showing _misspecified dispersion and zero-inflation_ suggests that the overdispersion is better addressed than before. Let us check again: ```{r} check_overdispersion(model3) From 52cf7145c3073d5fb47662a163e75ee25f1a5b33 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 14:08:57 +0100 Subject: [PATCH 18/23] minor --- vignettes/simulate_residuals.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vignettes/simulate_residuals.Rmd b/vignettes/simulate_residuals.Rmd index 0c968cdb0..dd78e4352 100644 --- a/vignettes/simulate_residuals.Rmd +++ b/vignettes/simulate_residuals.Rmd @@ -3,8 +3,6 @@ title: "Checking simulated residuals" output: rmarkdown::html_vignette: toc: true - fig_width: 10.08 - fig_height: 6 tags: [r, performance] vignette: > \usepackage[utf8]{inputenc} @@ -17,7 +15,9 @@ editor_options: ```{r , include=FALSE} library(knitr) knitr::opts_chunk$set( - dpi = 600, + dpi = 300, + fig.width = 7, + fig.height = 5, out.width = "100%", collapse = TRUE, comment = "#>", @@ -95,7 +95,7 @@ The above three functions internally call `simulate_residuals()` for more comple Finally, you can even perform a visual check for the entire model, either by passing the model object directly, or the object returned from `simulate_residuals()`. -```{r, eval=can_evaluate && packageVersion("see") > "0.8.2"} +```{r fig.height=12, fig.width=10} check_model(simulated_residuals) ``` From 77a024f5bfa944bb55c3775980d13fe24a14e12a Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 14:37:08 +0100 Subject: [PATCH 19/23] minor --- vignettes/simulate_residuals.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/simulate_residuals.Rmd b/vignettes/simulate_residuals.Rmd index dd78e4352..89f826ba6 100644 --- a/vignettes/simulate_residuals.Rmd +++ b/vignettes/simulate_residuals.Rmd @@ -96,7 +96,7 @@ The above three functions internally call `simulate_residuals()` for more comple Finally, you can even perform a visual check for the entire model, either by passing the model object directly, or the object returned from `simulate_residuals()`. ```{r fig.height=12, fig.width=10} -check_model(simulated_residuals) +check_model(simulated_residuals, dot_size = 1.5) ``` The `check_model()` function is the main reason we don't want to prematurely extract the residuals in `simulate_residuals()`, because if we do then the simulated residual won't contain the model fit (`fittedModel` in the output below), so we won't be able to do all of the checks we would want to do using the model (e.g., posterior predictive checks). From 481c3845016e1bfafc9145235bc619b33d6e5a11 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 14:57:50 +0100 Subject: [PATCH 20/23] update vignette --- vignettes/check_model.Rmd | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/vignettes/check_model.Rmd b/vignettes/check_model.Rmd index e657f3089..5692c39ff 100644 --- a/vignettes/check_model.Rmd +++ b/vignettes/check_model.Rmd @@ -3,8 +3,6 @@ title: "Checking model assumption - linear models" output: rmarkdown::html_vignette: toc: true - fig_width: 10.08 - fig_height: 6 tags: [r, performance, r2] vignette: > \usepackage[utf8]{inputenc} @@ -19,11 +17,15 @@ library(knitr) library(performance) options(knitr.kable.NA = "") knitr::opts_chunk$set( - comment = ">", - message = FALSE, - warning = FALSE, + dpi = 300, + fig.width = 8, + fig.height = 10, out.width = "100%", - dpi = 450 + out.height = "100%", + comment = "#>", + collapse = TRUE, + message = FALSE, + warning = FALSE ) options(digits = 2) @@ -75,7 +77,7 @@ model_parameters(m1) There is nothing suspicious so far. Now let's start with model diagnostics. We use the `check_model()` function, which provides an overview with the most important and appropriate diagnostic plots for the model under investigation. -```{r eval=all(successfully_loaded[c("see", "ggplot2")]), fig.height=11} +```{r eval=all(successfully_loaded[c("see", "ggplot2")]), fig.height=12, fig.width=10} library(performance) check_model(m1) ``` From 0413918dfe714cb8986823fb4bcf1edf890386b2 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 17:38:31 +0100 Subject: [PATCH 21/23] img --- vignettes/check_model.Rmd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vignettes/check_model.Rmd b/vignettes/check_model.Rmd index 5692c39ff..bb800c892 100644 --- a/vignettes/check_model.Rmd +++ b/vignettes/check_model.Rmd @@ -18,10 +18,10 @@ library(performance) options(knitr.kable.NA = "") knitr::opts_chunk$set( dpi = 300, - fig.width = 8, - fig.height = 10, - out.width = "100%", - out.height = "100%", + fig.width = 7, + fig.height = 7, + out.width = "80%", + out.height = "80%", comment = "#>", collapse = TRUE, message = FALSE, @@ -77,7 +77,7 @@ model_parameters(m1) There is nothing suspicious so far. Now let's start with model diagnostics. We use the `check_model()` function, which provides an overview with the most important and appropriate diagnostic plots for the model under investigation. -```{r eval=all(successfully_loaded[c("see", "ggplot2")]), fig.height=12, fig.width=10} +```{r eval=all(successfully_loaded[c("see", "ggplot2")]), fig.height=12, fig.width=10, out.width="100%", out.height="100%"} library(performance) check_model(m1) ``` From 190caaa35983bd0789a906dcabd59af5229b720f Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 25 Mar 2024 17:39:13 +0100 Subject: [PATCH 22/23] minor --- vignettes/check_model.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/check_model.Rmd b/vignettes/check_model.Rmd index bb800c892..1bd8e6eee 100644 --- a/vignettes/check_model.Rmd +++ b/vignettes/check_model.Rmd @@ -19,7 +19,7 @@ options(knitr.kable.NA = "") knitr::opts_chunk$set( dpi = 300, fig.width = 7, - fig.height = 7, + fig.height = 6, out.width = "80%", out.height = "80%", comment = "#>", From 5dd30f2498c9cdfe8cc6bb8448e6043df86a1089 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 26 Mar 2024 11:54:23 +0100 Subject: [PATCH 23/23] base font size --- DESCRIPTION | 2 +- NEWS.md | 4 ++++ R/check_model.R | 9 +++++++++ man/check_model.Rd | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9060334f5..7ff8da559 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: performance Title: Assessment of Regression Models Performance -Version: 0.11.0 +Version: 0.11.0.1 Authors@R: c(person(given = "Daniel", family = "Lüdecke", diff --git a/NEWS.md b/NEWS.md index 1ff9ab142..9f1572292 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# performance 0.11.1 + +* `check_model()` gets a `base_size` argument, to set the base font size for plots. + # performance 0.11.0 ## New supported models diff --git a/R/check_model.R b/R/check_model.R index cf33f3eef..d075fe5cb 100644 --- a/R/check_model.R +++ b/R/check_model.R @@ -9,6 +9,7 @@ #' #' @param x A model object. #' @param dot_size,line_size Size of line and dot-geoms. +#' @param base_size Base font size for plots. #' @param panel Logical, if `TRUE`, plots are arranged as panels; else, #' single plots for each diagnostic are returned. #' @param check Character vector, indicating which checks for should be performed @@ -191,6 +192,7 @@ check_model.default <- function(x, dot_alpha = 0.8, colors = c("#3aaf85", "#1b6ca8", "#cd201f"), theme = "see::theme_lucid", + base_size = 10, detrend = TRUE, show_dots = NULL, bandwidth = "nrd", @@ -261,6 +263,7 @@ check_model.default <- function(x, attr(assumptions_data, "panel") <- panel attr(assumptions_data, "dot_size") <- dot_size attr(assumptions_data, "line_size") <- line_size + attr(assumptions_data, "base_size") <- base_size attr(assumptions_data, "check") <- check attr(assumptions_data, "alpha") <- alpha attr(assumptions_data, "dot_alpha") <- dot_alpha @@ -308,6 +311,7 @@ check_model.stanreg <- function(x, dot_alpha = 0.8, colors = c("#3aaf85", "#1b6ca8", "#cd201f"), theme = "see::theme_lucid", + base_size = 10, detrend = TRUE, show_dots = NULL, bandwidth = "nrd", @@ -324,6 +328,7 @@ check_model.stanreg <- function(x, dot_alpha = dot_alpha, colors = colors, theme = theme, + base_size = base_size, detrend = detrend, show_dots = show_dots, bandwidth = bandwidth, @@ -349,6 +354,7 @@ check_model.model_fit <- function(x, dot_alpha = 0.8, colors = c("#3aaf85", "#1b6ca8", "#cd201f"), theme = "see::theme_lucid", + base_size = 10, detrend = TRUE, show_dots = NULL, bandwidth = "nrd", @@ -366,6 +372,7 @@ check_model.model_fit <- function(x, dot_alpha = dot_alpha, colors = colors, theme = theme, + base_size = base_size, detrend = detrend, show_dots = show_dots, bandwidth = bandwidth, @@ -387,6 +394,7 @@ check_model.performance_simres <- function(x, dot_alpha = 0.8, colors = c("#3aaf85", "#1b6ca8", "#cd201f"), theme = "see::theme_lucid", + base_size = 10, detrend = TRUE, show_dots = NULL, bandwidth = "nrd", @@ -404,6 +412,7 @@ check_model.performance_simres <- function(x, dot_alpha = dot_alpha, colors = colors, theme = theme, + base_size = base_size, detrend = detrend, show_dots = show_dots, bandwidth = bandwidth, diff --git a/man/check_model.Rd b/man/check_model.Rd index d0d7e765b..3c90b67b9 100644 --- a/man/check_model.Rd +++ b/man/check_model.Rd @@ -17,6 +17,7 @@ check_model(x, ...) dot_alpha = 0.8, colors = c("#3aaf85", "#1b6ca8", "#cd201f"), theme = "see::theme_lucid", + base_size = 10, detrend = TRUE, show_dots = NULL, bandwidth = "nrd", @@ -57,6 +58,8 @@ for dots, and third color for outliers or extreme values.} \item{theme}{String, indicating the name of the plot-theme. Must be in the format \code{"package::theme_name"} (e.g. \code{"ggplot2::theme_minimal"}).} +\item{base_size}{Base font size for plots.} + \item{detrend}{Logical. Should Q-Q/P-P plots be detrended? Defaults to \code{TRUE} for linear models or when \code{residual_type = "normal"}. Defaults to \code{FALSE} for QQ plots based on simulated residuals (i.e. when