Skip to contents

s20x 3.4.0

New features

  • predict20x() is now an S3 generic with methods for lm, glm and tslm fits, so one function covers them all. For a glm fit, type can be "response" (the default), "link" or "odds". tslm fits with ar(p) errors are not supported yet.
  • predict20x(), summary1way(), summary2way() and summaryStats() now return classed objects with print methods. What they print is unchanged, and printing a saved result shows the same table.
  • predict20x() accepts conf.level and digits, and summary1way() and summary2way() accept digits. The older cilevel and digit still work.
  • LazyData: true means data() is now optional.
  • The package now has a website, https://stats-uoa.github.io/s20x/, with the function reference and all the case studies as articles, and a logo.

Deprecated and removed

  • Deprecated predictCount() and predictGLM() in favour of predict20x().
  • Deprecated ciReg(), layout20x(), freq1way(), residPlot(), levene.test(), estimateContrasts(), crossFactors(), crosstabs(), onewayPlot(), twosampPlot(), autocorPlot() and skewness(), which the course no longer uses directly. summary1way() still draws its plot, and summaryStats() still reports skewness.
  • Deprecated the shapiro.wilk argument of normcheck().
  • Removed Levene’s test from eovcheck(). Passing levene now gives a warning and is ignored.
  • Removed the demo scripts.

Bug fixes

Results that changed

  • summary2way(): page = "nointeraction" applied FUN twice, so FUN = exp printed exp(exp(x)).
  • tslm(): residual diagnostics followed row order rather than time, which gave misleading ACF and time plots. ar(p) models are now fitted in time order, so for data not already sorted, residuals() and fitted() come back in time order. Coefficients do not change.
  • tslm(): offset() terms were dropped without warning. Using offset() with ar(p) now gives an error, because nlme::gls() does not support it.
  • eovcheck(): lm objects were refitted from the call, which lost subset and weights and failed for models with no data argument or a stored formula.
  • predict20x() and predictCount(): named columns in newdata are now matched by name. They were previously assigned by position, even when in a different order from the model.
  • predict20x() on a glm fit now gives glm intervals rather than treating the model as an lm fit.
  • onewayPlot() on an lm object, and summary1way(), ignored conf.level, interval.type, pooled and the other plotting options.
  • rowdistr(): comp = "within" printed blank chi-square statistics and p-values.

Errors on valid input

  • predict20x(), predictCount() and predictGLM() now work with transformed terms such as log(x) and factor(g).
  • summary1way() now works with transformed terms such as factor(x).
  • summary2way(): page = "interaction" no longer fails when a factor level contains a hyphen, and its headings now name the first factor rather than printing c("gender", "picture").
  • onewayPlot(y, g) no longer fails when ylabel and flabel are not supplied.
  • pairs20x(): pch, col, cex and bg now work with the base engine, and apply to the scatter plots.
  • displayPairs() keeps all comparisons when two factors share a level name.
  • summaryStats() now accepts na.action.
  • cooks20x() now accepts axisOpts with only some options set.
  • tslm() now finds variables local to a calling function when data or time is supplied.

Smaller fixes

  • summary2way(): print.out = FALSE now suppresses printing for the default output.
  • eovcheck(): col now sets the smoother colour with the base engine.
  • normcheck() labels a vector’s histogram from the call rather than always x, and accepts hex and palette-number colours.
  • openCaseStudy() no longer opens an editor in non-interactive sessions.

Case studies

  • Case studies 5.2 and 10.3 now render. A damaged header stopped them working.
  • Case study 5.2: corrected the R-squared (43.1%, not 36.7%), the dummy variable description, and a formula that referred to burn rather than price.
  • Case study 9.1: corrected swapped intervals for method 3 against methods 1 and 2.
  • Case study 10.1: removed a stray digit from an interval, and a decrease given as negative.
  • Moved the case studies to predict20x(), replaced T and F with TRUE and FALSE, and styled the code with styler.

