## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 4.2) ## ----setup, message = FALSE--------------------------------------------------- library(shewhartr) library(ggplot2) library(dplyr) ## ----------------------------------------------------------------------------- # Correlated baseline — temperature and pressure track together set.seed(2026) n <- 80 Sigma <- matrix(c(1, 0.92, 0.92, 1), 2, 2) Z <- MASS::mvrnorm(n, mu = c(0, 0), Sigma = Sigma) # A "stuck pressure" fault: temperature still varies, pressure stays put faulty <- cbind(temp = rnorm(20, 0, 1), pressure = rnorm(20, 0, 0.05)) reactor <- tibble::tibble( hour = 1:100, temp = c(Z[, 1], faulty[, 1]), pressure = c(Z[, 2], faulty[, 2]) ) ## ----------------------------------------------------------------------------- shewhart_i_mr(reactor, value = temp, index = hour) |> autoplot() shewhart_i_mr(reactor, value = pressure, index = hour) |> autoplot() ## ----------------------------------------------------------------------------- fit <- shewhart_hotelling(reactor, vars = c(temp, pressure), index = hour) fit autoplot(fit) ## ----------------------------------------------------------------------------- fit$augmented |> filter(.flag_signal) |> select(hour, .t2, .upper, starts_with(".contrib_")) |> head(5) ## ----------------------------------------------------------------------------- set.seed(7) in_control <- as.data.frame(MASS::mvrnorm(120, c(0, 0), Sigma)) names(in_control) <- c("temp", "pressure") calib <- calibrate(in_control, vars = c(temp, pressure), chart = "hotelling") # Fresh data — pressure-sensor fault for the last 10 readings new_data <- as.data.frame(MASS::mvrnorm(40, c(0, 0), Sigma)) names(new_data) <- c("temp", "pressure") new_data$pressure[31:40] <- rnorm(10, 0, 0.05) mon <- monitor(new_data, calib) sum(mon$augmented$.flag_signal) autoplot(mon)