knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "README-" )
This package computes model and semi partial $R^2$ with confidence limits for the linear and generalized linear mixed model (LMM and GLMM). The $R^2$ measure from @edwards2008r2 is extended to the GLMM using penalized quasi-likelihood (PQL) estimation (see @r2glmmJaeger).
The $R^2$ statistic is a well known tool that describes goodness-of-fit for a statistical model. In the linear model, $R^2$ is interpreted as the proportion of variance in the data explained by the fixed predictors and semi-partial $R^2$ provide standardized measures of effect size for subsets of fixed predictors. In the linear mixed model, numerous definitions of $R^2$ exist and interpretations vary by definition. The r2glmm package computes $R^2$ using three definitions:
Each interpretation can be used for model selection and is helpful for summarizing model goodness-of-fit. While the information criteria are useful tools for model selection, they do not quantify goodness-of-fit, making the $R^2$ statistic an excellent tool to accompany values of AIC and BIC. Additionally, in the context of mixed models, semi-partial $R^2$ and confidence limits are two useful and exclusive features of the r2glmm package.
The most up-to-date version of the r2glmm package is available on Github. To download the package from Github, after installing and loading the devtools package, run the following code from the R console:
devtools::install_github('bcjaeger/r2glmm')
Alternatively, There is a version of the package available on CRAN. To download the package from CRAN, run the following code from the R console:
install.packages('r2glmm')
The main function in this package is called r2beta. The r2beta function summarizes a mixed model by computing the model $R^2$ statistic and semi-partial $R^2$ statistics for each fixed predictor in the model. The r2glmm package computes $R^2$ using three definitions. Below we list the methods, their interpretation, and an example of their application:
library(lme4) library(nlme) library(r2glmm) library(splines) data(Orthodont) # Compute mean models with the r2beta statistic # using the Kenward-Roger approach. mer1 = lmer(distance ~ bs(age)*Sex + (1|Subject), data = Orthodont) mer2 = lmer(distance ~ age + (1|Subject), data = Orthodont) (r2.mer1 = r2beta(mer1, method = 'kr', partial = T, data = Orthodont)) (r2.mer2 = r2beta(mer2, method = 'kr', partial = T, data = Orthodont))
# m1 has a compound symmetric (CS) covariance structure. lme1 = lme(distance ~ age*Sex, ~1|Subject, data = Orthodont) # m2 is an order 1 autoregressive (AR1) model with # gender-specific residual variance estimates. lme2 = lme(distance ~ age*Sex, ~1|Subject, data=Orthodont, correlation = corAR1(form=~1|Subject), weights = varIdent(form=~1|Sex)) # Compare the models (r2m1 = r2beta(model=lme1,method='sgv',partial=FALSE)) (r2m2 = r2beta(model=lme2,method='sgv',partial=FALSE))
# Compute the R2 statistic using Nakagawa and Schielzeth's approach. (r2nsj = r2beta(mer1, method = 'nsj', partial = TRUE)) # Check the result with MuMIn's r.squaredGLMM r2nsj_mum = MuMIn::r.squaredGLMM(mer1) all.equal(r2nsj[1,'Rsq'],as.numeric(r2nsj_mum[1]), tolerance = 1e-3)
The r2glmm package can compute $R_\beta^2$ for models fitted using the glmer function from the lme4 package. Note that this method is experimental in R and values of $R_\beta^2$ sometimes exceed 1. We recommend using the SAS macro available at https://github.com/bcjaeger/R2FixedEffectsGLMM/blob/master/Glimmix_R2_V3.sas. $R_\Sigma^2$ is more stable and can be computed for models fitted using either the glmer function or the glmmPQL function from the MASS package; however, minor differences in model estimation can lead to slight variation in the values of $R_\Sigma^2$.
library(lattice) library(MASS) cbpp$period = as.numeric(cbpp$period) # using glmer (based in lme4) gm1 <- glmer( formula=cbind(incidence, size-incidence) ~ bs(period) + (1|herd), data = cbpp, family = binomial) # using glmmPQL (based on nlme) pql1 <- glmmPQL( cbind(incidence, size-incidence) ~ bs(period), random = ~ 1|herd, family = binomial, data = cbpp ) # Note minor differences in R^2_Sigma r2beta(model = gm1, method = 'sgv', data = cbpp) r2beta(model = pql1, method = 'sgv', data = cbpp)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.