Documentation and development

  • Rewrote the README and moved the release history into this file.
  • Corrected the documentation, which described ggplot2 and GGally as optional. Both are required dependencies.
  • Strengthened the tests with independent checks of the ANOVA results, prediction intervals, tslm AR fits and plotting defaults.
  • Added GitHub workflows for the website, case study styling and R-hub checks.

s20x 3.3.0

CRAN release: 2026-07-01

  • Prepared s20x 3.3.0 as a CRAN-facing release after optional plotting engine polish and the tslm() calling-environment compatibility fix.
  • Removed obsolete deprecated diagnostics methods that triggered roxygen warnings during documentation regeneration.
  • Updated diagnostic API tests so modcheck.lm removal is treated as deliberate while modelcheck remains the supported model diagnostic helper.
  • Removed stale roxygen argument tags for deleted diagnostics methods so regenerated Rd usage sections pass CRAN checks.
  • Replaced non-standard DESCRIPTION contributor roles with CRAN-standard ctb roles.
  • Rendered casestudy() files in a fresh environment with globalenv() as the parent instead of passing .GlobalEnv directly.
  • Validated with strict tests, local as-CRAN checks, and external CRAN preflight submissions.

s20x 3.2.325

  • Added regression tests comparing tslm() calling-environment fits with explicit data-frame fits.
  • Covered both ordinary lm-backed fits and AR gls-backed fits using the existing beer.df and airpass.df teaching datasets.
  • Preserved the Stage 21.1 tslm() implementation while locking in the new data-optional behaviour before CRAN submission.
  • Kept tests offline, deterministic, and focused on user-visible teaching workflows.
  • Validated by the standard s20x stage workflow.

s20x 3.2.323

  • Updated tslm() so formulas can be evaluated from the calling environment when data is omitted, matching the familiar lm() and glm() workflow.
  • Preserved explicit data-frame use for tslm() while using model-frame-based data handling for safer internal evaluation.
  • Added deterministic tests covering omitted data and explicit data for ordinary tslm() fits.
  • Kept the change small and backward compatible for the Stage 21.1 CRAN-preparation workflow.
  • Validated by the standard s20x stage workflow.

s20x 3.2.320

  • Added final release-polish wording for optional plotting engines, with base graphics remaining the default.
  • Confirmed Stage 20.1 is limited to dependency-safety and release-note polish rather than new plotting functionality.
  • Preserved compatibility by treating ggplot2 and GGally as optional engines rather than required plotting dependencies.
  • Used the stage workflow’s validation-mode detection so only changed files trigger package checks.

s20x 3.2.319

  • Added final release-polish wording for optional plotting engines, with base graphics remaining the default.
  • Confirmed Stage 20.1 is limited to dependency-safety and release-note polish rather than new plotting functionality.
  • Preserved compatibility by treating ggplot2 and GGally as optional engines rather than required plotting dependencies.
  • Used the stage workflow’s validation-mode detection so only changed files trigger package checks.

s20x 3.2.318

  • Adjusted pairs20x() ggplot2 diagonal histogram panels so the y-limits reserve base-like headroom for variable labels.
  • Moved diagonal labels above the histogram bars rather than inside the plotted counts.
  • Added a regression test for the ggplot2 histogram panel y-limit contract.
  • Preserved the base graphics engine as the default and kept ggplot2/GGally optional.
  • Validated by the standard s20x stage workflow.

s20x 3.2.317

  • Added the missing ggplot2 geom_segment() import used by the base-like modelcheck() Cook’s distance panel.
  • Set the returned pairs20x() GGally matrix axisLabels field to document the outside-axis contract used by the optional ggplot2 engine.
  • Preserved the Stage 19.7 pairs20x() visual-parity changes and the base graphics default.
  • Validated by the standard s20x stage workflow.

s20x 3.2.315

  • Added the missing ggplot2 geom_text import used by the modelcheck() Cook’s distance labels.
  • Kept the Stage 19.6.3 base-like ggplot2 modelcheck layout and Cook’s distance display unchanged.
  • Preserved the base graphics engine as the default and kept ggplot2 optional.
  • Validated by the standard s20x stage workflow.

