Fit linear mixed-effects models using restricted (or residual) maximum likelihood (REML) and with generalized inverse matrices to specify covariance structures for random effects. In particular, the package is suited to fit quantitative genetic mixed models, often referred to as 'animal models'. Implements the average information algorithm as the main tool to maximize the restricted log-likelihood, but with other algorithms available.
R package for mixed-effects model REML incorporating Generalized Inverses (so, with some mental gymnastics: GREMLIN).
master branch is the most recent production version (often the same as what is available from the R CRAN mirrors)
devel branch is a preview of the next release which should be functional and error/bug free, but proceed with caution
install.packages("gremlin")
then select your favorite CRAN mirror
remotes package https://github.com/r-lib/remotes:
# Install `master` branch
remotes::install_github("matthewwolak/gremlin")
# Install `devel` branch
remotes::install_github("matthewwolak/gremlin", ref = "devel")
library(gremlin)
library(nadiv) #<-- needed for creating inverse relatedness matrices
# Add unique term for including individual effects of additive and dominance
warcolak$IDD <- warcolak$ID
# Create generalized inverse matrices
Ainv <- makeAinv(warcolak[, 1:3])$Ainv
Dinv <- makeD(warcolak[, 1:3])$Dinv
# Basic model structure is as follows:
## Fixed effects of sex
## ID = autosomal additive genetic variance term
## IDD = autosomal dominance genetic variance term
grAD <- gremlin(trait1 ~ sex-1,
random = ~ ID + IDD,
ginverse = list(ID = Ainv, IDD = Dinv),
data = warcolak)
# Summary
nrow(warcolak)
summary(grAD)
# Calculate proportions of phenotypic variances (and Std. Error)
deltaSE(h2 ~ V1 / (V1 + V2 + V3), grAD)
deltaSE(d2 ~ V2 / (V1 + V2 + V3), grAD)
## Do this 2 alternative ways - both use `update()`:
### Either fix dominance variance to *almost* zero
grA_Dfxd <- update(grAD, Gstart = list(0.1, 1e-8), Gcon = list("P", "F"))
### Or drop dominance variance from the model
grA <- update(grAD, random = ~ ID)
## Compare log-likelihoods
logLik(grA_Dfxd)
logLik(grA)
## Do the Hypothesis test:
anova(grA, grAD)