The design report ends its structure section with one line about series length:
Structure: Complete structure
Series length: T=4. Sigma for X/mR rests on 3 moving ranges.It names where the sigma behind the natural process limits comes from at the observed structure and series length. It is a fact placed beside the design state, not a judgment on it. Nothing about it changes which charts are valid, which is recommended, or which analyses are offered, and no threshold, label, or warning is attached. The analyst weighs it.
This page explains why the line reads the way it does, what the numbers behind it look like, and what a short series can and cannot tell you.
The position¶
The Variation Analysis System was built for analytic studies broadly. Statistical process control, where data arrive quickly and action follows each point, is a special case. VAS rests on the scientific method and the nontrivial replication of results, not on prescribed tests or rules for how many points a chart needs. Judgment about what the data are saying belongs to the analyst.
Small samples and few time periods raise uncertainty. The analysis still usually gives real insight into the causes of variation. So the library does not refuse a short series, does not grade it, and does not withhold capability or loss-function analysis from it. It says where sigma comes from and how many values carry it, and leaves the reading to the person who knows what the study is for.
Where sigma comes from, by design state¶
Every cell replicated (ADS 1). Sigma rests on within-cell replication. The number of time periods does not enter. A study with five conditions, six replicates each, and one time period is a complete study:
Series length: T=1. Sigma rests on within-cell replication.Any singleton cell (ADS 2, ADS 3). Sigma for the X and mR charts rests on the moving ranges between successive points: T − 1 of them for T time periods.
Series length: T=4. Sigma for X/mR rests on 3 moving ranges. Series length: T=2. Sigma for X/mR rests on a single moving range.No time variable and no replication. Nothing to say; the line is omitted. A bare response (no time, factors or plan) is not this case: its values are numbered in the order received, so it has T = N and the moving-range line above.
The same numbers appear in code as study.series_length, a frozen record with T,
n_moving_ranges, within_cell_df (the sum over cells of N_kt − 1), sigma_from_time,
mr_interval_80, and description. study.series_length_description is the sentence alone.
How precise a moving-range sigma is¶
For a stable normal process, the moving-range estimate of sigma (MR̄/d₂, 10-12 manual Eq 12-4) scatters around
the truth by an amount that depends only on how many points there are. The table gives the
10th, 50th and 90th percentiles of the estimate relative to the true sigma, and the ratio of
the 90th to the 10th, for every series length from 3 to 30. It was generated by
validation/short_series_bands.py (100,000 replicates per length, an independent random
stream per length, seed 20260903), contributed by @rabujamra
in #114 and
#119. The p10 and p90 columns are
carried in the library as MR_SIGMA_INTERVAL_80 and ride on study.series_length for
anyone who wants them in code; the design report prints only the sentence.
| n | p10 | p50 | p90 | p90 / p10 |
|---|---|---|---|---|
| 3 | 0.337 | 0.895 | 1.810 | 5.37 |
| 4 | 0.430 | 0.928 | 1.676 | 3.90 |
| 5 | 0.488 | 0.948 | 1.593 | 3.27 |
| 6 | 0.528 | 0.951 | 1.526 | 2.89 |
| 7 | 0.565 | 0.961 | 1.484 | 2.63 |
| 8 | 0.595 | 0.970 | 1.453 | 2.44 |
| 9 | 0.618 | 0.974 | 1.418 | 2.30 |
| 10 | 0.637 | 0.974 | 1.396 | 2.19 |
| 11 | 0.656 | 0.977 | 1.375 | 2.10 |
| 12 | 0.670 | 0.981 | 1.359 | 2.03 |
| 13 | 0.680 | 0.983 | 1.344 | 1.98 |
| 14 | 0.694 | 0.983 | 1.329 | 1.92 |
| 15 | 0.703 | 0.983 | 1.315 | 1.87 |
| 16 | 0.714 | 0.987 | 1.310 | 1.83 |
| 17 | 0.721 | 0.986 | 1.300 | 1.80 |
| 18 | 0.730 | 0.986 | 1.288 | 1.77 |
| 19 | 0.739 | 0.987 | 1.280 | 1.73 |
| 20 | 0.745 | 0.988 | 1.274 | 1.71 |
| 21 | 0.749 | 0.989 | 1.266 | 1.69 |
| 22 | 0.756 | 0.989 | 1.258 | 1.67 |
| 23 | 0.761 | 0.988 | 1.253 | 1.65 |
| 24 | 0.766 | 0.990 | 1.249 | 1.63 |
| 25 | 0.771 | 0.991 | 1.243 | 1.61 |
| 26 | 0.774 | 0.991 | 1.238 | 1.60 |
| 27 | 0.780 | 0.991 | 1.234 | 1.58 |
| 28 | 0.784 | 0.992 | 1.229 | 1.57 |
| 29 | 0.787 | 0.991 | 1.223 | 1.55 |
| 30 | 0.790 | 0.992 | 1.220 | 1.54 |
Read a row as: at four points, the middle 80% of moving-range sigma estimates fall between 0.43 and 1.68 times the true sigma. Most of the improvement is spent by eight to ten points; after that the spread narrows slowly. Nothing in the library is cut from this table. It is here so an analyst can see what T − 1 moving ranges mean.
validation/short_series_sampling.py, from the same contributor, reproduces the
single-process illustration that opened the discussion: the limits from the first T points
of one stable series, and the fraction of the true limit span they cover.
Two cautions a short series cannot raise for you¶
A trending series inflates its own moving range. When successive values rise, the differences between them carry the slope as well as the noise. The limits widen to absorb the very pattern an analyst is looking for, and nothing inside the moving range can tell the two apart. A test for monotone drift does not rescue this: with three differences, an independent series is monotone with probability 2/4! = 1/12, above 5%, so no four-point series can reach significance. The chart shows the climb; the limits cannot.
Four figures are not always four observations of one process. Benchmark figures constructed under different rules in different years, restated or risk-adjusted separately, are not draws from one process. No statement about series length can catch that. Only the analyst who knows how the numbers were made can.
The formulation matters more than the length¶
The question that started this page was about 476 organizations with four annual figures each, run as 476 separate four-point studies, each read from its summary line. Formulated as one study with the organization as a factor and the year as time, all of them sit on one chart at one scale, lane by lane, and the same rising pattern reproduces in nearly every lane. That agreement across independent subgroups is replication of a result in the scientific sense, and it is the finding. Hardly any single point falls outside its limits, and that is expected. The picture carries what the limits cannot.
study = pb.formulate(df, response="PER CAPITA EXPENDITURE", factors=["ACO"], time="YEAR")
print(study.design()) # ADS 2 ... Series length: T=4. Sigma for X/mR rests on 3 moving ranges.
result = study.execute(chart="X", by=[], companion=True)
result.plot(chart="X") # every organisation as a lane, one scaleBefore reading any limit, ask what decision the analysis serves. If action will be taken on the historical record, the limits describe what happened. If the aim is to predict next year and act on the prediction, the uncertainty that dominates is the extrapolation into a future the data has not seen, not the precision of the sigma behind the limits.
Two audiences, one position¶
In an analytic study the analyst sees every chart, and the judgment is theirs. The run rules are optional and off unless asked for; see WECO rules.
In automated monitoring of a device or a telemetry stream, nobody sees every chart, and the Western Electric rules are how the system notices on the analyst’s behalf. They stay in the library for that use. That is also why the signal summary reports a partial evaluation honestly: an automated check that says “no signals” on a series it could not examine is worse than one that says nothing. Points beyond the limits are always computed; rules 2 through 8 and the chart zones are opt-in.