summary() returns a compact summary of fixed-effect estimates,
response-scale distributional, scale, shape, random-effect SD, correlation,
and fitted random-effect covariance quantities when they are present.
The covariance component reports currently fitted registry-backed rows and
fitted bivariate phylogenetic covariance rows, including q=2 mean-mean and
q=4 endpoint rows where present.
The derived component reports simple point-estimate variance ratios –
total_variance_share for a Gaussian random-intercept mu component and
phylo_total_variance_share for a phylogenetic mu component – when the
ingredients are unambiguous. Both divide by the TOTAL variance (every mu
random-effect variance plus the residual variance), which is a different
denominator from the icc()/repeatability() accessors (focal component
variance over that component plus the residual only); see
?heritability and docs/design/259-heritability-icc-repeatability.md
for the distinction. Both rows are computed only for Gaussian fits with an
identity-link mean, where the latent, expected-data, and observed-data
scales of de Villemereuil, Schielzeth, Nakagawa & Morrissey (2016,
Genetics 204:1281-1294) coincide, so there is no separate latent- or
liability-scale value to distinguish. residual_variance is sigma^2
when sigma's fixed part reduces to a single log-link intercept; when
sigma additionally carries an ordinary random intercept, or a
phylogenetic random intercept with a unit-diagonal correlation (the
default phylo(...) route), residual_variance is instead the marginal
residual variance exp(2*b0 + 2*sum_k(omega_k^2)) – E[sigma^2], not the
squared median exp(2*b0) – where omega_k are the working-scale
(log-SD) standard deviations of those effects. A random slope on sigma,
a structured sigma effect without a verified unit-diagonal correlation
(measured on the rows the design uses), or a fit that carries a sigma
random effect while the log(sigma) soft clamp bent the assembled
predictor for at least one observation (clamp_limited; a clamp-active
sigma ~ 1 fit still returns its constant clamped scale), has no
closed-form marginal residual variance here and is
refused (a residual_variance.message attribute on the empty result names
the reason, and is also shown under the (empty) derived table when
printed); see
docs/design/275-repeatability-scale-and-residual-variance.md. Derived
confidence intervals are marked as unavailable until a nonlinear interval
method is implemented.
The derived table's residual_sd column is sqrt(residual_variance) –
i.e. sqrt(E[sigma^2]) = exp(b0 + sum_k(omega_k^2)) – and this is a
DIFFERENT quantity from the sigma row in the parameters component,
which is always the conditional/median scale exp(b0). The two coincide
only when sigma carries no random effect; when it does, residual_sd is
larger (e.g. 1.0144 vs a sigma row of 0.7599 on one fixture), and both
are labelled scale = "response" because both genuinely are on the
response scale – they are not alternative scales of the same quantity,
they are two different quantities.
When TMB::sdreport() succeeds, direct response-scale parameter rows also
include delta-method standard errors; descriptive fitted ranges and derived
variance ratios do not.
Confidence intervals are opt-in: fast Wald intervals are available for fixed
effects and direct response-scale parameter rows, and slower
profile-likelihood intervals are available for selected direct profile
targets. Profile summaries keep Wald intervals for fixed effects unless
fixed-effect profile targets are selected. Interval-aware tables include
conf.status so rows without intervals can say whether an interval was not
requested, needs newdata, is ready but unselected, or is currently
unavailable. Use summary(fit, conf.int = TRUE) for fixed-effect and direct
parameter Wald confidence intervals, and use method = "profile" with
ci_parm for direct response-scale targets such as sigma, rho12, or a
random-effect SD. Correlation Wald intervals use the fitted TMB
correlation-link scale, equivalent to a guarded Fisher z/atanh transform,
before returning lower and upper bounds on the correlation scale.
Arguments
- object
A
drmTMBfit.- conf.int
Logical; include confidence intervals when
TRUE.- level
Confidence level for intervals.
- method
Interval method used when
conf.int = TRUE:"wald"for fast direct intervals or"profile"for profile-likelihood intervals on selected direct targets.summary()does not run bootstrap intervals yet; useconfint(..., method = "bootstrap")for the current direct-target bootstrap route.- ci_parm
Optional character or integer vector selecting confidence interval targets. For
method = "wald"andmethod = "profile", targets use theprofile_targets()namespace, such as"sigma","rho12","sd:mu:(1 | id)", or"cor:mu:cor((Intercept),x | id)".NULLselects all direct Wald-ready targets for Wald intervals and currently ready direct non-fixed targets for profile intervals. This keeps large profile runs focused on scale, variance-component, and correlation rows unless fixed-effect profile targets are requested explicitly.- trace
Logical; passed to
TMB::tmbprofile()for profile intervals.- profile_precision
Profile-control shortcut used with
method = "profile"."default"leavesTMB::tmbprofile()controls unchanged, while"fast"suppliesystep = 0.5andytol = 2unless the caller supplies those controls in....- ...
Additional arguments passed to
TMB::tmbprofile()whenconf.int = TRUEandmethod = "profile".
See also
The tier definitions and per-cell evidence behind these interval
targets, including random-effect standard-deviation rows, are curated in
vignette("capability-and-limits", package = "drmTMB"): summary()
computes intervals generically for any target, and the tier a given cell
belongs to is a documentation-level curation, not a runtime guard.
The optional emmeans package can compute estimated marginal means
from supported fixed-effect drmTMB fits using the package registration
installed at load time.
Examples
dat <- data.frame(y = c(0.2, 0.5, 1.1, 1.4), x = c(-1, 0, 1, 2))
fit <- drmTMB(bf(y ~ x, sigma ~ 1), data = dat)
summary(fit)
#> <summary.drmTMB>
#> estimator: ML
#> estimate std_error
#> mu:(Intercept) 0.590000 0.03674235
#> mu:x 0.420000 0.03000000
#> sigma:(Intercept) -2.701839 0.35355327
#> Distributional, random-effect, scale, and correlation parameters:
#> component dpar term estimate std_error scale
#> sigma distributional-scale sigma (constant) 0.06708204 0.02371707 response
#> logLik: 5.132
#> convergence: 0
summary(fit, conf.int = TRUE)
#> <summary.drmTMB>
#> estimator: ML
#> confidence intervals: wald, level = 0.95
#> estimate std_error conf.low conf.high conf.level
#> mu:(Intercept) 0.590000 0.03674235 0.5179863 0.6620137 0.95
#> mu:x 0.420000 0.03000000 0.3612011 0.4787989 0.95
#> sigma:(Intercept) -2.701839 0.35355327 -3.3947906 -2.0088873 0.95
#> conf.method conf.status profile.boundary profile.message
#> mu:(Intercept) wald wald NA <NA>
#> mu:x wald wald NA <NA>
#> sigma:(Intercept) wald wald NA <NA>
#> Distributional, random-effect, scale, and correlation parameters:
#> component dpar term estimate std_error scale
#> sigma distributional-scale sigma (constant) 0.06708204 0.02371707 response
#> conf.low conf.high conf.status
#> sigma 0.03354758 0.1341379 wald
#> logLik: 5.132
#> convergence: 0
summary(
fit,
conf.int = TRUE,
method = "profile",
ci_parm = "sigma",
profile_precision = "fast"
)
#> <summary.drmTMB>
#> estimator: ML
#> confidence intervals: profile, level = 0.95
#> estimate std_error conf.low conf.high conf.level
#> mu:(Intercept) 0.590000 0.03674235 0.5179863 0.6620137 0.95
#> mu:x 0.420000 0.03000000 0.3612011 0.4787989 0.95
#> sigma:(Intercept) -2.701839 0.35355327 -3.3947906 -2.0088873 0.95
#> conf.method conf.status profile.boundary profile.message
#> mu:(Intercept) wald wald NA <NA>
#> mu:x wald wald NA <NA>
#> sigma:(Intercept) wald wald NA <NA>
#> Distributional, random-effect, scale, and correlation parameters:
#> component dpar term estimate std_error scale
#> sigma distributional-scale sigma (constant) 0.06708204 0.02371707 response
#> conf.low conf.high
#> sigma 0.03817676 0.1644424
#> logLik: 5.132
#> convergence: 0
if (requireNamespace("emmeans", quietly = TRUE)) {
emmeans::emmeans(fit, specs = "x", at = list(x = c(-1, 0, 1)))
}
#> x emmean SE df asymp.LCL asymp.UCL
#> -1 0.17 0.0561 Inf 0.060 0.280
#> 0 0.59 0.0367 Inf 0.518 0.662
#> 1 1.01 0.0367 Inf 0.938 1.082
#>
#> Confidence level used: 0.95