--- title: "Can I fit and report this model?" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Can I fit and report this model?} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>") ``` Use this page before putting a fitted `drmTMB` model in a manuscript. A successful fit is not, by itself, permission to report its point estimate or interval; each route below answers those questions separately and names an exact fallback.
Terms used on this page `mu` is the **location** parameter: the family-specific centre of the response. `sigma` is **scale**: residual variability. `nu` is **shape**: a feature beyond location and scale in families such as Student-t. **Coscale** includes residual correlation `rho12`, the association left between two responses after their locations and scales are modelled. `sd(group)` is among-group random-effect variation, not residual `sigma`. `phylo()` and `spatial()` specify phylogenetic and coordinate-structured random effects. `meta_V(V = V)` supplies known sampling covariance; `meta_known_V(V = V)` is its deprecated compatibility alias. This page does not use `tau`, because it is not a general drmTMB parameter name.
```{r capability-ledger-summary, echo = FALSE, results = "asis"} cat(readLines("includes/capability-ledger-summary.md", warn = FALSE), sep = "\n") ``` ## Before reporting Apply the page's evidence boundary literally: - An inference-ready exact scope permits the point estimate and only the specifically named interval. - A recovery-only scope permits the point estimate, but not a calibrated- interval claim. - A diagnostic-only scope is for feasibility or debugging, not a scientific estimate. - An unsupported scope should not be fitted; use the named fallback. Before copying a result, run `check_drm(fit)`. Check convergence, the fixed- effect gradient, and Hessian diagnostics; then inspect `conf.status`, `profile.boundary`, and any failed bootstrap refits for the interval you plan to report. A printed interval is not permission to ignore a boundary or failed refit warning. ## Evidence and exact tested scopes The sections below retain the technical evidence behind the reader summary. They use internal evidence tiers, fit labels, and campaign details only to state the exact boundary of a claim; they do not change a cell's status. ### Capability tiers, defined once The historical ledger uses the following labels. Reporting permission is not monotone in that legacy order; use the separate point and interval answers above. 1. **Supported (legacy ledger label).** This historical label predates the current separation of fit maturity from inference maturity. It does not, by itself, authorize an interval: use the reader-facing point and named- interval permissions above. Census rows carrying this label are point-trustworthy in their exact scopes, with interval coverage still planned. 2. **Inference-ready with caveats.** The confidence/compatibility interval has been coverage-checked by simulation and holds in a named domain. You can report the point estimate and interval together with the stated limits. 3. **Interval-feasible.** A real standard-error or interval method is publicly available and passes fit-specific numerical checks, but route-specific coverage has not yet been established. Use it experimentally and retain the warning in interpretation; this is a capability, not a block. 4. **Point-fit recovery.** The point estimate has been checked against a known simulated truth and recovers it. The interval has not been coverage-checked and should be treated as provisional: report the point estimate, and treat any interval on the same row as a plausible range rather than a calibrated one. 5. **Diagnostic-only.** A deterministic or single-smoke fit verifies that the route is wired to the requested parameter and that its extractors work, but no retained-denominator seed ladder supports recovery. Treat the estimate as a debugging or feasibility result, not as a recovery-backed scientific estimate. **Not available / rejected by design** is outside the capability ladder: `drmTMB` refuses to fit the request outright. Some of these routes are planned for a later release; some are out of scope for the package's current design. Either way, fitting it anyway is not an option -- use the alternative named below each entry. The generated census preserves historical statuses while their rows are audited against this ladder. Read the evidence and caveat columns when a legacy `supported` label conflicts with an interval or coverage note; the stricter meaning above is the forward definition. ### Historical capability skim (technical evidence) This historical skim records the technical routes described below. It is not a current census: use the generated reader summary above for current counts and reporting boundaries. **Historical ledger order:** supported > inference-ready with caveats > interval-feasible > point-fit recovery > diagnostic-only. This order is kept for provenance, not as reporting permission; the separate point and interval answers above are authoritative. ::: {.table-responsive} | Family / route | Main dpars | Ordinary RE (`mu`) | Structured RE | Highest model-surface evidence | | --- | --- | --- | --- | --- | | `gaussian` | `mu`, `sigma` | intercept + independent slope | `phylo` / `spatial` / `animal` / `relmat` (scoped) | supported (exact ordinary-RE cells) | | `biv_gaussian` | `mu1`, `mu2`, `sigma1`, `sigma2`, `rho12` | matching labelled intercepts / slopes (scoped) | matching structured q2+ (scoped) | supported (exact ordinary-RE cells) | | `student` | `mu`, `sigma`, `nu` | `mu` intercept + slope | limited spatial / phylo-`nu` gates | interval-feasible | | `lognormal` | `mu`, `sigma` | `mu` + `sigma` intercept | limited `phylo` / `relmat` on `mu` | inference-ready with caveats (`sigma` RE) | | `gamma` | `mu`, `sigma` | `mu` + `sigma` intercept | limited `phylo` / `relmat` | inference-ready with caveats (`sigma` RE) | | `poisson` / `nbinom2` | `mu`, `sigma` (NB2) | `mu` intercept + slope; NB2 `sigma` intercept | q1 structured `mu` (scoped) | inference-ready with caveats (unstructured) | | `binomial` | `mu` | `mu` intercept + slope | not generally available | inference-ready with caveats under ML; REML diagnostic-only | | `beta` / `beta_binomial` / `zero_one_beta` | family-specific `mu`/`sigma`/(atoms) | ordinary `mu` gates; atom gates scoped | mostly unavailable / recovery exceptions | inference-ready with caveats (scoped) | | `tweedie` / `skew_normal` / `cumulative_logit` | family-specific | ordinary `mu` intercept + slope | mostly unavailable | inference-ready with caveats (scoped) | | zero-inflated / hurdle / truncated counts | `mu`, `sigma`, `zi`/`hu` | limited diagnostic or recovery gates | mostly unavailable | interval-feasible or recovery-only | ::: **How to read the last column.** "Highest evidence" is the best tier present for that route on the model surface, not a blanket family claim. Interval feasibility means a public interval method exists for some cells; it does not imply coverage. For current counts, open the **Technical ledger snapshot** above; the long caveat table stays on this page. ### Detailed route evidence ::: {.table-responsive} | Model / effect | Tier | What you can trust | | --- | --- | --- | | Frozen-margin latent-normal association -- all admitted pair classes, plus the Bernoulli x ordinary-NB2 fixed-effect association formula | Interval-feasible | Alpha-scale `vcov()` and Wald `confint()`, plus derived eta standard errors and transformed pointwise intervals, when fit-specific Godambe diagnostics pass; coverage is uncalibrated outside the next row and the method warns accordingly | | Frozen-margin literal-Bernoulli x ordinary-NB2 intercept association | Inference-ready with caveats | Alpha and derived eta uncertainty in the retained high-information `n = 480` or `960` domain; lower-information fits warn and fail closed if covariance diagnostics do not pass | | Census-supported ordinary Gaussian `mu` random effects and matching bivariate-Gaussian `mu1`/`mu2` intercepts | Point-trustworthy (census "supported", coverage planned) | Point estimate for the exact supported rows; their intervals are not yet coverage-verified | | Gaussian `mu` q1 intercept -- `phylo()`, `spatial()`, `relmat()` | Inference-ready | Point estimate and the default location-axis bias-corrected, small-sample-t Wald interval; coverage is mildly conservative in the tested campaigns | | Gaussian `sigma` q1 one-slope -- `phylo()`, `animal()`, `relmat()` | Inference-ready | Point estimate and raw uncorrected log-SD Wald-z interval; profile is diagnostic-only at `g = 8` | | Bivariate Gaussian slope-only `mu1:x`/`mu2:x` q2 mean-mean -- `phylo()`, `relmat()` | Inference-ready (default-corrected channel only) | Point estimate and interval from plain `confint(fit)`; intercept-only and explicitly uncorrected Wald intervals are not promoted by this evidence | | binomial / Poisson / beta / nbinom2 unstructured `mu` | Inference-ready | Point estimate and Wald interval in the tested designs (`n = 50`, `150`, or `500`); this is not a universal sample-size threshold | | nbinom2 unstructured location-scale (`mu` and `sigma ~ x`) | Inference-ready | Point estimate and Wald interval on both formulas | | beta unstructured location-scale, interior proportions | Inference-ready | Point estimate and Wald interval; exact 0 or 1 needs `zero_one_beta()` instead | | Ordinary independent `mu` random slope `(0 + x \| id)` -- binomial, skew-normal, Tweedie, zero-one-beta | Inference-ready with caveats | Profile interval for the natural-scale slope SD under ML only, not `supported`, with no Wald or point-bias claim. The tested floor differs by family, so do not generalize one number: skew-normal / Tweedie / zero-one-beta at `M >= 16` (true SD 0.50, ML-Laplace) and binomial at `M >= 32` (true SD 0.6, ML-Laplace). Zero-one-beta is generator-qualified (see the caveat below) | | Binomial ordinary `mu` random intercept or independent slope with `REML = TRUE` | Diagnostic-only | The random-effect SD agrees with the overlapping `glmmTMB(REML = TRUE)` route in deterministic Bernoulli and grouped-binomial checks, and drmTMB's uncertainty calculation is finite. Use this only to compare estimator behaviour; it is not recovery- or coverage-backed reporting permission. Fixed-only, multiple-term, correlated, labelled, structured, and missing-response binomial REML routes are unavailable | | Cumulative-logit ordinary `mu` random slope evaluated with internal AGHQ plus a Cox-Reid adjustment | Internal evidence only; no public fit/report route | The retained campaign is technical evidence about an internal estimator. `drmTMB()` does not expose that estimator, so the campaign does not authorize a cumulative-logit interval or scientific report from a public fitted object. Use the public ML-Laplace route only at its separately documented evidence tier | | Gamma `sigma` ordinary random intercept `(1 \| id)` | Inference-ready with caveats | ML-Laplace profile interval only for the exact iid, uncentred coverage fixture (true SD 0.40, 12 observations/group, `M = 32` or `64`); `M = 16` is borderline and `M = 8` is excluded | | Poisson / nbinom2 structured `mu` q1 -- `phylo()`, `spatial()`, `animal()`, `relmat()` | Recovery-only | Point estimate only | | nbinom2 structured `sigma` -- `phylo()`, `spatial()`, `animal()`, `relmat()` | Recovery-only | Point estimate only; scale-targeting bug fixed in 0.4.0 | | Row-specific recovery slices: beta `animal()` on `mu`/`sigma`, Student-t `mu ~ spatial(1 + x | ...)`, and Gamma `mu ~ relmat()` | Recovery-only | Point estimate only; no interval or coverage promotion | | Bivariate Gaussian spatial q2 location-intercept REML -- matching labelled `spatial(1 | p | site, coords = coords)` in `mu1` and `mu2` | Recovery-only | Point estimates for both structured SDs and their latent correlation; requires intercept-only `sigma1`, `sigma2`, and `rho12`, complete pairs, unit weights, no known `meta_V()`, and no additional ordinary random, direct-SD, or `corpair()` layer; no interval or coverage promotion | | Bivariate Gaussian supplied-`K` relmat q2 location-intercept REML -- matching labelled `relmat(1 | p | id, K = K)` in `mu1` and `mu2` | Recovery-only (`point_fit_recovery`) | Point estimates for both structured SDs and their latent relatedness correlation; requires the same named `K`, group ordering, and label in both formulas, intercept-only `sigma1`, `sigma2`, and `rho12`, complete pairs, unit weights, and no additional random-effect, scale-side, `meta_V()`, direct-SD, or `corpair()` layer; no interval or coverage promotion | | Row-specific single-smoke slices: ordinal `mu ~ phylo()`, truncated-nbinom2 `hu ~ relmat()`, Student-t `nu ~ phylo()`, Student-t intercept-only `mu ~ spatial(1 | ...)`, Poisson slope-only `mu ~ spatial(0 + x | ...)`, Poisson labelled-scalar `mu ~ spatial()`, Poisson `mu ~ spatial(1 | ...) + (1 | id)`, Poisson `zi ~ spatial()`, fixed-`zi` Poisson `mu ~ spatial()`, and fixed-`zi` NB2 `mu ~ spatial()` | Diagnostic-only | Use only to confirm fit/extractor feasibility; no recovery, interval, or coverage claim | | Structured effects for lognormal, skew-normal, and Tweedie; zero-one-beta routes outside the exact q1 gates | Not generally available | Zero-one-beta has point-recovery q1 intercept gates on `mu` and `sigma` for `phylo()`, `animal()`, `relmat()`, `spatial()`, and `phylo_interaction()`, plus selected q1 `zoi` and `coi` gates. Its `sigma`-`relmat()` and `sigma`-`spatial()` profile targets are interval-feasible, not coverage-calibrated. For other families or structures, use a named admitted route or fixed effects | | Gaussian pure-`mu` univariate REML -- `spatial()`, `animal()`, `relmat()` | Inference-ready with caveats | Unlabelled intercept or independent intercept plus one numeric slope, with `sigma ~ 1`; report a direct structured-SD profile interval only inside the tested discrete domains below | | REML outside the admitted Gaussian routes and ordinary binomial `mu` intercept/slope diagnostic | Not available (rejected by design) | Use `REML = FALSE` (maximum likelihood). In particular, fixed-only and structured binomial REML are unavailable | | `q4`/`q6`/`q8`/`q12` covariance interval promotion; derived-correlation intervals | Not available (planned) | Use the fitted point estimate; try `profile_targets()` for a direct target | ::: The rest of this page expands each row with the caveat that changes how you should read it. ### Tier 1: inference-ready ### Gaussian structured random effects: selected anchor cells Selected structured Gaussian-family random-effect routes are inference-ready within their recorded scopes. The ML model-surface anchors include univariate Gaussian `mu` or `sigma` formulas at q1 and bivariate-Gaussian slope-only `mu1:x`/`mu2:x` q2 mean-mean blocks. The same evidence record also includes the Arc 1a REML estimator routes for pure-`mu` univariate `spatial()`, `animal()`, and `relmat()` routes: - q1 mean-intercept rows -- `phylo()`, `spatial()`, `relmat()` on univariate Gaussian `mu`; - q1 sigma one-slope rows -- `phylo()`, `animal()`, `relmat()` on univariate Gaussian `sigma`; - slope-only q2 mean-mean rows -- `phylo(0 + x | ...)` and `relmat(0 + x | ...)` on bivariate Gaussian `mu1`/`mu2`, a joint cross-response covariance block. The intercept-only bivariate q2 rows are not inference-ready. The univariate Gaussian single-response q2 mean-slope route is recovery-only, not inference-ready; - Arc 1a REML rows -- `spatial()`, `animal()`, and `relmat()` on univariate Gaussian `mu`, restricted to an unlabelled intercept or an independent intercept plus one numeric slope with `sigma ~ 1`. Each provider is one ledger cell that covers both admitted shapes; the cell count is not a count of formula shapes. The machine ledger records endpoint rows separately for bivariate provider blocks. That storage detail does not create additional scientific covariance blocks. Each route has a caveat, and the caveat is different for each group. The q1 `mu` intercept rows are backed by the default location-axis bias-corrected, small-sample-t Wald channel, with coverage of 0.9705-0.9832 in the retained-denominator campaigns. The q1 `sigma` one-slope rows are backed by raw, uncorrected log-SD Wald-z intervals: intercept-SD coverage is 0.9388-0.9633 and slope-SD coverage is 0.9895-0.9957 at `g = 8`, with material miss asymmetry for some intercept targets. Profile intervals for these q1 `sigma` rows are diagnostic-only at `g = 8` because their finite-interval rates do not clear the promotion gate. These are the documented small-sample limitations; do not replace either evidence channel with a general profile recommendation. The Arc 1a REML cells are coverage-backed only over discrete campaign domains. Here `M` is the number of structured levels (sites, animals, or relatedness levels, and therefore the structured matrix dimension), while `n_each` is the number of observations per structured level. Spatial and `relmat()` use `n_each = 20` and exactly `M = {8, 16, 32}`, while the `animal(A = A)` campaign uses `n_each = 20` and one fixed `M = 8` matrix. Coverage clears the pre-specified small-sample floors but is not nominal-exact; upper-tail miss asymmetry and zero-lower-bound slope profiles remain material. Do not rewrite these as continuous `M >= ...` claims or treat other pedigrees, matrices, or sample sizes as coverage-checked. These are copy-paste forms of the three admitted independent one-slope REML cells (replace the object names with objects from your analysis): ```r fit_spatial_reml <- drmTMB( bf(y ~ x + spatial(1 + x | site, coords = coords), sigma ~ 1), family = gaussian(), data = dat, REML = TRUE ) fit_animal_reml <- drmTMB( bf(y ~ x + animal(1 + x | id, A = A), sigma ~ 1), family = gaussian(), data = dat, REML = TRUE ) fit_relmat_reml <- drmTMB( bf(y ~ x + relmat(1 + x | id, K = K), sigma ~ 1), family = gaussian(), data = dat, REML = TRUE ) ``` The multi-seed campaigns used exactly the coordinate, `A`, and `K` representations shown above. Pedigree and `Ainv` animal inputs and relmat `Q` have deterministic representation-parity evidence only; they do not inherit the multi-seed campaign claim. Intercept-only versions replace `1 + x` with `1`; slope-only, labelled, and multiple-slope shapes remain rejected. For every admitted Arc 1a term, the fitted structured SD scale `s_j` is the latent-field scale: the covariance is `s_j^2 K_h`, and node `i` has marginal SD `s_j sqrt(K_h[ii])`. The fitted `s_j` is therefore equal to a node marginal SD only when the corresponding diagonal entry of `K_h` is one. The bivariate-Gaussian slope-only q2 mean-mean rows are inference-ready only because `confint()`'s defaults already correct for known small-sample bias on location-axis structured-SD targets: `bias_correct = "location"` shifts the log-scale point estimate to counter ML shrinkage, and `small_sample_df = "location"` widens the interval with a `t(df = g - 1)` reference instead of a normal quantile. Calling plain `confint(fit)` gives you this corrected interval automatically. If you explicitly turn the correction off (`bias_correct = "none"`, `small_sample_df = "none"`), the resulting raw Wald interval under-covers on these rows -- do not do that for a bivariate `phylo()`/`relmat()` q2 mean-mean report. None of these structured cells carries the legacy `supported` evidence tier the census reserves for the package's ordinary (unstructured) Gaussian and bivariate-Gaussian random effects -- and even those supported cells are point-trustworthy with interval coverage still planned, not coverage-verified. Report these structured intervals as inference-ready, not as a fully mature fixed-effect-grade interval. ### Ordinary (unstructured) random effects: point-trustworthy, coverage pending A group of cells deserves explicit mention even though its interval does not yet meet the coverage bar for this tier. The census-supported rows are the Gaussian `mu` random intercept, its independent `(0 + x | id)` slope, and the matching bivariate-Gaussian `mu1`/`mu2` intercept block. They are the package's highest fit-maturity random-effect rows, so their point estimates are the most trustworthy ordinary random-effect estimates `drmTMB` produces. This does not extend to other bivariate blocks or to an arbitrary intercept-plus-slope formula. Their interval coverage is still planned rather than simulation-verified: until that campaign lands, read any interval on these rows the way you would a recovery-only row below, and report the point estimate with confidence. ### Unstructured non-Gaussian fixed effects A retained multi-seed coverage campaign checked the fixed-effect mean coefficients of `binomial()`, `poisson()`, `beta()`, and `nbinom2()` across `n` in `{50, 150, 500}`, 400 seeds per cell. Every cell cleared the bar: finite rate at 1.00 and Wald coverage between 0.922 and 0.973, with no worsening at the smallest sample size and no systematic under-coverage. That holds even under stress -- a rare-event binomial design with an approximately 8% base rate, and a low-count Poisson design with a mean near 1 -- so a scarce or noisy field dataset is not, by itself, a reason to distrust these intervals. The same campaign extended to `nbinom2()` location-scale models, where both the mean coefficients and the `sigma ~ x` dispersion coefficients are calibrated (coverage 0.93-0.97 across `n`), and to `beta()` location-scale models on interior proportions, where mean and `sigma ~ x` coefficients are also calibrated (coverage 0.93-0.95). The `beta()` result carries one hard requirement: the family strictly needs responses in the open interval `(0, 1)`. An observation with an exact 0 or exact 1 -- a boundary proportion that arises naturally from rounding at extreme covariate values -- produces a non-finite result by design, not a bug to route around. If your proportions can legitimately sit at the boundary, fit `zero_one_beta()` instead of `beta()`. ### Ordinary non-Gaussian random slopes: profile intervals with caveats The following non-Gaussian families carry an inference-ready-with-caveats interval for the standard deviation of a single ordinary independent `mu` random slope, `(0 + x | id)`: binomial, skew-normal, Tweedie, and zero-one-beta. The claim is narrow and the same in shape across them -- a profile interval for the *natural-scale* slope SD, ML only, no Wald-interval or point-bias claim -- but the tested floor and design differ by family and should not be generalized to a single number. Skew-normal, Tweedie, and zero-one-beta are certified at `M >= 16` groups (true slope SD 0.50) with the standard ML-Laplace profile. Binomial is certified at `M >= 32` (true SD 0.6). The retained cumulative-logit campaign used adaptive Gauss-Hermite quadrature with a Cox-Reid adjustment, but that estimator is package-private and cannot be requested through `drmTMB()`. The campaign remains useful technical evidence; it does not grant reporting permission to the public ML-Laplace fit. Do not report a cumulative-logit random-slope interval on the strength of that campaign. Zero-one-beta carries an extra caveat and is **generator-qualified**. Its coverage campaign was designed with a fixed 15% structural boundary mass and interior draws from a beta density, but the interior draws leaked rare machine-exact ones -- 50, 87, and 193 of them across the `M = 16`, `32`, and `64` replicate banks -- because the sampler's precision parameter pushes the beta shape toward a boundary in the upper tail. The reported coverage (0.929, 0.940, 0.952 at `M = 16 / 32 / 64`) therefore describes *the generator as executed*, not an exactly-15%-boundary design. The leak is not independent of the estimand: affected replicates carry systematically larger slope-SD estimates, so the effect of the defect under the intended generator is unquantified and cannot be recovered from the retained campaign. One of the three independent promotion reviewers withheld this cell on exactly that ground; it promotes under the frozen two-withhold rule, and the caveat travels with it. This is a principled boundary, not a temporary one. At the beta shapes where the leak occurs, the intended distribution genuinely places a large share of its mass within one machine-precision step of the boundary, so no strictly-interior sampler can faithfully reproduce the intended design; a rerun would answer a different, convention-dependent question rather than certify the intended one. The generator-qualified reading is therefore the correct terminal statement for this cell. ### Gamma `sigma` random intercept: narrow coverage-backed interval The Gamma `sigma ~ (1 | id)` random-intercept standard deviation has a separate, narrower result. Its ML-Laplace profile interval was assessed only in an iid, uncentred fixture with true SD 0.40 and 12 observations per group. `M = 32` and `64` groups met the retained coverage rule; `M = 16` is borderline and `M = 8` is excluded because boundary behaviour made that arm unsuitable for reporting. This is not evidence for Gamma `sigma` slopes, labelled blocks, joint `mu` and `sigma` random effects, REML, or other sampling designs. ### Tier 2: recovery-only A larger set of non-Gaussian structured random-effect routes has verified point-estimate recovery but no coverage evidence at all. Trust the coefficient; do not report the interval as calibrated. This covers Poisson and nbinom2 q1 structured `mu` intercepts and one-slopes for `phylo()`, `spatial()`, `animal()`, and `relmat()`, and nbinom2 structured `sigma` for the same four providers. The nbinom2 structured-`sigma` route deserves a specific caution: through 0.3.x, a `sigma ~ phylo()`/`spatial()`/`animal()`/`relmat()` formula silently modified the *mean* predictor instead of the scale predictor, so a fitted model reported a `sigma`-labelled standard deviation that was actually changing `mu`. That mis-targeting is fixed in 0.4.0, and the route now correctly modifies scale with verified point-fit recovery -- but intervals and coverage remain out of scope, so this row stays recovery-only even after the fix. Zero-one-beta also has exact q1 structured-intercept gates. Point-recovery evidence covers `mu` under `phylo()`, `animal()`, `relmat()`, `spatial()`, and `phylo_interaction()`; `sigma` has the same five point-fit gates. The `sigma`-`relmat()` and `sigma`-`spatial()` direct profile targets are interval-feasible, not coverage-calibrated. Selected q1 `zoi` and `coi` structured intercepts have point-recovery evidence, but several provider combinations remain unavailable. These exact cells do not extend to slopes, labels, q2 or larger covariance blocks, simultaneous atom effects, REML, or a family-wide structured-effect claim. A further handful of row-specific slices sit at the same tier: beta `animal()` structured effects on `mu` and on `sigma`, Student-t `mu ~ spatial(1 + x | ...)`, and Gamma `mu ~ relmat()` (unlabelled intercept and one-slope). Each of these fits and has point-recovery evidence; none has a coverage study behind its interval. If your scientific question turns on the width of a confidence/compatibility interval rather than the sign and rough size of an effect, do not build the argument on one of these rows yet. ### Tier 3: diagnostic-only Some exact structured routes currently have deterministic or single-smoke fit/extractor evidence without a retained-denominator recovery ladder: ordinal `mu ~ phylo()`, truncated-nbinom2 `hu ~ relmat()`, Poisson `zi ~ spatial()`, fixed-`zi` Poisson `mu ~ spatial()`, Student-t `nu ~ phylo(1 | ...)`, Student-t intercept-only `mu ~ spatial(1 | ...)`, Poisson slope-only `mu ~ spatial(0 + x | ...)`, Poisson labelled-scalar `mu ~ spatial()`, Poisson `mu ~ spatial(1 | ...) + (1 | id)`, and fixed-`zi` NB2 `mu ~ spatial(1 | ...)`. These routes establish that the parser, likelihood target, and extractors connect. They do **not** establish point-estimate recovery. Use them for feasibility or debugging only, and do not report an interval or coverage claim. ### Tier 4: not available or rejected by design **Structured random effects outside the narrow gates above.** `drmTMB` does not currently accept structured `phylo()`, `spatial()`, `animal()`, or `relmat()` random effects for lognormal, skew-normal, or Tweedie families. Zero-one-beta accepts only the exact q1 structured-intercept cells described under Tier 2; it does not provide blanket structured support. Gamma is another partial exception: it accepts `relmat()` on `mu` (recovery-only, listed under Tier 2 above) but rejects `phylo()`, `spatial()`, and `animal()`. Try instead: model the same structural dependence through a Gaussian route (for example a log- or logit-transformed response under `gaussian()`), fall back to the ordinary Poisson/nbinom2 structured routes described above for count data, or drop to fixed effects for the family you need while structured support catches up. **REML outside its admitted scope.** REML is implemented across a bounded Gaussian surface and a diagnostic-only ordinary binomial slice. Inside Gaussian models it accepts a specific boundary rather than every structured shape. It accepts univariate phylogenetic mean-side, scale-side, and matched q2 mean-and-scale blocks, plus univariate spatial, animal, and `relmat()` structured effects on the scale side, bivariate phylogenetic structured effects in every covariance layout, and heteroscedastic `sigma ~ x` formulas together with ordinary (non-phylogenetic) `sigma` random effects. Arc 1a additionally accepts a pure-`mu`, univariate `spatial()`, `animal()`, or `relmat()` term as an unlabelled intercept or an independent intercept plus one numeric slope, but only with constant `sigma ~ 1` and no sigma random effect. Arc 1b-S1 accepts matching labelled fixed-covariance `spatial(1 | p | site, coords = coords)` intercepts in bivariate `mu1` and `mu2`, with intercept-only `sigma1`, `sigma2`, and `rho12`, complete response pairs, unit weights, no known `meta_V()` covariance, and no additional ordinary random, direct-SD, or `corpair()` layer, at recovery-only grade. Arc 1b-S2R admits the analogous location-only supplied-relatedness cell only when both formulas contain the same labelled `relmat(1 | p | id, K = K)` intercept and the named `K`, group ordering, and label match exactly. This relmat route has `point_fit_recovery` evidence: report its two structured SDs and latent relatedness correlation as point estimates, not calibrated intervals. The relmat REML exception does not admit `Q = Q`, slopes, q4 or larger blocks, scale-side terms, extra random effects, incomplete response pairs, non-unit weights, nonconstant residual formulas, direct-SD models, `meta_V()`, or `corpair()`. Animal-model bivariate REML remains rejected. For binomial responses, `REML = TRUE` accepts one ordinary unlabelled `mu` random intercept or independent slope. That O2 joint-Laplace route is diagnostic-only: deterministic comparator and uncertainty checks show that it is wired correctly, but no recovery or coverage campaign authorizes a scientific estimate. A fixed-only binomial model has no random-effect variance component for REML to target. Multiple-term, correlated, labelled, structured, and missing-response binomial REML routes remain unavailable. Every other non-Gaussian family remains outside the public REML surface. Try instead: fit the same model with `REML = FALSE` (maximum likelihood); ML is the route to use for any model REML rejects or for reportable binomial inference. **Higher-order covariance promotion.** `q4`, `q6`, `q8`, and `q12` covariance-interval promotion, plus derived-correlation intervals more broadly for non-Gaussian structured covariance, remain planned rather than implemented. Try instead: use the fitted point estimate for the covariance or correlation summary you need, and check `profile_targets(fit)` for any direct target that already has an interval route before assuming none exists. ### Known limitations for 0.7.0 If you are deciding whether a specific `drmTMB` output belongs in a manuscript, read this section next. It names four gaps between what an extractor currently returns and what the underlying fit actually supports, and what to do about each one. **Regression-parameterised coscale intervals are computable, but not coverage-certified.** If your `rho12` formula depends on a covariate (`rho12 ~ x`), `corpairs(fit, conf.int = TRUE)` reports `conf.status = "derived_interval_unavailable"` because its one-row summary averages a fitted surface. Use `confint(fit, parm = "rho12", newdata = grid, method = "profile")` for row-specific profile intervals, or `predict_parameters(fit, newdata = grid, dpar = "rho12", conf.int = TRUE)` for the corresponding Wald intervals. The same evidence boundary applies to the constant `rho12 ~ 1` profile interval: it is available, but the current ledger records no committed bivariate fixed-effect CI-coverage simulation. Treat either result as an interval-feasibility output, not a calibrated reporting guarantee. Tracked as issue #802. **The certified Arc 4c `mu`-slope cells make no point-bias or Wald claim.** The skew-normal (mc-0464), Tweedie (mc-0539), and zero-one-beta (mc-0575) cells described under "Ordinary non-Gaussian random slopes" above come from a coverage campaign whose reporting extractor had a disclosed defect: it recorded `NA` for the point estimate (`sd_hat`) and every Wald column, across the whole campaign. The defect is repaired going forward, but the immutable campaign artifact was not backfilled, so these named cells carry only the certified ML-Laplace profile interval described above -- not a point-bias number and not a Wald interval. What to try next: read and report the profile interval for these cells, and treat any point-bias or Wald claim about them as unavailable, not merely uncertain. **Profile-interval endpoints no longer depend on your `iter.max` budget (issue #710.5).** A previously reported numerical-stability issue -- a tight `iter.max`/`eval.max` on the profile-endpoint refit could bias a profile CI inward -- is fixed: the endpoint refit now floors its own inner-iteration budget regardless of what you pass in, so tightening your fit's control settings no longer distorts a profile interval. One related item stays open after 0.7.0, a `sigma`-slope start-value correction (issue #710.2), but it does not touch the certified profile-CI cells described above. **Julia cross-family fitting is deferred.** Legacy Julia-bridge objects may still be readable for compatibility, but they are not a current analysis route and do not establish cross-family inference. Their compatibility extractors return only `u = 0` response-scale means and response residuals for `mu1` / `mu2`; `vcov()` and fixed-effect Wald intervals explicitly report unavailable rather than returning an empty value. What to try next: use the native TMB engine, `drmTMB`'s default, for current supported models. For the bounded post-0.7 development association route, see the frozen-margin article; it is a separate staged interface and is not a Julia fit. ### Frozen-margin association intervals All admitted fixed-effect, complete-pair association classes are **interval-feasible** for their association-link coefficients `alpha`. `vcov()` returns the relevant block of the two-stage Godambe covariance and `confint()` returns alpha-scale Wald intervals whenever the fit-specific calculation succeeds. This includes the admitted Bernoulli x ordinary-NB2 association-slope formula. Routes without a coverage campaign warn that the interval is experimental; they are not withheld. For an intercept-only association, `confint(object, type = "eta")` transforms the alpha interval to the bounded latent-association scale. For association regression, `predict(object, newdata = ..., type = "eta", se.fit = TRUE, interval = "confidence")` supplies pointwise delta-method eta standard errors and transformed confidence limits. These derived results inherit the alpha route's evidence tier; they do not add a new coverage or simultaneous-band claim. Within that surface, literal-Bernoulli x ordinary-NB2 with `association = ~ 1` is **inference-ready with caveats**. A 16-cell, 16,000-attempt high-information campaign (`n = 480` or `960`) passed its predeclared bias, availability, SE-calibration, and coverage gates. This positive scoped evidence supports the stronger tier; it does not require unrestricted calibration over every possible dataset. The earlier lower-information campaign found five primary coverage failures driven by unavailable intervals. drmTMB therefore warns on lower-information fits and returns an interval only when the fit-specific covariance diagnostics pass. It does not manufacture bounds for an unstable or unresolved result. Simultaneous eta bands, profiles, random effects, missingness, weights, offsets, and REML remain outside this interval surface. ### Missing data Missing-data support is a separate axis from the tiers above: it is likelihood based (missing responses are marginalised, missing predictors are modelled inside the same likelihood), not multiple imputation and not a posterior. It is validated against two single-source-of-truth inventories. A positive runtime test reconciles all currently fitted response routes with the response ledger; predictor-family tests still require every family outside `drm_missing_predictor_families()` to reject. Route-specific tests cover unsupported response neighbours, so an unsupported request is a clear error, never a silent wrong likelihood. The full worked walkthrough is in `vignette("missing-data")`. The response-missingness board below is generated from the response-route ledger as the capability surface. It distinguishes code admission from completed validation: a route receives a verified ✓ only at G3 recovery or above. ```{r capability-ledger-missing-response, echo = FALSE, results = "asis"} cat( readLines("includes/capability-ledger-missing-response.md", warn = FALSE), sep = "\n" ) ``` Missing-predictor support is a different axis and is not managed by the new response-missingness ledger: | Response family | Missing predictor `mi()` (`predictor = "model"`) | | --- | :---: | | `gaussian()` | ✓ (broad predictor-model catalogue) | | `binomial()`, `poisson()`, `nbinom2()`, `beta()` | ✓ (one binary predictor) | | every other family | — (rejects) | Two missing-predictor details: - **Imputation-model catalogue.** When the *response* is a univariate Gaussian location model, the *missing predictor* can be modelled with a wide family set — Gaussian, Bernoulli/logit, ordered cumulative logit, unordered softmax, beta, zero-one beta, beta-binomial (known trials), Poisson, NB2, zero-truncated NB2, lognormal, Gamma, and fixed-power Tweedie. The non-Gaussian *responses* above currently model **one binary** (Bernoulli/logit) missing predictor each. - **Structured / multivariate `mi()`.** One intercept-only structured predictor model (`phylo()`, `spatial()`, `animal()`, `relmat()`) is available for the Gaussian-response `mi()` route only. Multivariate/bivariate missing-predictor modelling is not available (that is `gllvmTMB`'s lane). Not available anywhere yet, and rejected with a family-specific message: non-binary missing predictors on non-Gaussian responses; multiple missing predictors; `mi()` with random-effect, structured, or zero-inflated response terms; response masking combined with `mi()` in the same fit; and EM, profile, or REML missing-data engines. No fitted response route remains at G0 on the generated board, but each G3 tick applies only to the route and effect structure named in its evidence row. ### Full per-family capability map The table below preserves the original whole-package view alongside the missing-response board. It shows distributional parameters, fixed and random effects, structured providers, REML, inference maturity, and both missing-data axes. Its missing-response column is generated from the response-route ledger. ```{r capability-ledger-family-map, echo = FALSE, results = "asis"} cat( readLines("includes/capability-ledger-family-map.md", warn = FALSE), sep = "\n" ) ``` ### Choosing an interval method `confint()`'s default method is Wald (`method = "wald"`), and for most unstructured fixed-effect rows in Tier 1 that default is already calibrated. Do not collapse the four structured-anchor evidence channels into one method: q1 `mu` and the exact phylo/relmat slope-only q2 `mu1:x`/`mu2:x` SD rows use the default location-axis bias-corrected, small-sample-t Wald channel; q1 `sigma` uses raw uncorrected log-SD Wald-z evidence, with profile diagnostic-only at `g = 8`; and the Arc 1a REML cells use direct structured-SD profile evidence only inside their tested discrete domains. Near a boundary, `profile_targets(fit)` can identify a direct target worth diagnosing, but that does not promote profile intervals for a row whose ledger calls them diagnostic-only. When neither an admitted Wald channel nor an admitted profile channel is available for a target, `method = "bootstrap"` is the last-resort fallback. For a structured `sigma` on count data where only the point estimate is verified, prefer a better-tested alternative when the interval matters to your conclusion: an ordinary `sigma ~ (1 | id)` random intercept, or a fixed-effect `sigma ~ predictors` model, both of which carry stronger evidence than the structured-`sigma` recovery-only routes above. ### Where the exhaustive detail lives This page is the public reporting summary. Contributors who need to audit a specific cell should use the repository's internal capability ledger; applied readers do not need that development material to choose a fitted route. Start from the generated summary above and use the exact caveat before interpreting an estimate.