s20x 3.2.313

  • Changed the optional eovcheck() ggplot2 smoother example to use the peru.fit regression model rather than the oyster one-way ANOVA-style fit.
  • Kept the oyster example for the ggplot2 object-return and Levene/two-standard-deviation demonstrations where it remains appropriate.
  • Avoided loess singularity warnings in the documented smoother example while preserving package behaviour.
  • Validated by the standard s20x stage workflow.

s20x 3.2.312

  • Added an explicit loess formula to the optional modelcheck() ggplot2 smoother so printing the diagnostic plot object is silent.
  • Preserved the Stage 19.6 base-like ggplot2 diagnostic styling and Cook’s distance vertical-line display.
  • Kept the base graphics engine as the default and preserved the optional ggplot2 object-return paths.
  • Validated by the standard s20x stage workflow.

s20x 3.2.310

  • Polished the optional ggplot2 eovcheck output so the two-standard-deviation reference lines remain visible.
  • Included the plus/minus two-standard-deviation limits in the plotted y-range and matched the base plot line weight more closely.
  • Removed the default grey ggplot2 panel styling from the optional eovcheck engine to keep the teaching plot closer to base graphics.
  • Kept the base graphics engine as the default and preserved the optional ggplot2 object-return path.
  • Validated by the standard s20x stage workflow.

s20x 3.2.309

  • Extended the optional normcheck() ggplot2 histogram density curve across the full displayed x-axis range.
  • Kept the histogram as a native ggplot2 geom_histogram() layer while replacing stat_function() with explicit density data.
  • Preserved base graphics defaults and existing normcheck() return behaviour.
  • Documented the Stage 19.5 normcheck density-curve polish notes.
  • Validated by the standard s20x stage workflow.

s20x 3.2.308

  • Polished the optional ggplot2/GGally engine for pairs20x() while preserving base graphics as the default.
  • Renamed internal pairs20x ggplot2 helpers to use clearer *_ggplot2 names.
  • Kept the existing ggplot2/GGally example and return-class tests for the optional plot matrix path.
  • Documented the Stage 19.4 pairs20x plotting-engine review notes.
  • Validated by the standard s20x stage workflow.

s20x 3.2.307

  • Polished the optional ggplot2 engine for modelcheck() while preserving base graphics as the default.
  • Renamed internal modelcheck ggplot2 helpers and list classes to use clearer *_ggplot2 names.
  • Reworked ggplot2 aesthetic mappings to use data-column pronouns and avoid external-vector warnings.
  • Added a print method for multiple ggplot2 modelcheck plots and ggplot2-engine examples for individual diagnostics.
  • Added offline regression tests for the renamed class and clean plot printing.
  • Validated by the standard s20x stage workflow.

s20x 3.2.306

  • Polished the optional ggplot2 engine for eovcheck() while preserving base graphics as the default.
  • Renamed internal eovcheck ggplot2 helpers to use clearer *_ggplot2 names.
  • Reworked ggplot2 aesthetic mappings to use data-column pronouns and avoid external-vector warnings.
  • Added ggplot2-engine examples and an offline regression test for clean plot printing.
  • Validated by the standard s20x stage workflow.

s20x 3.2.305

  • Restored the documented s20xNormcheckGgplot2 return class while retaining the clearer internal s20xNormcheck_ggplot2 class alias.
  • Preserved the Stage 19.1 ggplot2 normcheck plotting fixes, examples, and naming cleanup.
  • Fixed compatibility with existing diagnostic plotting tests after the internal class-name cleanup.
  • Preserved base graphics as the default plotting engine and kept ggplot2 optional.
  • Validated by the standard s20x stage workflow.

s20x 3.2.303

  • Added regression tests that scan controlled R and test files for namespace operators in executable code.
  • Added regression tests that scan controlled R and test files for dynamic namespace lookup helpers.
  • Reworked the internal-test helper to avoid getFromNamespace() while preserving access to unexported helpers during tests.
  • Preserved the Stage 18.6 import-based plotting cleanup and base graphics defaults.
  • Validated by the standard s20x stage workflow.

s20x 3.2.302

  • Replaced dynamic ggplot2 and GGally plotting function lookups with direct calls backed by roxygen import declarations.
  • Moved ggplot2 and GGally into Imports so their functions can be declared through NAMESPACE.
  • Removed namespace operator usage from controlled package and test code by using imported functions and a shared internal-test helper.
  • Preserved base graphics as the default plotting engine.
  • Validated by the standard s20x stage workflow.

s20x 3.2.301

  • Refactored normcheck ggplot2 Q-Q and histogram builders to use grouped optional plotting function lookups.
  • Refactored the eovcheck ggplot2 diagnostic builder to use grouped optional plotting function lookups.
  • Preserved base graphics as the default engine and kept ggplot2 optional.
  • Validated by the standard s20x stage workflow.

s20x 3.2.300

  • Added a grouped optional plotting function lookup helper for ggplot2 implementations.
  • Refactored modelcheck ggplot2 residual and Cook distance builders to use grouped helper lookups.
  • Preserved base graphics as the default engine and kept ggplot2 optional.
  • Validated by the standard s20x stage workflow.

s20x 3.2.299

  • Centralised optional plotting function lookup behind the internal getPlottingFunction() helper.
  • Replaced repeated direct getExportedValue() calls in the ggplot2 and GGally plotting implementations.
  • Preserved base graphics as the default engine and kept ggplot2/GGally optional.
  • Validated by the standard s20x stage workflow.

s20x 3.2.298

  • Added matchPlottingEngine() as a shared internal helper for plotting engine argument matching.
  • Replaced repeated match.arg(engine) calls in normcheck(), eovcheck(), modelcheck(), and pairs20x().
  • Added a Stage 18.2 plotting engine dispatch note for the cleanup and deferred candidates.
  • Ignored the local .s20x_validation_mode file so R CMD check tarballs do not include validation state.
  • Preserved base graphics defaults, optional ggplot2/GGally behavior, and teaching-oriented plotting output.

This file records user-facing and developer-facing changes for s20x. It is a release-note summary, not a commit-by-commit history.

s20x 3.2.297

  • Added a shared internal helper for optional plotting package availability checks.
  • Replaced duplicated ggplot2 and GGally engine checks in normcheck(), eovcheck(), modelcheck(), and pairs20x().
  • Added a Stage 18.1 plotting audit note to record remaining cleanup candidates.
  • Preserved base graphics defaults, optional ggplot2/GGally behavior, and teaching-oriented plotting output.

s20x 3.2.296

  • Clarified README guidance for ggplot2 diagnostic return values.
  • Added tests that pin named-list return contracts for multi-plot ggplot2 diagnostics.
  • Confirmed single selected diagnostics still return individual ggplot objects where appropriate.
  • Preserved base graphics as the default plotting engine.

s20x 3.2.295

Modernisation

  • Completed a final consistency pass over README and package-level plotting-engine documentation.
  • Clarified optional ggplot2 and GGally requirements for diagnostic plotting helpers.
  • Ignored stage-runner validation scratch files in package builds so strict checks do not report them as hidden-file notes.
  • No plotting behaviour or public API changed.

s20x 3.2.294

Modernisation

  • Clarified README guidance for choosing between base and ggplot2 diagnostic plotting engines.
  • Added package-level documentation describing stable teaching defaults and optional plotting engines.
  • No plotting behaviour or public API changed.

s20x 3.2.293

Modernisation

  • Added a README-level explanation of the optional diagnostic plotting engines while preserving base graphics as the default teaching workflow.
  • Added a Stage 17.4 developer note recording the documentation-only scope and optional-dependency guard pattern.
  • No plotting behaviour or public API changed.

