The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
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 Edwards et al. (2008) is extended to the GLMM using penalized quasi-likelihood (PQL) estimation (see Jaeger et al. (2016)).
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:
::install_github('bcjaeger/r2glmm') devtools
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)
#> Loading required package: Matrix
library(nlme)
#>
#> Attaching package: 'nlme'
#> The following object is masked from 'package:lme4':
#>
#> lmList
library(r2glmm)
library(splines)
data(Orthodont)
# Compute mean models with the r2beta statistic
# using the Kenward-Roger approach.
= lmer(distance ~ bs(age)*Sex + (1|Subject), data = Orthodont)
mer1 = lmer(distance ~ age + (1|Subject), data = Orthodont)
mer2
r2.mer1 = r2beta(mer1, method = 'kr', partial = T, data = Orthodont))
(#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.626 0.734 0.527
#> 2 bs(age) 0.586 0.702 0.465
#> 4 bs(age):Sex 0.086 0.256 0.021
#> 3 Sex 0.072 0.260 0.001
r2.mer2 = r2beta(mer2, method = 'kr', partial = T, data = Orthodont))
(#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.589 0.698 0.468
#> 2 age 0.589 0.698 0.468
# m1 has a compound symmetric (CS) covariance structure.
= lme(distance ~ age*Sex, ~1|Subject, data = Orthodont)
lme1
# m2 is an order 1 autoregressive (AR1) model with
# gender-specific residual variance estimates.
= lme(distance ~ age*Sex, ~1|Subject, data=Orthodont,
lme2 correlation = corAR1(form=~1|Subject),
weights = varIdent(form=~1|Sex))
# Compare the models
r2m1 = r2beta(model=lme1,method='sgv',partial=FALSE))
(#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.559 0.669 0.447
r2m2 = r2beta(model=lme2,method='sgv',partial=FALSE))
(#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.603 0.703 0.498
# Compute the R2 statistic using Nakagawa and Schielzeth's approach.
r2nsj = r2beta(mer1, method = 'nsj', partial = TRUE))
(#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.410 0.551 0.305
#> 2 bs(age) 0.263 0.409 0.149
#> 3 Sex 0.032 0.126 0.000
#> 4 bs(age):Sex 0.024 0.134 0.005
# Check the result with MuMIn's r.squaredGLMM
= MuMIn::r.squaredGLMM(mer1)
r2nsj_mum #> Registered S3 method overwritten by 'MuMIn':
#> method from
#> nobs.multinom broom
all.equal(r2nsj[1,'Rsq'],as.numeric(r2nsj_mum[1]), tolerance = 1e-3)
#> [1] TRUE
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)
$period = as.numeric(cbpp$period)
cbpp
# using glmer (based in lme4)
<- glmer(
gm1 formula=cbind(incidence, size-incidence) ~ bs(period) + (1|herd),
data = cbpp, family = binomial)
# using glmmPQL (based on nlme)
<- glmmPQL(
pql1 cbind(incidence, size-incidence) ~ bs(period),
random = ~ 1|herd, family = binomial, data = cbpp
)#> iteration 1
#> iteration 2
#> iteration 3
#> iteration 4
# Note minor differences in R^2_Sigma
r2beta(model = gm1, method = 'sgv', data = cbpp)
#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.24 0.476 0.091
#> 2 bs(period) 0.24 0.476 0.091
r2beta(model = pql1, method = 'sgv', data = cbpp)
#> Effect Rsq upper.CL lower.CL
#> 1 Model 0.22 0.458 0.077
#> 2 bs(period) 0.22 0.458 0.077
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.