Skip to contents

Getting 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
# Display the control limits
knitr::kable(head(spc_chart$limits), digits = 2)
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