s20x 3.2.292

  • Removed no-op examplesIf blocks from deprecated, unexported legacy helper documentation.
  • Clarified the deprecated boxqq(), stripqq(), and modcheck() descriptions without restoring exported examples.
  • Preserved legacy helper behavior while reducing CRAN-facing example clutter in generated Rd files.
  • Regenerated documentation should be produced by devtools::document() during the stage runner.

s20x 3.2.291

  • Refreshed legacy helper documentation so deprecated, unexported functions no longer show direct internal-call examples.
  • Replaced older case-study dontrun examples with interactive examples for CRAN-facing documentation hygiene.
  • Preserved case-study and deprecated-helper behavior while making the examples clearer for current teaching material.
  • Regenerated documentation should be produced by devtools::document() during the stage runner.

s20x 3.2.290

  • Clarified that the default base plotting engine preserves direct teaching graphics while optional ggplot2 engines return reusable plot objects.
  • Added guarded examples for optional ggplot2 and GGally plotting engines in normcheck(), eovcheck(), modelcheck(), and pairs20x().
  • Kept ggplot2 and GGally usage behind requireNamespace() guards so examples remain compatible when optional packages are unavailable.
  • Regenerated documentation should be produced by devtools::document() during the stage runner.

s20x 3.2.288

Development notes

  • Archived the Stage 16 plotting modernisation developer note under Completed.
  • Recorded that pairs20x(), normcheck(), eovcheck(), and modelcheck() now have optional ggplot2 engines with base graphics preserved as the default.
  • Kept this as a documentation wrap-up stage with no intended plotting behavior changes.

s20x 3.2.287

Modernisation

  • Refined the optional ggplot2/GGally panels in pairs20x() with a base-like white theme.
  • Preserved the original base graphics output as the default teaching path.
  • Kept GGally and ggplot2 as optional dependencies for the modern plotting engine.

s20x 3.2.286

Modernisation

  • Added an optional ggplot2 engine to modelcheck() while preserving the original base graphics output as the default.
  • Returned a ggplot object for the optional residual-versus-fitted model checking diagnostic when ggplot2 is installed.

s20x 3.2.285

Modernisation

  • Added an optional ggplot2 engine to eovcheck() while preserving the original base graphics output as the default.
  • Returned a ggplot object for the optional residual-versus-fitted equality-of-variance diagnostic when ggplot2 is installed.

s20x 3.2.280

Modernisation

  • Added an optional ggplot2 engine to normcheck() while preserving the original base graphics output as the default.
  • Returned ggplot objects for optional normal Q-Q and residual histogram diagnostics when ggplot2 is installed.

s20x 3.2.278

Modernisation

  • Added an optional ggplot2/GGally engine to pairs20x() while preserving the original base graphics output as the default.

s20x 3.2.276

Data

  • Store nzarrivals.df$month as a factor with levels ordered by month.abb and update the dataset documentation accordingly.

s20x 3.2.274

Data

  • Add nzarrivals.df, a monthly Stats NZ Infoshare arrivals data set, and fix the Stage 14 colors() import so note-level checks remain strict.

s20x 3.2.273

  • Document remaining Stage 14 internal helper functions with roxygen2 comments.

s20x 3.2.272

  • Document internal prediction helper functions with roxygen2 comments.

s20x 3.2.271

Modernisation

  • Removed qualified namespace calls from R source files by adding roxygen imports, broadened internal helper documentation, and hardened the Stage 14 style-compliance regression test.

s20x 3.2.270

Modernisation

  • Consolidated residual and fitted-value extraction for targeted diagnostic plotting internals without changing plotting output or public APIs.

s20x 3.2.269

Modernisation

  • Added a small internal graphics-parameter save/restore helper and used it in targeted diagnostic plotting code paths without changing plotting output.

s20x 3.2.268

Modernisation

s20x 3.2.267

Modernisation

  • Added prediction-wrapper regression coverage for multi-row return shapes, binomial-logit predictGLM() output, and wrapper-level quasi interval multiplier behaviour without changing prediction internals.

