The multivariate side of the package now has the natural pair of
memory-based charts. Both follow the calibrate() / monitor()
Phase I / Phase II workflow.
shewhart_mewma() — Multivariate Exponentially Weighted Moving
Average (Lowry, Woodall, Champ & Rigdon 1992). The multivariate
analogue of shewhart_ewma(): joint monitoring of p > 1
correlated variables for small persistent shifts in the vector
mean. Time-varying and steady-state covariance both supported.
Decision interval h calibrated by lookup in Prabhu & Runger
(1997) Table 3 (ARL_0 ~ 200).shewhart_mcusum() — Multivariate CUSUM (Crosier 1988). The
multivariate analogue of shewhart_cusum(). Uses Crosier's
shrinkage operator: at each step the cumulative vector is
shrunk towards zero by k / C_i where C_i is its Mahalanobis
norm; if the norm falls below k, the cumulative vector resets
to zero. Decision interval h calibrated by lookup in
Crosier (1988) Table 1 for k = 0.5, ARL_0 ~ 200,
p = 2..10. Phase II monitoring continues from the calibration's
final S vector (Crosier 1988 §5).autoplot() method now uses shewhart_palette() and
shewhart_theme(), so plots from any chart family share the
same editorial look (off-white surface, single horizontal grid,
bold left-aligned title, sequential phase palette, hollow firebrick
rings on out-of-control points). Out-of-control marks
centralised in a new internal violation_layers() helper, sized
at halo 1.7 / ring 1.4 / stroke 0.7.Phase 0, Phase 1, … labels via
the phase_n and new legend_phases locale entries.arl-simulation vignette's hand-rolled chart was using
theme_minimal() with default ggplot2 colours; now uses
shewhart_theme() and the package palette so it matches the rest.R/autoplot.R (two comments,
one string literal) replaced with ASCII alternatives or the
— escape so R CMD check no longer warns about non-ASCII
source.This release closes the remaining items from dev/ROADMAP.md §11
that were left for after v1.1: a plotly bridge and external numerical
validation against the long-established qcc package.
as_plotly() with a shewhart_chart method that
converts any chart into an interactive plotly figure. For
two-panel charts (I-MR, X̄-R, X̄-S) the helper produces a
plotly::subplot() with a synchronised x-axis. plotly is in
Suggests, so it is only loaded on demand.tooltip argument is forwarded to plotly::ggplotly() for
full control of what hover boxes display.tests/testthat/test-vs-qcc.R (skipped silently if qcc is
not installed) compares the limits computed by shewhartr to the
reference values from the qcc package on its canonical example
datasets — pistonrings for the variables charts, orangejuice
for p / np, circuit for c. Every centre line and 3-sigma limit
agrees with qcc to within 1e-3 absolute tolerance.test-monitor.R no longer triggers the (correct) "small c_bar"
cli_warn from chart-c.R: the test data uses lambda = 12 so
the normal approximation is well-behaved. The 1-warning warning
in devtools::test() is gone; the suite is now FAIL 0 / WARN 0.This release closes most of the items left open in dev/ROADMAP.md §11.
shewhart_hotelling() is the package's first multivariate chart —
a Hotelling T² chart for jointly monitoring p > 1 correlated
variables. Both individual observations (subgroup = NULL) and
subgrouped data are supported, with the appropriate exact Phase I
limits (Beta for individuals, F for subgroups) and the slightly
wider Phase II limits as derived in Tracy, Young & Mason (1992)
and Montgomery (2019, Chapter 11). The implementation follows
Mason & Young (2002).T² statistic per row, its
decomposition by variable (the contribution of each variable to
the alarm — useful when T² signals but no univariate chart does),
and a logical flag against the appropriate chart-level UCL.multivariate-charts walks through the standard worked
example: a chemical process with three correlated quality
characteristics, showing how the multivariate chart catches a
correlation-breaking shift that any of the three univariate charts
would miss.monitor() now dispatches to monitor_ewma() and monitor_cusum()
(R/calibrate.R), so the calibrate(..., chart = "ewma") /
monitor(new_data, calib) workflow now works uniformly across
every chart in the package — not just the Shewhart-style ones.calibrate() accepts the new keys "ewma", "cusum", "hotelling".SSgompertzDummy self-starter is more robust: starting values for
b2 and b3 are now derived from the cumulative-mid-point heuristic
rather than hard-coded constants, fixing the convergence failure
with typical sample sizes that previously required \dontrun{} in
the example.This release is a comprehensive reposition of the package. The original
(v0.1.x, distributed as Shewhart) was COVID-focused and provided a
single function family for regression-based control charts. v1.0.0
is a full general-purpose SPC toolkit while preserving the
regression-chart speciality that motivated the package.
Rename. As part of the reposition, the package has been renamed
Shewhart → shewhartr to follow modern lowercase R-package
conventions and to free the name "Shewhart" for the methodology in
text and documentation. Update existing code with
library(shewhartr) (formerly library(Shewhart)).
The API has been substantially redesigned. Existing scripts written
against v0.1.x will not run unchanged.
covid-recife), not as
the organising principle.qcc and qicharts2, and
emphasises five differentiators: tidyverse-native API, broom
integration, regression-based charts as a first-class citizen,
embedded methodology (ARL, Box-Cox, runs tests), and an explicit
Phase I / Phase II workflow.shewhart_i_mr(), shewhart_xbar_r(), shewhart_xbar_s().shewhart_p(), shewhart_np(), shewhart_c(),
shewhart_u(). The c and u charts accept limits = "poisson" for
exact Poisson quantile limits rather than the normal approximation.shewhart_regression() replaces the old shewhart()
function with a cleaner API, an extensible model menu (auto,
linear, log, loglog, gompertz, logistic, plus user
formulas), automatic phase detection via configurable runs rules,
and proper handling of irregular time grids.shewhart_ewma() (Roberts 1959) for the
Exponentially Weighted Moving Average chart, with both time-varying
and steady-state limits, and shewhart_cusum() (Page 1954) for the
two-sided tabular CUSUM chart with configurable reference value k
and decision interval h. Both fit in the same S3 / broom / autoplot
pipeline as the classical charts.shewhart_runs() implements the eight Nelson rules (1984, 1985)
plus a Western Electric "7 in a row" variant for backward
compatibility. Rule sets are user-configurable on every chart.shewhart_arl() performs Monte Carlo Average Run Length simulation
for arbitrary rule combinations.shewhart_box_cox() returns the profile log-likelihood, optimal
lambda, and 95% CI in the Box & Cox (1964) tradition.shewhart_diagnostics() produces a five-panel Tukey-style residual
diagnostic display.shewhart_capability() computes Cp/Cpk/Pp/Ppk with bootstrap
confidence intervals.calibrate() and monitor() provide an explicit Phase I / Phase II
workflow.shewhart_chart with a
specific subclass.print(), summary(), autoplot(), tidy(), glance() and
augment() methods are provided for every chart type.locale argument
("en", "pt", "es", "fr") that controls plot labels and
informative messages. Validation errors remain in English to
facilitate cross-user debugging.Depends collapsed: the package no longer depends on the entire
tidyverse meta-package or on tibbletime/pals/scales. The new
Imports are minimal and explicit.plotly moved to Suggests to avoid pulling a heavy dependency
for users who don't need interactive plots.cli::cli_abort() / cli::cli_warn()
with multi-line, informative messages..onAttach() no longer prints a banner.data-raw/build_all.R script generates six synthetic datasets
(tablet_weight, bottle_fill, pcb_solder, claims_p,
temperature_drift, bacterial_growth).pkgdown at
https://castlaboratory.github.io/shewhartr/. Ten topical articles,
including a dedicated memory-based-charts vignette covering
EWMA, CUSUM and the trade-offs versus Shewhart-style charts.shewhart() (the plotting function) has been removed. Use
shewhart_regression() followed by autoplot().shewhart_fit() is no longer exported. Use shewhart_regression().shewhart_model() is no longer exported. Use shewhart_regression().shewhart_7points() is no longer exported. Use
shewhart_runs(rule = "we_seven_same") for the same behaviour, or
the recommended shewhart_runs(rule = "nelson_2_nine_same").phase_rule = "we_seven_same" to recover the
old behaviour..onAttach() has been removed..
(.fitted, .upper, .lower, .flag_*).