ggchangepoint 0.5.0

The release that fills in what 0.4.0’s engine wave left open: inference, selection, diagnostics, supervised detection, time indices, streaming, benchmarking, and an extension mechanism that makes the CRAN-availability question stop being a blocker. cpt_detect() goes from 31 to 50 wired methods, and the surface around the detectors roughly doubles.

The extension mechanism

The highest-leverage addition, and the one everything else leans on.

The engine registry

fpop comes from R-Forge

Time indices and data structures

Inference

Choosing the number of changepoints

Diagnostics

Supervised detection

Choosing and combining methods

Communication

Benchmarking and evaluation

Streaming and online monitoring

Simulation, power and study design

Engine wave #2: 19 new methods

cpt_detect() reaches 50 wired methods. New change_in levels "covariance", "network", "regression" and "seasonality" come with them, and the capability matrix was extended in lockstep.

Accessibility

Fixes found in the post-implementation audit

Fixes found in the pre-submission audit

Fixes found in the final pre-submission sweeps

Further passes, each sweeping a surface rather than re-reading code: every wrapper against every argument its engine accepts, every method against every change_in value it advertises, every documented claim against the installed package, and (the ones that found the most) invariances, where the answer is compared against another answer rather than against a recorded value. 84 further items in all, itemised below.

Five are wrong answers. Four are below; the fifth has its own section because it is the one that could have reached a publication: a seed argument that reset the caller’s random stream, so a simulation loop analysed the same dataset six times over.

Wrong answers

Engine arguments, answered by name

A sweep of all 64 wrapper argument slots and of every wrapper against every argument its engine accepts.

cpm’s two thresholds

The caller’s session

seed no longer resets the caller’s random stream

Multi-annotator scoring

Influence diagnostics

Supervised detection

Event annotation

Benchmarking

Consensus

Choosing K: the criteria say what they compute

Cost, where it is large enough to look like a hang

Simulation, which is the package’s own ground truth

The extension mechanism

Reproducibility under a parallel plan

Inference

cpt_metrics() says what its twelve numbers mean

Testing

Printed output

Documentation that had drifted from the code

Fixes from the external pre-CRAN review

A code review conducted from the sources alone (no R session) raised 102 findings. Each was checked here by measurement rather than by reading, which refuted two of them and turned up one the review had only half-named. 17 are fixed below; the rest are still being worked through in the review’s own priority order.

Four are wrong answers.

The rest.

The rest of the external review

The remaining 79 findings, worked through in the review’s own order. Four turned out not to be defects and are recorded as such below; the rest are fixed, with a regression test each.

Wrong answers, or an answer the object misdescribed.

Failures with a message that named the wrong thing, or nothing.

Things that were right and could not be relied on staying right.

Names, labels and claims that did not match the code.

Every other documented measurement, re-run. - The monitoring vignette’s false-alarm figures were quoted to a precision one run cannot support. It read “cpm raises about 3.7 false alarms against the 4 that arl0 = 500 implies, and edetector about 13”: inviting the reader to conclude cpm is calibrated to within 0.3 alarms. Measured over 20 in-control streams of 2000 observations: cpm averages 3.0 with a standard deviation of 2.0 and a range of 0-7, and the e-detector 11.5 with a standard deviation of 5.2 and a range of 1-19. Neither original number is wrong (both sit inside sampling error of the 20-stream estimate) but the spread is larger than the discrepancy they were being compared against. The section now gives the mean, the spread and the replicate count, and says that agreement to within one alarm is not something one run can establish.

A documented measurement that had gone stale, and the CI step that failed for a reason unrelated to the package.

Three engines answered an ordinary degenerate series with a base-R error.

Interval coverage, measured for the first time.

Example timings, measured for the first time.

And the README, which turned out to be the stalest thing in the repository.

Four findings the measurement refuted, recorded so they are not re-swept.

Fixes found sweeping the extension mechanism and the metric layer

Fixes from the pre-CRAN bug hunt

Corrections to the roadmap

Testing and infrastructure

Backward compatibility

Everything from 0.4.0 keeps working. Almost all the additions are new functions, new optional arguments with their previous defaults, or new optional slots on ggcpt that are absent unless something supplies them: is.null(fit$regions) remains the test for “this engine does not do regions”, exactly as data_wide has always worked. Three changes are worth naming rather than leaving to be discovered:

ggchangepoint 0.4.0

The 0.4.0 engine wave

cpt_detect() grows from 13 to 31 wired methods. Eighteen new wrappers, all of whose engines live on CRAN and enter Suggests behind requireNamespace() guards:

New tools

Visualisation

Bug fixes (audit items C1-C20; regression-tested)

Bug fixes (pre-release audit; regression-tested)

Bug fixes (final pre-submission audit; regression-tested)

The whole exported surface was exercised with degenerate, contract-violating and self-generated input. Items are listed with the ones that change an answer or end a session first.

Documentation

ggchangepoint 0.3.0

Documentation and coverage

New features

Bug fixes

ggchangepoint 0.2.0

Major changes

Hardening (bug fixes)

Testing

ggchangepoint 0.1.0

mirror server hosted at Truenetwork, Russian Federation.