s20x 3.2.264

Modernisation

  • Standardised predictGLM() return shape to a data frame with stable fit, lwr, and upr columns, while preserving link/response scale calculations and legacy fallback to link-scale output for unsupported type values.

s20x 3.2.263

Modernisation

  • Consolidated internal prediction interval output formatting for linear-model and GLM teaching wrappers while preserving legacy return shapes, column names, rounding, and scale handling.

s20x 3.2.262

Modernisation

  • Consolidated prediction-wrapper newdata data-frame validation into a shared internal helper and removed duplicated validation from predictGLM() without changing prediction output or error text.

s20x 3.2.261

Modernisation

  • Added the Stage 13 prediction-wrapper internal audit note, identifying narrow maintenance targets for prediction internals while deferring public API and behaviour changes.

s20x 3.2.260

Modernisation

  • Finalised the Stage 12 documentation-coherence developer note, summarising completed documentation improvements and deferring deeper API or behavioural refactors to later stages.

s20x 3.2.259

Modernisation

  • Audited exported help examples for strict-check suitability, confirmed remaining synthetic examples are deterministic or guarded, and tightened freq1way() documentation wording without changing behaviour.

s20x 3.2.258

Modernisation

  • Standardised diagnostic help wording for model checking, residuals versus fitted values, Q-Q plots, and plotting side effects without changing package behaviour.

s20x 3.2.257

Modernisation

  • Guarded the displayPairs() help example so it only runs the optional emmeans workflow when emmeans is available, keeping examples suitable for strict checks without changing package behaviour.

s20x 3.2.256

Modernisation

  • Clarified prediction helper and AR-error model documentation so teaching wrappers are distinguished from ordinary predict() and independent-error ANOVA behaviour without changing package behaviour.

s20x 3.2.255

Modernisation

  • Replaced the artificial summary1way() help example with computer.df, made the summaryStats() matrix example dataset-based, and tightened summary-helper documentation wording without changing behaviour.

s20x 3.2.254

Modernisation

  • Applied a strict NZ English and grammar documentation pass and accepted "normalised" as a package-owned alias for "normalized" residual diagnostics while preserving compatibility.

s20x 3.2.253

Modernisation

  • Made diagnostic helper examples deterministic or dataset-based and corrected small documentation spelling and grammar issues without changing diagnostic behaviour.

s20x 3.2.252

Modernisation

  • Replaced the interactionPlots() help examples with the arousal.df teaching dataset and clarified the deprecated vector-form example wording without changing plotting behaviour.

s20x 3.2.251

Modernisation

  • Added a Stage 12 documentation audit covering help examples, teaching datasets, time-series examples, R CMD check suitability, and NZ English spelling and grammar notes without changing package behaviour.

s20x 3.2.250

Modernisation

  • Added a Stage 11 completion plan summarising completed API-consistency work and deferring larger documentation and internal refactor items to later stages.

s20x 3.2.249

Modernisation

  • Documented diagnostic plotting helper return conventions and added regression tests for current validation behaviour without changing plotting behaviour.

s20x 3.2.248

Modernisation

  • Documented and tested crosstabs() and rowdistr() printed-output and invisible-return conventions without changing behaviour.

s20x 3.2.247

Modernisation

  • Documented and tested summary2way() printed-output and invisible-return conventions without changing behaviour.

s20x 3.2.246

Modernisation

  • Documented and tested summary1way() printed-output and invisible-return conventions without changing behaviour.

s20x 3.2.245

Modernisation

  • Documented and tested summaryStats() printed-output and invisible-return conventions without changing behaviour.

s20x 3.2.244

Modernisation

  • Added a Stage 11 return-convention modernisation plan to guide future low-risk API updates without changing public behaviour.

s20x 3.2.243

Modernisation

  • Added a Stage 11 audit of printed-output and invisible-return conventions without changing public behaviour.

s20x 3.2.242

Modernisation

  • Standardised legacy-helper documentation wording without changing public behaviour.

s20x 3.2.241

Modernisation

  • Added regression tests documenting current prediction interval semantics before further API changes.

s20x 3.2.240

Modernisation

  • Consolidated shared confidence-interval arithmetic for prediction teaching wrappers without changing public prediction behaviour.

Modernisation

  • Extracted shared internal prediction helpers for linear-model and GLM teaching wrappers without changing public prediction behaviour.

Modernisation

  • Added a deeper Stage 11 legacy API audit focused on outdated teaching wrappers, deprecation candidates, and future modernisation priorities.

Modernisation

  • Added a camelCase outputDir alias for rendered case-study helpers while preserving output_dir compatibility.
  • Clarified prediction helper documentation so their teaching-wrapper roles and return values are explicit.
  • Added a Stage 11 API consistency audit for prediction helpers before changing public interfaces.
  • Completed the Stage 10 style-normalisation sweep for remaining legacy helpers without changing public interfaces.
  • Normalised style in Cook’s distance plotting helpers without changing their public interface.
  • Normalised style in count prediction helpers without changing their public interface.
  • Normalised style in row distribution helpers without changing their public interface.
  • Normalised style in residual diagnostic plotting helpers without changing their public interface.
  • Normalised style in autocorrelation plotting helpers without changing their public interface.
  • Normalised style in trend scatter plotting helpers without changing their public interface.
  • Normalised style in two-way ANOVA summary helpers without changing their public interface.
  • Normalised style in summary statistics helpers without changing their public interface.
  • Normalised style in the deprecated one-way frequency table helper without changing its public interface.
  • Normalised style in the one-way ANOVA summary helper without changing its public interface.
  • Normalised style in package version and skewness utility helpers without changing their public interface.
  • Normalised style in regression confidence interval helpers without changing their public interface.
  • Normalised style in generalised linear model prediction helpers without changing their public interface.
  • Normalised style in one-way comparison helper functions without changing their public interface.
  • Normalised style in case study helper functions without changing their public interface.
  • Normalised style in deprecated grouped QQ plotting helpers.
  • Normalised style in small utility files as part of the staged modernisation work.
  • Added package infrastructure for automated R CMD check runs.
  • Updated package build ignores for repository-only infrastructure files.

s20x 3.2.2

CRAN release: 2026-01-14

A small number of the datasets have been slightly altered, and their associated documentation accordingly. The changes consist of adding some useful extra variables to the three time series datasets airpass.df, beer.df and larain.df. These variables are t which is just a time index to save the user creating it if they want to fit a lag response model, and either month and year or both. These are factor variables giving the year the observation recorded, and if relevant the month. These extra variables can be used for time series analysis or plots.

In addition we have made an attempt to use SI units rather than imperial units where sensible. Some examples of where it is sensible: converting inches to millimetres, pounds to kilograms, and acre-feet/gallons to litres (or megalitres). Some examples of where it is not sensible are carats (industry standard) and converting blood pressue to kiloPascals instead of millimetres of mecury (mm Hg), which again is the health profession standard. If these conversions have been made, then they have been done as extra variables added to the dataset, rather than replacing the original measurements. The logic for this is to preserve the datasets as is to avoid lecture notes mismatches - at least for the time being.

s20x 3.1-24

A new function called modcheck has been added. This allows all four standard 20x model checking plots – residuals versus fitted values, a normal Q-Q plot, a histogram of residuals, and a Cook’s distance plot – to be drawn on the same plot at once. This function needed a much more flexible version of normcheck, and needed modifications to eovcheck and cooks20x. I have not put it on CRAN yet because of the chance that it will fail for our current students. We really need some unit testing in this package so that this process can be sped up.

s20x 3.1-21

Ben Stevenson added some code to summary2way so the attribute information from TukeyHSD is preserved. That is so you see this

> summary2way(fit, page = "interaction")
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = fit)

$`store:crust`

instead of this

> summary2way(fit, page = "interaction")
$`store:crust`