Skip to content

Release 1.3 0#167

Merged
jchiquet merged 18 commits into
masterfrom
release-1.3-0
Jun 18, 2026
Merged

Release 1.3 0#167
jchiquet merged 18 commits into
masterfrom
release-1.3-0

Conversation

@jchiquet

@jchiquet jchiquet commented Jun 18, 2026

Copy link
Copy Markdown
Member

See TODO in #166

  • set the fastest optimizer as default according to the benchmark (nlopt/builin)
  • add vignettes for ZIPLN(network)
  • Update the README (use qmd)
  • suppress warnings and test due to glm.fit during initialisation of ZIPLN ?

jchiquet and others added 18 commits June 18, 2026 14:15
DEVLOG_2026-06-08-09.md and DEVLOG_2026-06-11-12.md covered a
continuous, sequentially-numbered set of entries (1-60) split across
two files for no strong reason. Combine into DEVLOG_2026-06-08-17.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
With config_optim$profiled = TRUE, nlopt is now consistently faster
than builtin for full-covariance PLN (2-4x on n,p in the hundreds),
so it becomes the default again; builtin remains available and still
finds a slightly better optimum, an advantage that grows with p.

For PLNnetwork, switch the default to the already-benchmarked but
never-wired-in combination backend="builtin" + maxit_ve=1 +
inception_niter=5, which consistently beats plain nlopt on ELBO at
the same speed (+34/+123/+676 loglik on trichoptera/barents/oaks).

Update two stale expect_output() tests that hardcoded "builtin
optimizer" as PLN's default trace message.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The per-species binomial GLM in compute_ZIPLN_starting_point() is a
coarse starting point, not a final estimate, and routinely separates
on small samples ("algorithm did not converge" / "fitted
probabilities numerically 0 or 1"). Same situation already handled
with suppressWarnings() for an equivalent call in import_utils.R.

No test depended on these warnings (no expect_warning() in
test-zipln*); suite goes from WARN 12 to WARN 0.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace the placeholder (eval=FALSE) README with a quarto document
that actually runs and renders the package's main models (PLN,
PLNLDA, PLNPCA, PLNnetwork, PLNmixture) on the barents data set
(n=89, p=30 — fast enough to be a copy-pasteable demo), with one
illustrative plot per model. Stability selection and PLNmixture
smoothing are deliberately skipped to keep the render fast.

Caching is enabled (cache=TRUE) but cache.lazy=FALSE is required:
knitr's lazy-load cache promises don't survive R6 model objects and
silently corrupt across chunks (surfaced as a bogus "non-conformable
arrays" error from an unrelated active binding during cache writes,
not an actual bug in PLNPCA's variational means).

Also complete the bibliography (PLNLDA, PLNnetwork's graphical lasso,
PLNmixture, and the barents data set citation), and drop the
now-orphaned pre-quarto README figures.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Illustrates the zero-inflation parameterizations (single/row/col/
covariate-dependent), inspects fitted values and per-site zero-
inflation probabilities, and fits a sparse ZIPLNnetwork. Uses the 30
most abundant taxa of the microcosm data set (n=880, still ~80%
zeroes) to keep the vignette fast to compile. Stability selection is
mentioned but skipped, consistent with the PLNnetwork vignette's
heavier example.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Re-benchmarked builtin vs nlopt on oaks under the current codebase:
the oscillatory behaviour that previously made builtin worse (-241
loglik, documented mid-June) is gone, likely fixed by the joint
(M,psi,R) Newton VE-step and the subsequent CRTP refactoring. builtin
now wins by +300 to +384 loglik across the whole penalty path
(checked point-by-point, not just at the BIC-best model, with nearly
identical penalty grids between backends), at a 3.6x time cost on
this dataset.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename the second "zi_param" chunk (duplicate label, would break
  knitr) to "zi_coef_B0"/"zi_coef_B".
- Fix copy-pasted caption ("zero-inflation probability $B$" on the
  count-coefficient chunk).
- Disable row clustering on the heatmaps (4 sites, ordering by
  dendrogram adds noise; columns/species still clustered).
- Harmonize myPLN's formula to ~0 + site for consistency with the
  ZIPLN calls.
- Drop the no-op config_optim = list() in the ZIPLNnetwork chunk now
  that builtin is the default backend, and note why.
- Add pheatmap to Suggests (used by the vignette, was missing).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
vertex.frame.color = NA must be passed as a plot() argument, not set
as a vertex attribute via V(G)$frame.color <- NA: as an attribute it
triggers "vertex attribute frame.color contains NAs. Replacing with
default value black", even though NA is igraph's own documented way
of requesting no frame (and the replacement to black was silently
shipping borders nobody asked for).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove specific dataset/loglik/timing citations (e.g. "n=880, p=259:
+96 loglik for 3.4x more time", the trichoptera/barents/oaks benchmark
table) from @param docs in PLN_param(), PLNPCA_param() and
PLNnetwork_param(). These numbers justify default choices to us as
developers but require knowing internal benchmark datasets the user
has no reason to know; the qualitative recommendation is kept. The
detailed numbers remain in NEWS.md, DEVLOG and persistent memory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- predict.ZIPLNfit() was missing a @return tag (inconsistent with
  predict.PLNfit() and every other documented method).
- spelling::update_wordlist(): added 38 legitimate words flagged by
  the spell checker (citation authors, acronyms, British spellings,
  Greek letters), removed 10 stale entries no longer present in the
  docs (including a leftover "mutivariate" typo entry that masked an
  already-fixed typo).

Full devtools::check(cran = TRUE): 0 errors, 0 warnings, 1 NOTE
(non-portable compilation flag injected by the local R installation's
Makeconf, not by the package's own src/Makevars -- not actionable).
spelling::spell_check_package(): clean.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Group related items (backend defaults, quality/speed improvements,
bug fixes) instead of one bullet per change, to keep the entry
readable as a release-notes summary rather than a development log.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jchiquet jchiquet marked this pull request as ready for review June 18, 2026 19:03
@jchiquet jchiquet merged commit ecb75af into master Jun 18, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant