Methods have been written that allow glmmTMB
objects to be used with
several downstream packages that enable different forms of inference.
For some methods (Anova
and emmeans
, but not effects
at present),
set the component
argument
to "cond" (conditional, the default), "zi" (zero-inflation) or "disp" (dispersion) in order to produce results
for the corresponding part of a glmmTMB
model.
Support for emmeans also allows additional options
component = "response"
(response means taking both the cond
and
zi
components into account), and component = "cmean"
(mean of the
[possibly truncated] conditional distribution).
In particular,
car::Anova
constructs type-II and type-III Anova tables
for the fixed effect parameters of any component
the emmeans
package computes estimated marginal means (previously known as least-squares means)
for the fixed effects of any component, or predictions with type = "response"
or
type = "component"
. Note: In hurdle models,
component = "cmean"
produces means
of the truncated conditional distribution, while
component = "cond", type = "response"
produces means of the untruncated
conditional distribution.
the effects
package computes graphical tabular effect displays
(only for the fixed effects of the conditional component)
a glmmTMB model
type of test, "II"
, "III"
, 2
, or 3
. Roman numerals are equivalent to the corresponding Arabic numerals. See Anova
for details.
unused: only valid choice is "Chisq" (i.e., Wald chi-squared test)
which component of the model to test/analyze ("cond", "zi", or "disp") or, in emmeans only, "response" or "cmean" as described in Details.
variance-covariance matrix (usually extracted automatically)
OK to do ANOVA with singular models (unused) ?
include all columns of a rank-deficient model matrix?
Additional parameters that may be supported by the method.
a character vector of one or more predictors in the model in any order.
While the examples below are disabled for earlier versions of
R, they may still work; it may be necessary to refer to private
versions of methods, e.g. glmmTMB:::Anova.glmmTMB(model, ...)
.
warp.lm <- glmmTMB(breaks ~ wool * tension, data = warpbreaks)
salamander1 <- up2date(readRDS(system.file("example_files","salamander1.rds",package="glmmTMB")))
if (require(emmeans)) withAutoprint({
emmeans(warp.lm, poly ~ tension | wool)
emmeans(salamander1, ~ mined, type="response") # conditional means
emmeans(salamander1, ~ mined, component="cmean") # same as above, but re-gridded
emmeans(salamander1, ~ mined, component="zi", type="response") # zero probabilities
emmeans(salamander1, ~ mined, component="response") # response means including both components
})
#> Loading required package: emmeans
#> > emmeans(warp.lm, poly ~ tension | wool)
#> $emmeans
#> wool = A:
#> tension emmean SE df lower.CL upper.CL
#> L 44.6 3.44 47 37.6 51.5
#> M 24.0 3.44 47 17.1 30.9
#> H 24.6 3.44 47 17.6 31.5
#>
#> wool = B:
#> tension emmean SE df lower.CL upper.CL
#> L 28.2 3.44 47 21.3 35.1
#> M 28.8 3.44 47 21.9 35.7
#> H 18.8 3.44 47 11.9 25.7
#>
#> Confidence level used: 0.95
#>
#> $contrasts
#> wool = A:
#> contrast estimate SE df t.ratio p.value
#> linear -20.00 4.86 47 -4.113 0.0002
#> quadratic 21.11 8.42 47 2.507 0.0157
#>
#> wool = B:
#> contrast estimate SE df t.ratio p.value
#> linear -9.44 4.86 47 -1.942 0.0581
#> quadratic -10.56 8.42 47 -1.253 0.2163
#>
#>
#> > emmeans(salamander1, ~mined, type = "response")
#> mined rate SE df asymp.LCL asymp.UCL
#> yes 1.09 0.254 Inf 0.692 1.72
#> no 3.42 0.311 Inf 2.862 4.09
#>
#> Confidence level used: 0.95
#> Intervals are back-transformed from the log scale
#> > emmeans(salamander1, ~mined, component = "cmean")
#> mined emmean SE df asymp.LCL asymp.UCL
#> yes 1.09 0.254 Inf 0.594 1.59
#> no 3.42 0.311 Inf 2.811 4.03
#>
#> Confidence level used: 0.95
#> > emmeans(salamander1, ~mined, component = "zi", type = "response")
#> mined response SE df asymp.LCL asymp.UCL
#> yes 0.758 0.0432 Inf 0.663 0.832
#> no 0.355 0.0279 Inf 0.303 0.411
#>
#> Confidence level used: 0.95
#> Intervals are back-transformed from the logit scale
#> > emmeans(salamander1, ~mined, component = "response")
#> mined emmean SE df asymp.LCL asymp.UCL
#> yes 0.265 0.0484 Inf 0.17 0.36
#> no 2.206 0.2165 Inf 1.78 2.63
#>
#> Confidence level used: 0.95
if (getRversion() >= "3.6.0") {
if (require(car)) withAutoprint({
Anova(warp.lm,type="III")
Anova(salamander1)
Anova(salamander1, component="zi")
})
if (require(effects)) withAutoprint({
plot(allEffects(warp.lm))
plot(allEffects(salamander1))
})
}
#> Loading required package: car
#> Loading required package: carData
#> > Anova(warp.lm, type = "III")
#> Analysis of Deviance Table (Type III Wald chisquare tests)
#>
#> Response: breaks
#> Chisq Df Pr(>Chisq)
#> (Intercept) 167.9351 1 < 2.2e-16 ***
#> wool 11.2839 1 0.0007818 ***
#> tension 23.2023 2 9.155e-06 ***
#> wool:tension 9.4254 2 0.0089805 **
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> > Anova(salamander1)
#> Analysis of Deviance Table (Type II Wald chisquare tests)
#>
#> Response: count
#> Chisq Df Pr(>Chisq)
#> mined 21.522 1 3.499e-06 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> > Anova(salamander1, component = "zi")
#> Analysis of Deviance Table (Type II Wald chisquare tests)
#>
#> Response: count
#> Chisq Df Pr(>Chisq)
#> mined 43.907 1 3.444e-11 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> Loading required package: effects
#> Use the command
#> lattice::trellis.par.set(effectsTheme())
#> to customize lattice options for effects plots.
#> See ?effectsTheme for details.
#> > plot(allEffects(warp.lm))
#> > plot(allEffects(salamander1))