Repository navigation
drmTMB 0.7.0
First tagged release since v0.5.0. Not submitted to CRAN — the CRAN hold stands; this tag exists so the package can be installed at a fixed, tested point instead of tracking main.
remotes::install_github("itchyshin/drmTMB@v0.7.0")Why this tag exists now
engine = "julia" aborted in an ordinary non-interactive Rscript session with "Live Julia setup is disabled on the CRAN check lane". The CRAN-lane guard inferred "package check" from !interactive() — but a scripted analysis is a supported way to use this package, so anyone running their work as a script was blocked and had to set an undocumented environment variable to get past it.
Fixed by requiring R's own _R_CHECK_PACKAGE_NAME_ marker, which is set in every check lane that can actually reach Julia setup. Which marker to use was measured, not guessed: probe packages run under real R CMD check show _R_CHECK_PACKAGE_NAME_ present in the examples lane, in tests/testthat.R, and inside test_check(), while TESTTHAT_IS_CHECKING is absent from the examples lane — the very lane the guard was written for.
The fix had shipped without a regression test; reverting it left the existing CRAN-lane test file fully green (32 passed, 0 failed). That gap is now closed.
Verified for this tag from a clean install of the built tarball — plain Rscript, non-interactive, with NOT_CRAN, DRMTMB_JULIA_TESTS and _R_CHECK_PACKAGE_NAME_ all unset — an engine = "julia" fit completes (loglik -95.79566).
⚠️ Breaking, if you already use the Julia route
- REML the bridge cannot deliver is now refused, not silently downgraded. Previously it warned and then fitted by maximum likelihood, so one script could return a different estimator on each engine, announced only by a warning — and it landed on precisely the quantities REML exists to correct: variance components, and
heritability()/repeatability()/icc()built from them. It is now an error naming the cell and both ways forward. Theengine = "tmb"pointer is deliberately bounded: TMB does not offer a general REML fit for every refused cell, and the message says so. summary()'s derived rows are renamed tototal_variance_shareandphylo_total_variance_share, which state their denominator. The arithmetic is unchanged.icc()/repeatability()keep their own focal-vs-residual meaning — the two used the word "repeatability" for different quantities and silently disagreed on any fit with more than one structured component.
Also included
- Pinned DRM.jl clone moved to
e0a65f96b, measured on the full 37-file live-Julia suite: 1433 passed, 0 failed, with dependency versions held fixed.phylo(1 + x | g)on a univariate route is now refused by the engine rather than silently fitted as intercept-only with the slope discarded. nlminbis Newton-polished so the gradient, not a relative tolerance, decides convergence (#1130).- Bootstrap
confint()works forcbind(successes, failures)binomial fits (#1123). - A public start contract
drm_control(start = ...),objective_at(), anddrm_provenance(). - Several new
mi()and ordinary-correlated-slope cells; binomial probit and cloglog links; offsets inmufor every univariate family.
Full detail in NEWS.md.
Known gaps
drm_julia_reml_supported()is narrower than DRM.jl in three cells (bivariate structured q=2, Poisson(1 | g), Poissonphylo(1 | species)), so those now raise an avoidable error rather than downgrading. Tracked in #1152; deliberately not widened on an unverified claim.- Julia fixed-effect intervals cold-refit the model per coefficient instead of reusing the fit (#1148).