added random effect structure propto to fit multivariate random effects proportional to a known variance-covariance matrix. This feature is
EXPERIMENTAL; please post any problems at https://github.com/glmmTMB/glmmTMB/pull/1068. See vignette("covstruct")
added "nbinom12" family after Lindén and Mäntyniemi (2011)
random effects, including smooth terms with s()
, can
now be included in the dispersion model. This feature is
EXPERIMENTAL; please post any problems to the issues list
added "skewnormal" family (@psmorris) (EXPERIMENTAL: some manual adjustment of starting values may be required)
predict()
now offers type = "latent"
, which
returns the values of the latent variables (with conditional
standard deviations if se.fit = TRUE
)
now works with automatic parallelization based on the
underlying TMBad autodiff library (specify
parallel=list(..., autopar=TRUE)
in glmmTMBControl
or set options(glmmTMB.autopar = TRUE)
)
the name of the
vector of fixed-effect parameters for the dispersion
model has changed from betad
to betadisp
;
code that specifies parameter values (e.g. as part
of a start
argument or in newparams
for
simulate_new
) may need to be adjusted. (For
developers: There are similar name changes to other internal
model components, e.g. Xd
becomes Xdisp
.)
fixed bug in simulate_new
for family = "beta_family"
simulation now works for models fitted with the (scaled) t distribution (GH #1024)
vcov
works better for cases where map
is used
to fix sets of parameters equal to each other
fix printing bug for zero-inflation covariance matrices (SO 78393784)
up2date
now works for models with mapped parameters
(GH #874)
ranef()
now works properly for reduced-rank models
Pearson residuals now work for models with non-trivial dispersion components (GH #1053)
bug fixes to get_cor()
, put_cor()
utility functions
mgcv
smooths with no unpenalized components
(e.g. s(..., bs = "sos")
) now work
better calculation of df.residual
when
REML=TRUE
(#1039)=
now imports random effect machinery from the
reformulas
package rather than from lme4
the underlying parameterization of the dispersion for Gaussian models has changed from the variance to the standard deviation scale, with the following user-visible consequences:
results of fitting Gaussian models may change slightly, especially for unstable fits
stored model objects need to have their betadisp
parameters halved for consistency: use up2date(..., adjust_gauss_disp = TRUE)
parameter estimates for dispersion components will change,
e.g. from fixef(.)$disp
or confint()
for models
with dispersion components
any operations that directly handle dispersion parameters
(e.g. offset
terms for dispersion models) should be
specified on the SD rather than the variance scale
interpretation of the weights variable for
binomial-type GL(M)Ms has changed. Previously, the weights
argument was ignored for a vector- (rather than
matrix-valued) numeric response, if all observations were either 0 or 1.
Now the weights variable is multiplied by the resonse
variable to compute the number of successes (consistently with
stats::glm(., family = "binomial")
). (This change makes
it easier to use weights to specify the number of trials
per observation for simulate_new()
.)
simulate_new
gives useful warning and error
messages about unrecognized parameter names and length mismatches
(length mismatches previously gave only a warning)
lognormal-hurdle models now work (i.e., zero values
can occur in the response if ziformula
is specified)
better checking for illegal (negative or non-integer) values in response variables
experimental support for priors: see ?priors
and
vignette("priors", package = "glmmTMB")
predictions now work when weights
variables have
attributes (GH #977)
"lognormal" family available (log-Normal, parameterized by the mean and standard deviation on the data scale)
an experimental implementation of penalized splines
(and related smooth terms) is available,
based on mgcv
. See the example using s
in ?glmmTMB
.
Constructive feedback welcome at
https://github.com/glmmTMB/glmmTMB/issues/928
population-level prediction with new data no longer requires
that the variables involved in the random effects be explicitly
specified as NA
(GH #923, Russ Lenth)
the simulate
method now works for models fitted with
family=ordbetareg
(GH #942, Daniel Lüdecke)
deviance residuals are now available for some families
(built-in families from base R (see ?family
)
plus nbinom1
, nbinom2
); deviance
residuals for other families may be implemented on request.
setting option(glmmTMB_openmp_debug=TRUE)
will
produce debugging output about the number of OpenMP threads used
getME(., "b")
returns the vector of conditional modes
(BLUPs, in the case of linear mixed models)
changes related to handling rank-deficient fits:
default value of rank_check
in
glmmTMBControl
changed to "adjust" (i.e., rank-deficient
columns of fixed-effect model matrices are automatically dropped, with
a message, by default)
the include_mapped
argument of vcov
and
confint
is changed to include_nonest
,
controlling both mapped parameters and those
dropped due to rank-deficiency, and is now TRUE
by default for
vcov
model.matrix
now returns the fixed-effect model matrix
actually used in fitting (including dropping columns for
rank-deficiency)
glmmTMB
now accepts single-column matrices (e.g. as
produced by scale
as response variables (GH #937, @santoshbs)
up2date()
adds a dispersion component to family
objects where required, for compatibility when checking
stored fits across R versions
fix bug in diagnose for Tweedie, other models with 'psi' parameter (@nalimilan, GH #135)
added a doOptim
argument to fitTMB
, to return
the constructed TMB object without fitting the parameters
new (experimental) function simulate_new
, to simulate
from a formula, list of parameters, and covariate data (rather
than from a fitted object)
emmeans.glmmTMB
method adds two options
for the component
argument: "response" and "cmean",
corresponding to type = "response"
and type = "conditional"
in predict.glmmTMB
(Russ Lenth)
new covariance structure homdiag
(homogeneous diagonal;
the existing diagonal covariance structure, diag
, assumes heterogeneous
variances)
The emmeans
method for glmmTMB fits now returns infinite
"df" (i.e., normal- rather than t-based CIs and tests) for non-Gaussian
families, consistent with glm
and other packages (GH #893)
improve predict-handling of complex bases (GH #632, #845, #853)
all standard deviations are now printed in output for
models using cs()
(GH #851)
corrected conditional and response predictions for truncated distributions (GH #634, #860, #873)
ranef()
now works correctly for families
with extra parameters (Tweedie etc.) (GH #870)
glmmTMB has switched to using a different (newer, under
active development) autodifferentiation library under the hood
(from CppAD
to TMBad
). This is likely to lead to
small changes in estimates, including tipping marginally stable
computations to instability or vice versa (e.g. presence or
absence of convergence warnings, positive-definite Hessian
warnings, NaN
values of standard errors, etc.) You can revert
to using the older autodiff engine by commenting out the line
PKG_CPPFLAGS = -DTMBAD_FRAMEWORK
in src/Makevars
and reinstalling the package (make sure to delete .o/.so files
from the src
directory first if installing from the package
directory, as the Makefile doesn't recognize know that this
change requires recompilation).
glmmTMB now warns if fixed-effect model matrices are
rank deficient (i.e., perfectly collinear predictors); this
warning can be suppressed by setting
glmmTMBControl(rank_check="skip")
(rank_check = "stop"
will throw an error).
If rank_check="adjust"
, glmmTMB
will automatically drop appropriate columns from the model
matrix (Daniel B. Stouffer)
the vector of "extra" family parameters
(Tweedie power, Student-t df,
etc.) has been renamed from "thetaf" to "psi"; start
and map
arguments that set this parameter will need to
be changed. Users will need to run up2date()
when loading stored model objects from previous versions of the
package.
predict
now warns if extra (ignored) arguments are
provided in ...
Student-t response distribution is now implemented (see
t_family
)
ordered beta regression as in Kubinec (2022), for
proportion data containing exact 0 and 1 values, is now
implemented (ordbeta
)
glmmTMBControl
now has a conv_check
argument
that allows suppressing convergence warnings
(the intended use is when these warnings are irrelevant,
e.g. when running small examples for testing purposes)
row names of confint
output for random effects
parameters have changed (new format is
Std.Dev
. (term) | (grouping variable) for standard
deviations, Cor
. (term1) . (term2) | (grouping variable)
for correlations)
predict(., "zprob")
now returns 0 and
predict(., "zlink")
returns -Inf
for all observations
for models without zero-inflation (GH #798, Brenton Wiernik) [was
previously supposed to throw an error, but incorrectly returned
conditional values]
bug fixes and other improvements for diagnose
(inverted Z-score; now handles
models without random effects)
confint
now works for models with more than one
random effect
confint
works better (although not completely) for
models with mapped parameters
now provides Pearson residuals for zero-inflated and variable-dispersion models (Brenton Wiernik)
minor improvements in diagnose()
offset variables with attributes now work properly (previously threw an error; now stripped before being passed to TMB)
emmeans
methods now work when component
is non-default (GH #780, @rvlenth/@marosteg)
vcov(., full = TRUE)
is now named for models with
multiple variance components
implemented working residuals (residuals(., type =
"working")
; GH #776, @lionel68)
new option print_trivial
for the print
method
for fixed effects (fixef
objects); contributed by @d-morrison
Double-bar notation ((x+y||g)
) is now translated to a
diagonal-covariance term (diag(x+y|g)
) rather than being split
into separate random effects terms as in lme4
. This should not
change modeling results, but may change their
presentation/ordering/etc.. (This is also a bug fix, as double-bar
notation was not working in several previous versions.)
glmmTMB
now issues a warning when (1) $
is used
within formulas or (2) the data
argument is not specified (the
latter warning can be suppressed by specifying
data=NULL
).
New (experimental) function up2date
for updating
stored glmmTMB
fits that were created with an earlier
version of TMB
than the one used when glmmTMB
was
compiled to binary/installed from source
Utility functions dtruncnbinom1
,
dtruncnbinom2
, dtruncpoisson
for k-truncated
count distributions
This is an administrative release (minor revisions for CRAN).
resolved OpenMP thread-safety issues on Windows
resolved bug that caused Tweedie models to crash on Solaris
resolved problems with vignettes on Solaris (GH #721)
improved control of OpenMP threading for prediction, profiling etc.
reduced rank covariance for GLVMs implemented by M.McGillycuddy (see covstruct vignette for details)
diagnose
function to investigate potential causes of convergence problems
truncated nbinom2 family now includes a variance
component
Anova
with type="III"
now handles
component
argument correctly, more robust to trivial models
fixed a typo/omission in the type-3 Anova method that made zi Anova break in some conditions (GH #674)
fixed bugs/inconsistencies in handling of mapped parameters (GH #678)
confint
with parm="beta_"
or
parm="theta_"
now work correctly with more complex models
(e.g. including both zero inflation and random effects)
(reported by @MKie45 on Stack Overflow)
confint
works for single-parameter models and those
with a dispformula
(GH #622)
mapped (fixed) variables could give incorrect predictions (GH #644)
simulate
is more robust for truncated_nbinom1 and
truncated_nbinom2 (GH #572)
"mapped" parameters (i.e., fixed by user rather than
optimized) are now given variances/standard deviations of NA rather
than 0 in vcov(., include_mapped=TRUE)
and by extension in
summary
; hence Z-statistics and P-values will also be NA for
these parameters
row ordering has changed in confint
output data
frames (random effects parameters come last, matching the
row/column order in vcov(., full=TRUE)
)
new fast
flag for predictions decreases memory use
and computational time (only if newdata
, newparams
not specified); default in fitted()
method
improved robustness of beta-binomial fits (results of fitting such models may change slightly from previous versions)
consistent predictions between link and inverse-link (GH #696)
improved vignette titles
The emm_basis
method for glmmTMB
objects now accepts a user-specified covariance matrix (vcov.
argument)
fix documentation links for CRAN checks
the refit()
function is now re-exported (i.e., you no
longer need to load lme4
to use it)
a modelparm.glmmTMB
method is now provided (so that
multcomp::glht
should work out of the box with
glmmTMB
objects)
new sparseX
argument to specify sparse fixed-effect
model matrices for one or more components
summary
and model printing now work if
control=glmmTMBControl(optimizer=optim)
is used (GH #589)
structured covariance models now work in zero-inflation components (GH #579)
documentation of formula for variance in beta family (GH #595)
updated for R-devel changes (R 4.0.0 will set stringsAsFactors=FALSE by default)
new map
argument to glmmTMB
allows for some
parameter values to be fixed
(see ?TMB::MakeADFun
for details)
new optimizer
and
optArgs
arguments to glmmTMBControl
allow use of
optimizers other than nlminb
predict
can make population-level predictions
(i.e., setting all random effects to zero).
See ?predict.glmmTMB
for details.
beta_family
now allows zero-inflation;
new ziGamma
family (minor modification of
stats::Gamma
) allows zero-inflation
(i.e., Gamma-hurdle models)
vcov(., full=TRUE)
(and hence profiling) now work for models with dispformula=~0
Documentation fix: when family=genpois
, the
index of dispersion is known as phi^2.
Anova
now respects the component
argument (GH
#494, from @eds-slim)
predict
now works when contrasts are set on factors
in original data (GH #439, from @cvoeten)
bootMer
now works with models with Bernoulli
responses (even though simulate()
returns a two-column
matrix in this case) (GH #529, @frousseu)
better support for emmeans
applied to zero-inflation
or dispersion models (correct link functions) (Russ Lenth)
sigma(.)
now returns NA
for models with
non-trivial dispersion models (i.e. models with more than one
dispersion parameter) (raised by GH #533, from @marek-tph)
VarCorr
no longer prints residual variances for
models with dispformula=~0
the model.matrix()
and terms()
methods
for glmmTMB
objects have been slightly modified
ranef
now returns information about conditional variances (as
attributes of the individual random effects terms) by default;
this information can easily be retrieved by
as.data.frame(ranef(.))
.
coef
method now available: as in lme4
, returns
sum of fixed + random effects for each random-effects
level. (Conditional variances for coef
not yet available.)
simulate works for models with genpois family
parametric bootstrapping should work, using
bootMer
from the lme4
package as a front end.
models with multiple types of RE (e.g. ar1 and us) may have failed previously (GH #329)
predict
was not handling data-dependent predictors (e.g. poly
, spline
, scale
) correctly
profile
now works for models without random effects
The value returned from simulate
for binomial models
is now a non-standard data frame where each element contains a
two-column matrix (as in the base-R simulate
method for
binomial GLMS).
REML is now an option (GH #352). It is typically only for Gaussian response variables, but can also be useful for some non-Gaussian response variables if used with caution (i.e. simulate a test case first).
Because family functions are now available for all
families that have been implemented in the underlying TMB
code, specifying the family
argument as a raw list (rather than as a family
function, the name of a family function, or the output of such a
function) is now deprecated.
likelihood profiles (via profile
) and likelihood
profile confidence intervals (via confint(profile(.))
)
can now be computed;
confint(fitted,method="profile")
and
confint(fitted,method="uniroot")
(find CIs by using
a root-finding algorithm on the likelihood profile)
offsets are now allowed in the zero-inflation and dispersion
formulas as well as in the main (conditional-mean) formula
(if offset
is specified as a separate argument, it applies
only to the conditional mean)
zero-truncated generalized Poisson family=truncated_genpois
zero-truncated Conway-Maxwell-Poisson
family=truncated_compois
predict
now allows type
("link", "response",
"conditional", "zprob", "zlink")
built-in betar()
family for Beta regression fixed
(and name changed to beta_family()
) (GH #278)
fixed segfault in predict method when response is specified as two columns (GH #289)
fixed summary-printing bug when some random effects have covariance terms and others don't (GH #291)
fix bugs in binomial residuals and prediction (GH #307)
in predict.glmmTMB
,
the zitype
argument has been rolled into the new
type
argument: default prediction type is now
"link" instead of "response", in order to match glm()
default