Getting Started with the `controlcharts` package
getting_started.RmdGetting Started
Constructing SPC Charts
Consider a basic time-series, comprised of two-years of monthly data:
# Simulate 2 years of monthly data
dat <- data.frame(
month = seq(as.Date("2024-01-01"), length.out = 24, by = "month"),
y = rnorm(24)
)
knitr::kable(head(dat))| month | y |
|---|---|
| 2024-01-01 | 0.0672962 |
| 2024-02-01 | 0.7948403 |
| 2024-03-01 | 1.5177286 |
| 2024-04-01 | -2.1648999 |
| 2024-05-01 | -0.2143888 |
| 2024-06-01 | 0.1285904 |
By default, the spc() function will construct an
i-chart (individuals chart; also referred to as an
XmR-chart):
spc_chart <- controlcharts::spc(data = dat,
numerators = y,
keys = month)The result of the spc() function is a list containing
three elements:
-
static_plot: a static SVG plot of the SPC chart -
html_plot: an HTML widget containing the interactive SPC chart (for use in Shiny/interactive contexts) -
limits: a data frame containing the calculated control limits
spc_chart$static_plot
# If you are using an interactive environment, you can display the HTML widget:
# spc_chart$html_plot| date | value | target | ll99 | ll95 | ll68 | ul68 | ul95 | ul99 | trend_line |
|---|---|---|---|---|---|---|---|---|---|
| 01/01/2024 | 0.07 | -0.14 | -2.53 | -1.73 | -0.93 | 0.66 | 1.46 | 2.25 | -0.56 |
| 01/02/2024 | 0.79 | -0.14 | -2.53 | -1.73 | -0.93 | 0.66 | 1.46 | 2.25 | -0.53 |
| 01/03/2024 | 1.52 | -0.14 | -2.53 | -1.73 | -0.93 | 0.66 | 1.46 | 2.25 | -0.49 |
| 01/04/2024 | -2.16 | -0.14 | -2.53 | -1.73 | -0.93 | 0.66 | 1.46 | 2.25 | -0.45 |
| 01/05/2024 | -0.21 | -0.14 | -2.53 | -1.73 | -0.93 | 0.66 | 1.46 | 2.25 | -0.42 |
| 01/06/2024 | 0.13 | -0.14 | -2.53 | -1.73 | -0.93 | 0.66 | 1.46 | 2.25 | -0.38 |
Funnel Plot
The same interface is provided for funnel charts. For this example, consider proportion data recorded by 10 organisations:
# Simulate proportion data for 10 organisations
denoms <- sample(100:200, 10)
funnel_data <- data.frame(
organisation = letters[1:10],
numerators = rbinom(10, size = denoms, prob = 0.2),
denominators = denoms
)
knitr::kable(funnel_data)| organisation | numerators | denominators |
|---|---|---|
| a | 27 | 170 |
| b | 23 | 122 |
| c | 35 | 178 |
| d | 26 | 184 |
| e | 38 | 161 |
| f | 22 | 105 |
| g | 46 | 190 |
| h | 27 | 121 |
| i | 27 | 137 |
| j | 35 | 197 |
For funnel plots, the default is a proportions (PR)
chart:
funnel_chart <- controlcharts::funnel(data = funnel_data,
numerators = numerators,
denominators = denominators,
keys = organisation)
funnel_chart$static_plot
knitr::kable(funnel_chart$limits, digits = 2)| denominator | group | numerator | value | z | ll99 | ll95 | ll68 | ul68 | ul95 | ul99 | target |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 105 | f | 22 | 20.95 | 0.36 | 9.15 | 12.57 | 15.85 | 23.54 | 27.65 | 32.71 | 19.55 |
| 121 | h | 27 | 22.31 | 0.75 | 9.75 | 13.01 | 16.10 | 23.26 | 27.06 | 31.74 | 19.55 |
| 122 | b | 23 | 18.85 | -0.20 | 9.78 | 13.03 | 16.11 | 23.24 | 27.03 | 31.69 | 19.55 |
| 137 | i | 27 | 19.71 | 0.05 | 10.26 | 13.37 | 16.30 | 23.03 | 26.59 | 30.96 | 19.55 |
| 161 | e | 38 | 23.60 | 1.25 | 10.89 | 13.81 | 16.54 | 22.75 | 26.02 | 30.02 | 19.55 |
| 170 | a | 27 | 15.88 | -1.25 | 11.09 | 13.96 | 16.62 | 22.66 | 25.84 | 29.72 | 19.55 |
| 178 | c | 35 | 19.66 | 0.04 | 11.26 | 14.08 | 16.68 | 22.59 | 25.69 | 29.47 | 19.55 |
| 184 | d | 26 | 14.13 | -1.97 | 11.38 | 14.16 | 16.73 | 22.54 | 25.58 | 29.30 | 19.55 |
| 190 | g | 46 | 24.21 | 1.55 | 11.50 | 14.24 | 16.77 | 22.49 | 25.48 | 29.13 | 19.55 |
| 197 | j | 35 | 17.77 | -0.64 | 11.63 | 14.33 | 16.82 | 22.44 | 25.37 | 28.95 | 19.55 |