{
 "generated": "2026-10-21",
 "commit": "c3cfd50",
 "commitDate": "2026-10-21",
 "uncommittedChanges": false,
 "node": "22.16.0",
 "modules": [
  {
   "file": "spc-core.js",
   "sha": "44183f9bd23f9ba791f7a14a882d479b113fc5a9d3c421befc2c5ae88bb0fbe4"
  },
  {
   "file": "stats-core.js",
   "sha": "6a42c8190f66b3a51947a99fadb392258ca6ee035ed971a2246e3e1176a84b66"
  },
  {
   "file": "lean-core.js",
   "sha": "d142a61e3e3cddcbcfd72a6261d5582f3943bea4a3ab4ea3bb813e51d793550b"
  }
 ],
 "totals": {
  "checks": 341,
  "passed": 341,
  "cases": 29
 },
 "published": {
  "cases": 21,
  "checks": 154,
  "passed": 154
 },
 "software": {
  "cases": 8,
  "checks": 187,
  "passed": 187
 },
 "sources": {
  "nist-6322": {
   "label": "NIST/SEMATECH e-Handbook of Statistical Methods, §6.3.2.2 Individuals Control Charts (flow-rate example, 10 batches)",
   "url": "https://www.itl.nist.gov/div898/handbook/pmc/section3/pmc322.htm"
  },
  "nist-6321": {
   "label": "NIST/SEMATECH e-Handbook of Statistical Methods, §6.3.2.1 Shewhart X-bar and R and S Control Charts (table of A2, D3, D4)",
   "url": "https://www.itl.nist.gov/div898/handbook/pmc/section3/pmc321.htm"
  },
  "c4-tables": {
   "label": "Standard published tables of control-chart constants (c4, d2). The test file does not name one specific publication.",
   "url": null
  },
  "nist-6331": {
   "label": "NIST/SEMATECH e-Handbook of Statistical Methods, §6.3.3.1 Counts Control Charts (wafer defects, 25 wafers)",
   "url": "https://www.itl.nist.gov/div898/handbook/pmc/section3/pmc331.htm"
  },
  "nist-6332": {
   "label": "NIST/SEMATECH e-Handbook of Statistical Methods, §6.3.3.2 Proportions Control Charts (30 wafers of 50 chips)",
   "url": "https://www.itl.nist.gov/div898/handbook/pmc/section3/pmc332.htm"
  },
  "montgomery-318": {
   "label": "D. C. Montgomery, Introduction to Statistical Quality Control, p. 318 (defects in computers), as reproduced in the IMSL JMSL 6.0 UChart documentation, which does not state the edition",
   "url": "https://help.imsl.com/java/6.0/manual/worddocuments/uchart.htm"
  },
  "montgomery-321": {
   "label": "D. C. Montgomery, Introduction to Statistical Quality Control, p. 321 (dyeing rolls of cloth), as reproduced in the IMSL JMSL 6.0 UChart documentation (UChartUnequal), which does not state the edition",
   "url": "https://help.imsl.com/java/6.0/manual/worddocuments/uchart.htm"
  },
  "spcxl-laney": {
   "label": "SPC for Excel, “Laney p′ Control Chart” (health-care data, 16 months; Table 1 data, Table 2 limits)",
   "url": "https://www.spcforexcel.com/knowledge/attribute-control-charts/laney-p-control-chart/"
  },
  "nist-616": {
   "label": "NIST/SEMATECH e-Handbook of Statistical Methods, §6.1.6 What is Process Capability? (example: USL 20, LSL 8, mean 16, s 2)",
   "url": "https://www.itl.nist.gov/div898/handbook/pmc/section1/pmc16.htm"
  },
  "spcxl-cap": {
   "label": "SPC for Excel, “Process Capability and Variation” (Cpk confidence-interval example: Cpk 1.17, 50 points, 95%)",
   "url": "https://www.spcforexcel.com/knowledge/process-capability/process-capability-and-variation/"
  },
  "minitab-gageaiag": {
   "label": "Minitab output for its sample data set GAGEAIAG.MTW (same AIAG data), Gage R&R Study (Crossed), ANOVA method. Values as transcribed in LimitLine’s test file; no public link.",
   "url": null
  },
  "spcxl-grr": {
   "label": "SPC for Excel, “Three Methods to Analyze Gage R&R Studies” (raw data, stated there to be from the AIAG Measurement Systems Analysis manual, 4th edition; ANOVA %Contribution, Table 5)",
   "url": "https://www.spcforexcel.com/knowledge/measurement-systems-analysis/three-methods-analyze-gage-rr-studies"
  },
  "strd-longley": {
   "label": "NIST Statistical Reference Datasets (StRD), Linear Least Squares Regression: Longley (certified values, higher difficulty)",
   "url": "https://www.itl.nist.gov/div898/strd/lls/data/Longley.shtml"
  },
  "strd-numacc4": {
   "label": "NIST StRD Univariate Summary Statistics: NumAcc4 (certified mean 10000000.2, s 0.1, lag-1 autocorrelation −0.999).",
   "url": "https://www.itl.nist.gov/div898/strd/univ/data/NumAcc4.shtml",
   "url2": "https://www.stata.com/support/cert/nist17/"
  },
  "strd-numacc2": {
   "label": "NIST StRD Univariate Summary Statistics: NumAcc2 (certified s 0.1, lag-1 autocorrelation −0.999).",
   "url": "https://www.itl.nist.gov/div898/strd/univ/data/NumAcc2.shtml",
   "url2": "https://www.stata.com/support/cert/nist17/"
  },
  "qicharts": {
   "label": "J. Anhøj, “Run charts with R”, vignette of the R package qicharts (CRAN): table of run-chart limits for 10–30 useful points, and Figure 2",
   "url": "https://cran.csiro.au/web/packages/qicharts/vignettes/runcharts.html"
  },
  "oee-com": {
   "label": "OEE.com, “Calculating OEE” worked example (420 min planned, 47 min down, ideal cycle 1.0 s, 19,271 pieces, 423 rejects)",
   "url": "https://www.oee.com/calculating-oee/"
  },
  "lei-takt": {
   "label": "Lean Enterprise Institute, Lean Lexicon: takt time (480 min available, 240 demanded → 2 min)",
   "url": "https://www.lean.org/lexicon-terms/takt-time/"
  },
  "lei-heijunka": {
   "label": "Lean Enterprise Institute, Lean Lexicon: heijunka, leveling by volume (500 a week, 200 on Monday → 100 a day)",
   "url": "https://www.lean.org/lexicon-terms/heijunka/"
  },
  "scipy": {
   "label": "SciPy 1.18 (scipy.stats), run by ref/ref_gen.py on seeded random data; values stored in ref/refs.json",
   "url": "https://scipy.org/"
  },
  "statsmodels": {
   "label": "statsmodels (OLS, anova_lm, normal_ad, proportions_ztest, variance_inflation_factor), run by ref/ref_gen.py on seeded random data; values stored in ref/refs.json",
   "url": "https://www.statsmodels.org/"
  }
 },
 "areas": [
  {
   "id": "variables",
   "title": "Variables control charts",
   "kind": "published",
   "cases": [
    {
     "name": "NIST individuals chart: flow rate, 10 batches",
     "sources": [
      "nist-6322"
     ],
     "datasets": [
      "validation/nist-6322-flow-rate.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "Moving ranges (rounded to 0.1)",
       "expected": "2, 2.3, 1.4, 3.5, 3.4, 1.4, 0.2, 1.2, 1.5",
       "limitline": "2, 2.3, 1.4, 3.5, 3.4, 1.4, 0.2, 1.2, 1.5",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Mean (centre line)",
       "expected": 50.81,
       "limitline": 50.81,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Average moving range MR̄",
       "expected": 1.8778,
       "limitline": 1.8777777777777784,
       "difference": -0.000022222222221479626,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Individuals UCL",
       "expected": 55.8041,
       "limitline": 55.80408983451537,
       "difference": -0.000010165484624735655,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Individuals LCL",
       "expected": 45.8159,
       "limitline": 45.81591016548463,
       "difference": 0.000010165484631841082,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "MR chart UCL = 3.267 × MR̄",
       "expected": 6.1347726,
       "limitline": 6.134700000000002,
       "difference": -0.00007259999999753575,
       "tolerance": "± 0.001",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "Points beyond the 3-sigma limits",
       "expected": 0,
       "limitline": 0,
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Phase I: limits from the first 10 of 13 points, UCL",
       "expected": 55.8041,
       "limitline": 55.80408983451537,
       "difference": -0.000010165484624735655,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Phase I: limits from the first 10 of 13 points, LCL",
       "expected": 45.8159,
       "limitline": 45.81591016548463,
       "difference": 0.000010165484631841082,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "NIST table of control-chart constants A2, D3, D4 (n = 2 to 10)",
     "sources": [
      "nist-6321"
     ],
     "datasets": [],
     "note": "LimitLine derives d2 and d3 by numerical integration and c4 from the gamma function; this compares the resulting factors with NIST’s printed table.",
     "checks": [
      {
       "statistic": "A2, n = 2",
       "expected": 1.88,
       "limitline": 1.8799698182878486,
       "difference": -0.00003018171215130039,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 2",
       "expected": 0,
       "limitline": 0,
       "difference": 0,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 2",
       "expected": 3.267,
       "limitline": 3.2665236888282316,
       "difference": -0.0004763111717682733,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 3",
       "expected": 1.023,
       "limitline": 1.0233259525862313,
       "difference": 0.0003259525862313595,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 3",
       "expected": 0,
       "limitline": 0,
       "difference": 0,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 3",
       "expected": 2.575,
       "limitline": 2.574593665254613,
       "difference": -0.0004063347453873156,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 4",
       "expected": 0.729,
       "limitline": 0.7285974499089254,
       "difference": -0.00040255009107459383,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 4",
       "expected": 0,
       "limitline": 0,
       "difference": 0,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 4",
       "expected": 2.282,
       "limitline": 2.2820546448087433,
       "difference": 0.00005464480874328714,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 5",
       "expected": 0.577,
       "limitline": 0.5768190730159006,
       "difference": -0.00018092698409932773,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 5",
       "expected": 0,
       "limitline": 0,
       "difference": 0,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 5",
       "expected": 2.115,
       "limitline": 2.114496137029059,
       "difference": -0.0005038629709410714,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 6",
       "expected": 0.483,
       "limitline": 0.4832465431368994,
       "difference": 0.0002465431368994242,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 6",
       "expected": 0,
       "limitline": 0,
       "difference": 0,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 6",
       "expected": 2.004,
       "limitline": 2.0038312664486018,
       "difference": -0.00016873355139823687,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 7",
       "expected": 0.419,
       "limitline": 0.41928346042231124,
       "difference": 0.0002834604223112547,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 7",
       "expected": 0.076,
       "limitline": 0.07570367850434112,
       "difference": -0.0002963214956588772,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 7",
       "expected": 1.924,
       "limitline": 1.924296321495659,
       "difference": 0.00029632149565905763,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 8",
       "expected": 0.373,
       "limitline": 0.3725274556686644,
       "difference": -0.00047254433133558926,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 8",
       "expected": 0.136,
       "limitline": 0.13617237988198938,
       "difference": 0.0001723798819893707,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 8",
       "expected": 1.864,
       "limitline": 1.8638276201180106,
       "difference": -0.00017237988198948173,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 9",
       "expected": 0.337,
       "limitline": 0.336696935721188,
       "difference": -0.00030306427881204856,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 9",
       "expected": 0.184,
       "limitline": 0.18401834324905808,
       "difference": 0.00001834324905808371,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 9",
       "expected": 1.816,
       "limitline": 1.815981656750942,
       "difference": -0.00001834324905813922,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "A2, n = 10",
       "expected": 0.308,
       "limitline": 0.3082632706475409,
       "difference": 0.0002632706475408919,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D3, n = 10",
       "expected": 0.223,
       "limitline": 0.22302445808462035,
       "difference": 0.00002445808462034349,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "D4, n = 10",
       "expected": 1.777,
       "limitline": 1.7769755419153797,
       "difference": -0.000024458084620260223,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "Published c4 and d2 values",
     "sources": [
      "c4-tables"
     ],
     "datasets": [],
     "note": "",
     "checks": [
      {
       "statistic": "c4, n = 2",
       "expected": 0.7979,
       "limitline": 0.79788,
       "difference": -0.000020000000000020002,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "c4, n = 5",
       "expected": 0.94,
       "limitline": 0.93999,
       "difference": -0.00000999999999995449,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "c4, n = 25",
       "expected": 0.9896,
       "limitline": 0.98964,
       "difference": 0.00003999999999992898,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "d2, n = 25",
       "expected": 3.931,
       "limitline": 3.93063,
       "difference": -0.0003700000000002035,
       "tolerance": "± 0.001",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "X̄-R and X̄-S limits recomputed by hand with NIST’s printed constants",
     "sources": [
      "nist-6321"
     ],
     "datasets": [
      "validation/xbar-r-test-5x5.csv"
     ],
     "note": "The data are a small LimitLine test set (5 subgroups of 5), not a published example. Expected values are computed in this script from the raw data with NIST’s printed A2 = 0.577, D4 = 2.115 and c4 = 0.9400, without using LimitLine’s code.",
     "checks": [
      {
       "statistic": "Grand mean X̿",
       "expected": 10.036,
       "limitline": 10.036,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "X̄ chart UCL (X̿ + 0.577 R̄)",
       "expected": 10.336039999999999,
       "limitline": 10.335945917968267,
       "difference": -0.00009408203173144614,
       "tolerance": "± 5e−4",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "X̄ chart LCL (X̿ − 0.577 R̄)",
       "expected": 9.73596,
       "limitline": 9.736054082031732,
       "difference": 0.00009408203173144614,
       "tolerance": "± 5e−4",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "R chart UCL (2.115 R̄)",
       "expected": 1.0997999999999999,
       "limitline": 1.0995379912551106,
       "difference": -0.00026200874488924164,
       "tolerance": "± 5e−4",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "R chart LCL (D3 = 0 for n = 5)",
       "expected": 0,
       "limitline": 0,
       "difference": null,
       "tolerance": "exact match",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "X̄-S chart UCL (X̿ + 3 s̄ / (c4 √5))",
       "expected": 10.320159596728187,
       "limitline": 10.32016261973478,
       "difference": 0.000003023006593494415,
       "tolerance": "± 1e−4",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "S chart UCL (B4 from c4 = 0.9400)",
       "expected": 0.41587435493487296,
       "limitline": 0.4158941670148043,
       "difference": 0.00001981207993134726,
       "tolerance": "± 0.001",
       "basis": "computed",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "attribute",
   "title": "Attribute control charts",
   "kind": "published",
   "cases": [
    {
     "name": "NIST c chart: defects on 25 wafers",
     "sources": [
      "nist-6331"
     ],
     "datasets": [
      "validation/nist-6331-wafer-defects.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "c̄ (centre line)",
       "expected": 16,
       "limitline": 16,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "UCL",
       "expected": 28,
       "limitline": 28,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "LCL",
       "expected": 4,
       "limitline": 4,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Wafers beyond the limits (1-based)",
       "expected": "24",
       "limitline": "24",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "NIST p chart: 30 wafers of 50 chips",
     "sources": [
      "nist-6332"
     ],
     "datasets": [
      "validation/nist-6332-wafer-proportions.csv"
     ],
     "note": "NIST prints the fraction defective per wafer. Counts are fraction × 50. Limits are computed here from those data with the standard formula p̄ ± 3√(p̄(1 − p̄)/n), independently of LimitLine’s code.",
     "checks": [
      {
       "statistic": "Total defectives",
       "expected": 347,
       "limitline": 347,
       "difference": null,
       "tolerance": "exact match",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "p̄ = 347 / 1500",
       "expected": 0.23133333333333334,
       "limitline": 0.23133333333333334,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "UCL",
       "expected": 0.41023911859473844,
       "limitline": 0.41023911859473844,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "LCL",
       "expected": 0.05242754807192823,
       "limitline": 0.05242754807192823,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "UCL to 4 decimals",
       "expected": 0.4102,
       "limitline": 0.41023911859473844,
       "difference": 0.000039118594738429824,
       "tolerance": "± 0.001",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "Wafers beyond the limits (1-based)",
       "expected": "15, 23",
       "limitline": "15, 23",
       "difference": null,
       "tolerance": "exact match",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "np chart centre = n·p̄",
       "expected": 11.566666666666666,
       "limitline": 11.566666666666666,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "np chart UCL",
       "expected": 20.51195592973692,
       "limitline": 20.51195592973692,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      }
     ]
    },
    {
     "name": "Montgomery u chart: defects in computers, 20 samples of 5",
     "sources": [
      "montgomery-318"
     ],
     "datasets": [
      "validation/montgomery-u-computers.csv"
     ],
     "note": "The centre line is printed. The limits are computed from the printed centre line as 1.93 ± 3√(1.93/5) and compared at 2 decimals.",
     "checks": [
      {
       "statistic": "ū (centre line)",
       "expected": 1.93,
       "limitline": 1.93,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "LCL",
       "expected": 0.07,
       "limitline": 0.06613305195891184,
       "difference": -0.0038669480410881696,
       "tolerance": "same at 2 decimals",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "UCL",
       "expected": 3.79,
       "limitline": 3.793866948041088,
       "difference": 0.003866948041087781,
       "tolerance": "same at 2 decimals",
       "basis": "computed",
       "pass": true
      }
     ]
    },
    {
     "name": "Montgomery u chart: dyeing rolls of cloth, unequal inspection units",
     "sources": [
      "montgomery-321"
     ],
     "datasets": [
      "validation/montgomery-u-cloth-rolls.csv"
     ],
     "note": "The centre line is printed. Per-roll limits are computed from ū = 153/107.5 with ū ± 3√(ū/n) and compared at 2 decimals.",
     "checks": [
      {
       "statistic": "ū (centre line)",
       "expected": 1.423,
       "limitline": 1.4232558139534883,
       "difference": 0.00025581395348828195,
       "tolerance": "± 5e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "UCL, roll 2 (8 units, widest)",
       "expected": 2.69,
       "limitline": 2.6886264279230376,
       "difference": -0.001373572076962315,
       "tolerance": "same at 2 decimals",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "UCL, roll 3 (13 units, narrowest)",
       "expected": 2.42,
       "limitline": 2.4158941912700445,
       "difference": -0.0041058087299554735,
       "tolerance": "same at 2 decimals",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "LCL, roll 2",
       "expected": 0.16,
       "limitline": 0.15788519998393902,
       "difference": -0.002114800016060986,
       "tolerance": "same at 2 decimals",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "LCL, roll 3",
       "expected": 0.43,
       "limitline": 0.4306174366369322,
       "difference": 0.0006174366369322004,
       "tolerance": "same at 2 decimals",
       "basis": "computed",
       "pass": true
      }
     ]
    },
    {
     "name": "Laney p′ chart: 16 months, sample sizes 8,755 to 22,300",
     "sources": [
      "spcxl-laney"
     ],
     "datasets": [
      "validation/spcforexcel-laney-p.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "p̄",
       "expected": 0.4774,
       "limitline": 0.47737250371348405,
       "difference": -0.00002749628651593783,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "σz = MR̄ / 1.128 (article’s MR̄ 10.4108)",
       "expected": 9.229432624113477,
       "limitline": 9.229389043456617,
       "difference": -0.0000435806568592767,
       "tolerance": "relative ± 2e−3",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "Jan-07 LCL (%)",
       "expected": 32.96,
       "limitline": 32.95668793931331,
       "difference": -0.003312060686688767,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Jan-07 UCL (%)",
       "expected": 62.52,
       "limitline": 62.5178128033835,
       "difference": -0.002187196616503684,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Jul-07 LCL (%)",
       "expected": 38.24,
       "limitline": 38.238836151807284,
       "difference": -0.0011638481927178645,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Jul-07 UCL (%)",
       "expected": 57.24,
       "limitline": 57.235664590889535,
       "difference": -0.004335409110467481,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Months outside the limits",
       "expected": "Jul-07",
       "limitline": "Jul-07",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "capability",
   "title": "Process capability",
   "kind": "published",
   "cases": [
    {
     "name": "NIST capability example: USL 20, LSL 8, mean 16, s 2",
     "sources": [
      "nist-616"
     ],
     "datasets": [
      "validation/nist-616-capability-mean16-s2.csv"
     ],
     "note": "NIST gives summary statistics only. To drive LimitLine’s code, a 6-point data set with mean exactly 16 and sample s exactly 2 is built, and σ within is set to 2 to mirror the handbook. In the app, Cp/Cpk use σ within = MR̄/d2, so loading this file there reproduces Pp = 1.000 and Ppk = 0.667, not Cp/Cpk.",
     "checks": [
      {
       "statistic": "Data set mean",
       "expected": 16,
       "limitline": 16,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "Data set s",
       "expected": 2,
       "limitline": 2,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "computed",
       "pass": true
      },
      {
       "statistic": "Cp",
       "expected": 1,
       "limitline": 1,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Cpu",
       "expected": 0.6667,
       "limitline": 0.6666666666666666,
       "difference": -0.00003333333333332966,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Cpl",
       "expected": 1.3333,
       "limitline": 1.3333333333333333,
       "difference": 0.00003333333333332966,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Cpk",
       "expected": 0.6667,
       "limitline": 0.6666666666666666,
       "difference": -0.00003333333333332966,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Pp (overall s = 2)",
       "expected": 1,
       "limitline": 1,
       "difference": 0,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Ppk (overall s = 2)",
       "expected": 0.6667,
       "limitline": 0.6666666666666666,
       "difference": -0.00003333333333332966,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "One-sided (USL only): Cpk = Cpu",
       "expected": 0.6667,
       "limitline": 0.6666666666666666,
       "difference": -0.00003333333333332966,
       "tolerance": "± 1e−4",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "Cpk 95% confidence interval: Cpk 1.17, 50 points",
     "sources": [
      "spcxl-cap"
     ],
     "datasets": [],
     "note": "LimitLine uses Bissell’s approximation Cpk ± 1.96·√(1/(9n) + Cpk²/(2(n − 1))).",
     "checks": [
      {
       "statistic": "Lower 95% limit",
       "expected": 0.92,
       "limitline": 0.9206097774316486,
       "difference": 0.0006097774316485838,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Upper 95% limit",
       "expected": 1.42,
       "limitline": 1.4193902225683512,
       "difference": -0.0006097774316486948,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "grr",
   "title": "Gauge R&R (measurement systems analysis)",
   "kind": "published",
   "cases": [
    {
     "name": "AIAG gauge study: 10 parts × 3 operators × 3 trials, ANOVA mean squares and variance components",
     "sources": [
      "minitab-gageaiag",
      "spcxl-grr"
     ],
     "datasets": [
      "validation/aiag-msa4-gage-rr.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "MS part",
       "expected": 9.81799,
       "limitline": 9.817992716049382,
       "difference": 0.0000027160493818456644,
       "tolerance": "same at 5 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "MS operator",
       "expected": 1.58363,
       "limitline": 1.583631111111111,
       "difference": 0.0000011111111108963456,
       "tolerance": "same at 5 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "MS repeatability (pooled)",
       "expected": 0.03997,
       "limitline": 0.03997327635327636,
       "difference": 0.0000032763532763629977,
       "tolerance": "same at 5 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Part × operator interaction p-value",
       "expected": 0.974,
       "limitline": 0.9741064043290458,
       "difference": 0.00010640432904585051,
       "tolerance": "same at 3 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Interaction removed from the model (p > 0.25)",
       "expected": "removed",
       "limitline": "removed",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Variance component, operator",
       "expected": 0.0514553,
       "limitline": 0.05145526115859449,
       "difference": -3.884140551552173e-8,
       "tolerance": "same at 7 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Variance component, part-to-part",
       "expected": 1.08645,
       "limitline": 1.0864466044106784,
       "difference": -0.0000033955893214976385,
       "tolerance": "same at 5 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Variance component, total gauge R&R",
       "expected": 0.0914253,
       "limitline": 0.09142853751187086,
       "difference": 0.000003237511870854415,
       "tolerance": "relative ± 5e−5",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Variance component, total variation",
       "expected": 1.17788,
       "limitline": 1.1778751419225493,
       "difference": -0.0000048580774507644975,
       "tolerance": "same at 5 decimals",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "AIAG gauge study: % contribution (ANOVA method)",
     "sources": [
      "spcxl-grr"
     ],
     "datasets": [
      "validation/aiag-msa4-gage-rr.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "% contribution, Total gauge R&R",
       "expected": 7.76,
       "limitline": 7.762158675208947,
       "difference": 0.0021586752089470806,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "% contribution, Repeatability",
       "expected": 3.39,
       "limitline": 3.3936768788609677,
       "difference": 0.0036768788609675696,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "% contribution, Reproducibility",
       "expected": 4.37,
       "limitline": 4.368481796347979,
       "difference": -0.001518203652021377,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "% contribution, Part-to-part",
       "expected": 92.24,
       "limitline": 92.23784132479105,
       "difference": -0.0021586752089461925,
       "tolerance": "same at 2 decimals",
       "basis": "printed",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "regression",
   "title": "Regression and numerical accuracy",
   "kind": "published",
   "cases": [
    {
     "name": "NIST StRD Longley: 6 predictors, 16 observations",
     "sources": [
      "strd-longley"
     ],
     "datasets": [
      "validation/nist-strd-longley.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "Coefficient, Intercept",
       "expected": -3482258.63459582,
       "limitline": -3482258.6345958267,
       "difference": -6.51925802230835e-9,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Coefficient, GNPDEFL",
       "expected": 15.0618722713733,
       "limitline": 15.061872271375764,
       "difference": 2.4638069362481474e-12,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Coefficient, GNP",
       "expected": -0.035819179292591,
       "limitline": -0.03581917929259165,
       "difference": -6.522560269672795e-16,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Coefficient, UNEMP",
       "expected": -2.02022980381683,
       "limitline": -2.020229803816833,
       "difference": -3.1086244689504383e-15,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Coefficient, ARMED",
       "expected": -1.03322686717359,
       "limitline": -1.0332268671735931,
       "difference": -3.1086244689504383e-15,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Coefficient, POP",
       "expected": -0.0511041056535807,
       "limitline": -0.051104105653577474,
       "difference": 3.226585665316861e-15,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Coefficient, YEAR",
       "expected": 1829.15146461355,
       "limitline": 1829.151464613556,
       "difference": 6.139089236967266e-12,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, Intercept",
       "expected": 890420.383607373,
       "limitline": 890420.383607464,
       "difference": 9.103678166866302e-8,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, GNPDEFL",
       "expected": 84.9149257747669,
       "limitline": 84.91492577477582,
       "difference": 8.924416761146858e-12,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, GNP",
       "expected": 0.0334910077722432,
       "limitline": 0.03349100777224661,
       "difference": 3.406996906818449e-15,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, UNEMP",
       "expected": 0.488399681651699,
       "limitline": 0.4883996816517493,
       "difference": 5.029310301551959e-14,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, ARMED",
       "expected": 0.214274163161675,
       "limitline": 0.21427416316169728,
       "difference": 2.2287727219350018e-14,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, POP",
       "expected": 0.22607320006937,
       "limitline": 0.22607320006939266,
       "difference": 2.2648549702353193e-14,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard error, YEAR",
       "expected": 455.478499142212,
       "limitline": 455.4784991422587,
       "difference": 4.672529030358419e-11,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Residual standard deviation",
       "expected": 304.854073561965,
       "limitline": 304.8540735619961,
       "difference": 3.1093350116861984e-11,
       "tolerance": "relative ± 1e−9",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "R²",
       "expected": 0.995479004577296,
       "limitline": 0.9954790045772947,
       "difference": -1.3322676295501878e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "F statistic",
       "expected": 330.285339234588,
       "limitline": 330.2853392345203,
       "difference": -6.770051186322235e-11,
       "tolerance": "relative ± 1e−8",
       "basis": "certified",
       "pass": true
      }
     ]
    },
    {
     "name": "NIST StRD NumAcc4: 1001 values near 10,000,000",
     "sources": [
      "strd-numacc4"
     ],
     "datasets": [
      "validation/nist-strd-numacc4.csv"
     ],
     "note": "8.3 correct digits is the best possible for s here: 10000000.1 cannot be stored exactly in binary floating point. Stata 17’s published scores are shown for comparison.",
     "checks": [
      {
       "statistic": "Mean, correct digits (Stata 17: 15.7)",
       "expected": 10000000.2,
       "limitline": 10000000.200000001,
       "difference": 1.862645149230957e-9,
       "tolerance": "≥ 15 correct digits",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Standard deviation, correct digits (Stata 17: 8.3)",
       "expected": 0.1,
       "limitline": 0.10000000055879354,
       "difference": 5.58793539218172e-10,
       "tolerance": "≥ 8 correct digits",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Lag-1 autocorrelation, correct digits (Stata 17: 10.7)",
       "expected": -0.999,
       "limitline": -0.9989999999813732,
       "difference": 1.8626766795648564e-11,
       "tolerance": "≥ 10.5 correct digits",
       "basis": "certified",
       "pass": true
      }
     ]
    },
    {
     "name": "NIST StRD NumAcc2: 1001 values near 1.2",
     "sources": [
      "strd-numacc2"
     ],
     "datasets": [
      "validation/nist-strd-numacc2.csv"
     ],
     "note": "The lag-1 autocorrelation is computed by the stats module but not shown in the app today.",
     "checks": [
      {
       "statistic": "Standard deviation, correct digits (Stata 17: 15.6)",
       "expected": 0.1,
       "limitline": 0.09999999999999998,
       "difference": -2.7755575615628914e-17,
       "tolerance": "≥ 15.5 correct digits",
       "basis": "certified",
       "pass": true
      },
      {
       "statistic": "Lag-1 autocorrelation, correct digits (Stata 17: 16.0)",
       "expected": -0.999,
       "limitline": -0.9989999999999999,
       "difference": 1.1102230246251565e-16,
       "tolerance": "≥ 15.5 correct digits",
       "basis": "certified",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "runchart",
   "title": "Run charts",
   "kind": "published",
   "cases": [
    {
     "name": "Anhøj limits for 10 to 30 useful points",
     "sources": [
      "qicharts"
     ],
     "datasets": [],
     "note": "Each row feeds LimitLine a series with exactly that many points off the median and reads back its two limits.",
     "checks": [
      {
       "statistic": "n = 10: longest-run limit / fewest crossings",
       "expected": "6 / 2",
       "limitline": "6 / 2",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 11: longest-run limit / fewest crossings",
       "expected": "6 / 2",
       "limitline": "6 / 2",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 12: longest-run limit / fewest crossings",
       "expected": "7 / 3",
       "limitline": "7 / 3",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 13: longest-run limit / fewest crossings",
       "expected": "7 / 3",
       "limitline": "7 / 3",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 14: longest-run limit / fewest crossings",
       "expected": "7 / 4",
       "limitline": "7 / 4",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 15: longest-run limit / fewest crossings",
       "expected": "7 / 4",
       "limitline": "7 / 4",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 16: longest-run limit / fewest crossings",
       "expected": "7 / 4",
       "limitline": "7 / 4",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 17: longest-run limit / fewest crossings",
       "expected": "7 / 5",
       "limitline": "7 / 5",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 18: longest-run limit / fewest crossings",
       "expected": "7 / 5",
       "limitline": "7 / 5",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 19: longest-run limit / fewest crossings",
       "expected": "7 / 6",
       "limitline": "7 / 6",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 20: longest-run limit / fewest crossings",
       "expected": "7 / 6",
       "limitline": "7 / 6",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 21: longest-run limit / fewest crossings",
       "expected": "7 / 6",
       "limitline": "7 / 6",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 22: longest-run limit / fewest crossings",
       "expected": "7 / 7",
       "limitline": "7 / 7",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 23: longest-run limit / fewest crossings",
       "expected": "8 / 7",
       "limitline": "8 / 7",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 24: longest-run limit / fewest crossings",
       "expected": "8 / 8",
       "limitline": "8 / 8",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 25: longest-run limit / fewest crossings",
       "expected": "8 / 8",
       "limitline": "8 / 8",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 26: longest-run limit / fewest crossings",
       "expected": "8 / 8",
       "limitline": "8 / 8",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 27: longest-run limit / fewest crossings",
       "expected": "8 / 9",
       "limitline": "8 / 9",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 28: longest-run limit / fewest crossings",
       "expected": "8 / 9",
       "limitline": "8 / 9",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 29: longest-run limit / fewest crossings",
       "expected": "8 / 10",
       "limitline": "8 / 10",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "n = 30: longest-run limit / fewest crossings",
       "expected": "8 / 10",
       "limitline": "8 / 10",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "Anhøj Figure 2 case: 24 points, 2 on the median",
     "sources": [
      "qicharts"
     ],
     "datasets": [
      "validation/anhoj-figure2-pattern.csv"
     ],
     "note": "The series reproduces the figure’s pattern (1 = above the median, −1 = below, 0 = on it), not its original values.",
     "checks": [
      {
       "statistic": "Useful points (not on the median)",
       "expected": 22,
       "limitline": 22,
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Longest run",
       "expected": 10,
       "limitline": 10,
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Crossings",
       "expected": 3,
       "limitline": 3,
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Longest-run limit",
       "expected": 7,
       "limitline": 7,
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Fewest-crossings limit",
       "expected": 7,
       "limitline": 7,
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Signal",
       "expected": "yes",
       "limitline": "yes",
       "difference": null,
       "tolerance": "exact match",
       "basis": "printed",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "lean",
   "title": "Lean tools",
   "kind": "published",
   "cases": [
    {
     "name": "OEE worked example",
     "sources": [
      "oee-com"
     ],
     "datasets": [],
     "note": "",
     "checks": [
      {
       "statistic": "Availability",
       "expected": 0.8881,
       "limitline": 0.888095238095238,
       "difference": -0.0000047619047619518184,
       "tolerance": "± 5e−5",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Performance",
       "expected": 0.8611,
       "limitline": 0.8610813226094728,
       "difference": -0.000018677390527188642,
       "tolerance": "± 5e−5",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Quality",
       "expected": 0.978,
       "limitline": 0.9780499195682631,
       "difference": 0.000049919568263168124,
       "tolerance": "± 5e−5",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "OEE",
       "expected": 0.7479,
       "limitline": 0.7479365079365079,
       "difference": 0.00003650793650789019,
       "tolerance": "± 5e−5",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "Takt time",
     "sources": [
      "lei-takt"
     ],
     "datasets": [],
     "note": "",
     "checks": [
      {
       "statistic": "Takt time, seconds (480 min ÷ 240 units)",
       "expected": 120,
       "limitline": 120,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "printed",
       "pass": true
      }
     ]
    },
    {
     "name": "Heijunka: leveling by volume",
     "sources": [
      "lei-heijunka"
     ],
     "datasets": [],
     "note": "",
     "checks": [
      {
       "statistic": "Level rate per day",
       "expected": 100,
       "limitline": 100,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "printed",
       "pass": true
      },
      {
       "statistic": "Buffer needed to cover Monday",
       "expected": 100,
       "limitline": 100,
       "difference": 0,
       "tolerance": "± 1e−12",
       "basis": "computed",
       "pass": true
      }
     ]
    }
   ]
  },
  {
   "id": "software",
   "title": "Cross-checks against independent statistical software",
   "kind": "software",
   "cases": [
    {
     "name": "Probability distributions",
     "sources": [
      "scipy"
     ],
     "datasets": [],
     "note": "t, F and chi-square tail areas, the normal CDF, t quantiles, and log-gamma (Python math.lgamma). The p-values for every test in LimitLine come from these functions.",
     "checks": [
      {
       "statistic": "t CDF (t = -3.2, df = 1)",
       "expected": 0.09641124797922958,
       "limitline": 0.09641124797922952,
       "difference": -5.551115123125783e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -3.2, df = 3)",
       "expected": 0.0246659214813481,
       "limitline": 0.02466592148134814,
       "difference": 3.8163916471489756e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -3.2, df = 9)",
       "expected": 0.005415651294950661,
       "limitline": 0.00541565129495066,
       "difference": -8.673617379884035e-19,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -3.2, df = 30)",
       "expected": 0.0016193008559765656,
       "limitline": 0.001619300855976575,
       "difference": 9.324138683375338e-18,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -3.2, df = 200)",
       "expected": 0.0007991768707150706,
       "limitline": 0.0007991768707150301,
       "difference": -4.0549161250957866e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -1.1, df = 1)",
       "expected": 0.2348538278116319,
       "limitline": 0.23485382781163186,
       "difference": -2.7755575615628914e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -1.1, df = 3)",
       "expected": 0.17584159746732558,
       "limitline": 0.17584159746732536,
       "difference": -2.220446049250313e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -1.1, df = 9)",
       "expected": 0.14994138092840315,
       "limitline": 0.14994138092840348,
       "difference": 3.3306690738754696e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -1.1, df = 30)",
       "expected": 0.1400404590438199,
       "limitline": 0.1400404590438178,
       "difference": -2.1094237467877974e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = -1.1, df = 200)",
       "expected": 0.13632718609872724,
       "limitline": 0.13632718609874317,
       "difference": 1.5931700403370996e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 0.4, df = 1)",
       "expected": 0.6211189415908434,
       "limitline": 0.6211189415908436,
       "difference": 2.220446049250313e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 0.4, df = 3)",
       "expected": 0.6420324230128149,
       "limitline": 0.642032423012815,
       "difference": 1.1102230246251565e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 0.4, df = 9)",
       "expected": 0.6507579541643174,
       "limitline": 0.6507579541643173,
       "difference": -1.1102230246251565e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 0.4, df = 30)",
       "expected": 0.654004741742904,
       "limitline": 0.6540047417429047,
       "difference": 6.661338147750939e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 0.4, df = 200)",
       "expected": 0.6552082978369523,
       "limitline": 0.6552082978369408,
       "difference": -1.1546319456101628e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 2.5, df = 1)",
       "expected": 0.8788810584091566,
       "limitline": 0.8788810584091566,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 2.5, df = 3)",
       "expected": 0.9561466764959672,
       "limitline": 0.9561466764959672,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 2.5, df = 9)",
       "expected": 0.9830690861585072,
       "limitline": 0.9830690861585072,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 2.5, df = 30)",
       "expected": 0.9909421754659666,
       "limitline": 0.9909421754659666,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 2.5, df = 200)",
       "expected": 0.9933884136791497,
       "limitline": 0.99338841367915,
       "difference": 3.3306690738754696e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 6, df = 1)",
       "expected": 0.9474315432887466,
       "limitline": 0.9474315432887466,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 6, df = 3)",
       "expected": 0.9953636425538577,
       "limitline": 0.9953636425538577,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 6, df = 9)",
       "expected": 0.9998987503389661,
       "limitline": 0.9998987503389661,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 6, df = 30)",
       "expected": 0.9999993028615617,
       "limitline": 0.9999993028615617,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t CDF (t = 6, df = 200)",
       "expected": 0.9999999954424398,
       "limitline": 0.9999999954424398,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 0.3, df 1, 5)",
       "expected": 0.6074354940759242,
       "limitline": 0.6074354940759243,
       "difference": 1.1102230246251565e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 0.3, df 3, 12)",
       "expected": 0.8248035702257585,
       "limitline": 0.8248035702257586,
       "difference": 1.1102230246251565e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 0.3, df 6, 9)",
       "expected": 0.9217416608606944,
       "limitline": 0.9217416608606943,
       "difference": -1.1102230246251565e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 0.3, df 20, 40)",
       "expected": 0.9973296186574215,
       "limitline": 0.9973296186574215,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 1.2, df 1, 5)",
       "expected": 0.32326019027977887,
       "limitline": 0.32326019027977937,
       "difference": 4.996003610813204e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 1.2, df 3, 12)",
       "expected": 0.3515126407239847,
       "limitline": 0.35151264072398625,
       "difference": 1.5543122344752192e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 1.2, df 6, 9)",
       "expected": 0.3865692436842343,
       "limitline": 0.38656924368423423,
       "difference": -5.551115123125783e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 1.2, df 20, 40)",
       "expected": 0.30350303462669964,
       "limitline": 0.30350303462669526,
       "difference": -4.385380947269368e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 4.5, df 1, 5)",
       "expected": 0.08735930812736169,
       "limitline": 0.08735930812736163,
       "difference": -5.551115123125783e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 4.5, df 3, 12)",
       "expected": 0.02457347884095369,
       "limitline": 0.02457347884095362,
       "difference": -7.28583859910259e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 4.5, df 6, 9)",
       "expected": 0.022140502929687507,
       "limitline": 0.022140502929687486,
       "difference": -2.0816681711721685e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 4.5, df 20, 40)",
       "expected": 0.000025950300462613557,
       "limitline": 0.000025950300462613327,
       "difference": -2.303929616531697e-19,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 30, df 1, 5)",
       "expected": 0.0027649603013049557,
       "limitline": 0.0027649603013049505,
       "difference": -5.204170427930421e-18,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 30, df 3, 12)",
       "expected": 0.000007373032475767982,
       "limitline": 0.00000737303247576797,
       "difference": -1.1858461261560205e-20,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 30, df 6, 9)",
       "expected": 0.000018525315594117408,
       "limitline": 0.00001852531559411735,
       "difference": -5.759824041329242e-20,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "F upper tail (F = 30, df 20, 40)",
       "expected": 4.7700820248758235e-18,
       "limitline": 4.7700820248757804e-18,
       "difference": -4.3140830754274083e-32,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 0.5, df = 1)",
       "expected": 0.47950012218695337,
       "limitline": 0.47950012218695315,
       "difference": -2.220446049250313e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 0.5, df = 2)",
       "expected": 0.7788007830714049,
       "limitline": 0.7788007830714047,
       "difference": -2.220446049250313e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 0.5, df = 5)",
       "expected": 0.9921232932326296,
       "limitline": 0.9921232932326296,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 0.5, df = 17)",
       "expected": 0.9999999999488488,
       "limitline": 0.9999999999488488,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 3, df = 1)",
       "expected": 0.08326451666355042,
       "limitline": 0.08326451666355052,
       "difference": 9.71445146547012e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 3, df = 2)",
       "expected": 0.22313016014842982,
       "limitline": 0.22313016014842924,
       "difference": -5.828670879282072e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 3, df = 5)",
       "expected": 0.6999858358786276,
       "limitline": 0.699985835878628,
       "difference": 3.3306690738754696e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 3, df = 17)",
       "expected": 0.9999304982629114,
       "limitline": 0.9999304982629114,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 11, df = 1)",
       "expected": 0.0009111188771537126,
       "limitline": 0.0009111188771537117,
       "difference": -8.673617379884035e-19,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 11, df = 2)",
       "expected": 0.0040867714384640675,
       "limitline": 0.004086771438464071,
       "difference": 3.469446951953614e-18,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 11, df = 5)",
       "expected": 0.05137998348306955,
       "limitline": 0.05137998348306946,
       "difference": -9.020562075079397e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 11, df = 17)",
       "expected": 0.8565639878402658,
       "limitline": 0.8565639878402661,
       "difference": 3.3306690738754696e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 40, df = 1)",
       "expected": 2.5396285894708634e-10,
       "limitline": 2.539628589470863e-10,
       "difference": -5.169878828456423e-26,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 40, df = 2)",
       "expected": 2.0611536224385566e-9,
       "limitline": 2.0611536224385566e-9,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 40, df = 5)",
       "expected": 1.493367900050393e-7,
       "limitline": 1.493367900050391e-7,
       "difference": -2.117582368135751e-22,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square upper tail (x = 40, df = 17)",
       "expected": 0.0012941985337428965,
       "limitline": 0.0012941985337428922,
       "difference": -4.336808689942018e-18,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = -8)",
       "expected": 6.22096057427174e-16,
       "limitline": 6.220960574271834e-16,
       "difference": 9.367723249499515e-30,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = -5)",
       "expected": 2.866515718791933e-7,
       "limitline": 2.8665157187919444e-7,
       "difference": 1.164670302474663e-21,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = -3)",
       "expected": 0.0013498980316300933,
       "limitline": 0.0013498980316300965,
       "difference": 3.2526065174565133e-18,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = -1.5)",
       "expected": 0.06680720126885807,
       "limitline": 0.06680720126885781,
       "difference": -2.636779683484747e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = 0)",
       "expected": 0.5,
       "limitline": 0.5,
       "difference": 0,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = 0.7)",
       "expected": 0.758036347776927,
       "limitline": 0.7580363477769271,
       "difference": 1.1102230246251565e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = 2.2)",
       "expected": 0.9860965524865014,
       "limitline": 0.9860965524865014,
       "difference": 0,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = 4)",
       "expected": 0.9999683287581669,
       "limitline": 0.9999683287581669,
       "difference": 0,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Normal CDF (z = 6)",
       "expected": 0.9999999990134123,
       "limitline": 0.9999999990134123,
       "difference": 0,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.025, df = 1)",
       "expected": -12.706204736174705,
       "limitline": -12.706204736174612,
       "difference": 9.237055564881302e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.025, df = 4)",
       "expected": -2.7764451051977943,
       "limitline": -2.7764451051977943,
       "difference": 0,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.025, df = 15)",
       "expected": -2.131449545559776,
       "limitline": -2.1314495455597324,
       "difference": 4.3520742565306136e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.025, df = 100)",
       "expected": -1.983971518523552,
       "limitline": -1.9839715185234752,
       "difference": 7.682743330406083e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.1, df = 1)",
       "expected": -3.0776835371752536,
       "limitline": -3.0776835371751474,
       "difference": 1.0613732115416497e-13,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.1, df = 4)",
       "expected": -1.5332062740589436,
       "limitline": -1.5332062740589691,
       "difference": -2.55351295663786e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.1, df = 15)",
       "expected": -1.3406056078504556,
       "limitline": -1.3406056078504633,
       "difference": -7.771561172376096e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.1, df = 100)",
       "expected": -1.290074761346516,
       "limitline": -1.2900747613464745,
       "difference": 4.1522341120980855e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.9, df = 1)",
       "expected": 3.0776835371752544,
       "limitline": 3.0776835371751474,
       "difference": -1.0702549957386509e-13,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.9, df = 4)",
       "expected": 1.533206274058944,
       "limitline": 1.5332062740589691,
       "difference": 2.5091040356528538e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.9, df = 15)",
       "expected": 1.3406056078504558,
       "limitline": 1.3406056078504633,
       "difference": 7.549516567451064e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.9, df = 100)",
       "expected": 1.290074761346516,
       "limitline": 1.2900747613464745,
       "difference": -4.1522341120980855e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.975, df = 1)",
       "expected": 12.706204736174694,
       "limitline": 12.706204736174612,
       "difference": -8.171241461241152e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.975, df = 4)",
       "expected": 2.7764451051977934,
       "limitline": 2.7764451051977943,
       "difference": 8.881784197001252e-16,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.975, df = 15)",
       "expected": 2.131449545559776,
       "limitline": 2.1314495455597324,
       "difference": -4.3520742565306136e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.975, df = 100)",
       "expected": 1.9839715185235518,
       "limitline": 1.9839715185234752,
       "difference": -7.66053886991358e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.995, df = 1)",
       "expected": 63.656741162871526,
       "limitline": 63.65674116287133,
       "difference": -1.9895196601282805e-13,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.995, df = 4)",
       "expected": 4.604094871349992,
       "limitline": 4.604094871349886,
       "difference": -1.056932319443149e-13,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.995, df = 15)",
       "expected": 2.946712883475238,
       "limitline": 2.946712883475101,
       "difference": -1.3722356584366935e-13,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "t quantile (p = 0.995, df = 100)",
       "expected": 2.6258905214380173,
       "limitline": 2.6258905214379666,
       "difference": -5.062616992290714e-14,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "log-gamma (0.1)",
       "expected": 2.2527126517342055,
       "limitline": 2.252712651734206,
       "difference": 4.440892098500626e-16,
       "tolerance": "± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "log-gamma (0.5)",
       "expected": 0.5723649429247004,
       "limitline": 0.5723649429246995,
       "difference": -8.881784197001252e-16,
       "tolerance": "± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "log-gamma (1)",
       "expected": 0,
       "limitline": -8.881784197001252e-16,
       "difference": -8.881784197001252e-16,
       "tolerance": "± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "log-gamma (2.5)",
       "expected": 0.2846828704729196,
       "limitline": 0.28468287047292096,
       "difference": 1.3322676295501878e-15,
       "tolerance": "± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "log-gamma (10)",
       "expected": 12.801827480081467,
       "limitline": 12.801827480081474,
       "difference": 7.105427357601002e-15,
       "tolerance": "± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "log-gamma (171.3)",
       "expected": 708.114947038997,
       "limitline": 708.1149470389968,
       "difference": -2.2737367544323206e-13,
       "tolerance": "± 1e−12",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Descriptive statistics (37 values)",
     "sources": [
      "scipy"
     ],
     "datasets": [
      "validation/refs-describe.csv"
     ],
     "note": "Quartiles use the (n + 1)p method that Minitab uses (numpy percentile method “weibull”). The mean and standard deviation feed every tool; skewness, kurtosis and quartiles come from the same module but the app doesn’t show them today.",
     "checks": [
      {
       "statistic": "Mean",
       "expected": 5.681897368676167,
       "limitline": 5.681897368676167,
       "difference": 0,
       "tolerance": "relative ± 1e−13",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standard deviation",
       "expected": 4.471880036467942,
       "limitline": 4.471880036467942,
       "difference": 0,
       "tolerance": "relative ± 1e−13",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Skewness (adjusted)",
       "expected": 1.2074876340871985,
       "limitline": 1.207487634087198,
       "difference": -4.440892098500626e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Kurtosis (adjusted)",
       "expected": 1.292806393565499,
       "limitline": 1.2928063935654972,
       "difference": -1.7763568394002505e-15,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Q1",
       "expected": 2.1978221897925687,
       "limitline": 2.1978221897925687,
       "difference": 0,
       "tolerance": "relative ± 1e−13",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Median",
       "expected": 5.170722741533113,
       "limitline": 5.170722741533113,
       "difference": 0,
       "tolerance": "relative ± 1e−13",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Q3",
       "expected": 7.449728222046621,
       "limitline": 7.449728222046621,
       "difference": 0,
       "tolerance": "relative ± 1e−13",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Anderson-Darling normality test (4 samples)",
     "sources": [
      "statsmodels"
     ],
     "datasets": [
      "validation/refs-anderson-darling.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "Sample 1 (n = 25): AD statistic",
       "expected": 0.20225172553667647,
       "limitline": 0.20225172553667647,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 1: p-value",
       "expected": 0.863433996381665,
       "limitline": 0.863433996381665,
       "difference": 0,
       "tolerance": "± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 2 (n = 40): AD statistic",
       "expected": 0.7966172718200681,
       "limitline": 0.796617271820061,
       "difference": -7.105427357601002e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 2: p-value",
       "expected": 0.0356654729024545,
       "limitline": 0.035665472902455954,
       "difference": 1.457167719820518e-15,
       "tolerance": "± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 3 (n = 200): AD statistic",
       "expected": 0.4711891733072662,
       "limitline": 0.4711891733072946,
       "difference": 2.842170943040401e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 3: p-value",
       "expected": 0.2429460060544153,
       "limitline": 0.24294600605437658,
       "difference": -3.8719027983802334e-14,
       "tolerance": "± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 4 (n = 15): AD statistic",
       "expected": 0.580911060234131,
       "limitline": 0.5809110602341274,
       "difference": -3.552713678800501e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Sample 4: p-value",
       "expected": 0.10919128753707959,
       "limitline": 0.1091912875370819,
       "difference": 2.3175905639050143e-15,
       "tolerance": "± 1e−9",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Hypothesis tests: t tests, ANOVA, Levene, chi-square, two proportions",
     "sources": [
      "scipy",
      "statsmodels"
     ],
     "datasets": [
      "validation/refs-t-tests.csv",
      "validation/refs-anova-groups.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "1-sample t (μ0 = 9.5): t",
       "expected": 0.01935998176627267,
       "limitline": 0.01935998176627267,
       "difference": 0,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "1-sample t: p",
       "expected": 0.9847793476860067,
       "limitline": 0.9847793476859804,
       "difference": -2.631228568361621e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "1-sample t: 95% CI low",
       "expected": 8.601612726835084,
       "limitline": 8.601612726835095,
       "difference": 1.0658141036401503e-14,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "1-sample t: 95% CI high",
       "expected": 10.415027436448218,
       "limitline": 10.415027436448208,
       "difference": -1.0658141036401503e-14,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "1-sample t: p (one-sided, greater)",
       "expected": 0.49238967384300336,
       "limitline": 0.49238967384299026,
       "difference": -1.3100631690576847e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Welch 2-sample t: t",
       "expected": -0.8824736934754309,
       "limitline": -0.882473693475431,
       "difference": -1.1102230246251565e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Welch: p",
       "expected": 0.3838189220058272,
       "limitline": 0.3838189220058267,
       "difference": -4.996003610813204e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Welch: df",
       "expected": 33.44907190078581,
       "limitline": 33.44907190078582,
       "difference": 7.105427357601002e-15,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Welch: 95% CI low",
       "expected": -2.591163598292016,
       "limitline": -2.59116359829199,
       "difference": 2.5757174171303632e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Welch: 95% CI high",
       "expected": 1.0228018195503583,
       "limitline": 1.0228018195503326,
       "difference": -2.5757174171303632e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Pooled 2-sample t: t",
       "expected": -0.817205363284901,
       "limitline": -0.8172053632849011,
       "difference": -1.1102230246251565e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Pooled: p",
       "expected": 0.4187755041074828,
       "limitline": 0.4187755041074813,
       "difference": -1.4988010832439613e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Pooled: 95% CI low",
       "expected": -2.7251318863404213,
       "limitline": -2.7251318863404257,
       "difference": -4.440892098500626e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Paired t: t",
       "expected": -2.976068678970772,
       "limitline": -2.9760686789707718,
       "difference": 4.440892098500626e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Paired t: p",
       "expected": 0.008476036680099016,
       "limitline": 0.008476036680099016,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Paired t: 95% CI high",
       "expected": -0.2006319767430811,
       "limitline": -0.20063197674308741,
       "difference": -6.328271240363392e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "One-way ANOVA: F",
       "expected": 4.764705737523999,
       "limitline": 4.764705737523998,
       "difference": -1.7763568394002505e-15,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "One-way ANOVA: p",
       "expected": 0.006885553282112761,
       "limitline": 0.006885553282112714,
       "difference": -4.683753385137379e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Levene (median): W",
       "expected": 0.6922417635840995,
       "limitline": 0.6922417635840994,
       "difference": -1.1102230246251565e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Levene: p",
       "expected": 0.5629570705917399,
       "limitline": 0.5629570705917444,
       "difference": 4.440892098500626e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square, 3×3 table [[12,30,18],[20,25,35],[8,14,20]]: χ²",
       "expected": 6.468289325656805,
       "limitline": 6.468289325656804,
       "difference": -8.881784197001252e-16,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square: p",
       "expected": 0.16679941041293758,
       "limitline": 0.16679941041293758,
       "difference": 0,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Chi-square: df",
       "expected": 4,
       "limitline": 4,
       "difference": null,
       "tolerance": "exact match",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "2 proportions, 45/300 vs 30/280 (pooled): z",
       "expected": 1.5370943767560803,
       "limitline": 1.5370943767560803,
       "difference": 0,
       "tolerance": "relative ± 1e−12",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "2 proportions: p",
       "expected": 0.12427019981107026,
       "limitline": 0.12427019981107001,
       "difference": -2.498001805406602e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Multiple regression: 3 predictors, 30 observations",
     "sources": [
      "statsmodels"
     ],
     "datasets": [
      "validation/refs-regression.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "Coefficient, intercept",
       "expected": 1.8746896655054117,
       "limitline": 1.87468966550541,
       "difference": -1.7763568394002505e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, x1",
       "expected": 1.3615631430089987,
       "limitline": 1.3615631430089985,
       "difference": -2.220446049250313e-16,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, x2",
       "expected": -0.8739299498415025,
       "limitline": -0.873929949841503,
       "difference": -4.440892098500626e-16,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, x3",
       "expected": 0.1496412458402022,
       "limitline": 0.14964124584020244,
       "difference": 2.498001805406602e-16,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standard error, intercept",
       "expected": 0.16899278431075848,
       "limitline": 0.16899278431075843,
       "difference": -5.551115123125783e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standard error, x1",
       "expected": 0.17697438537370894,
       "limitline": 0.1769743853737089,
       "difference": -2.7755575615628914e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standard error, x2",
       "expected": 0.2010811903905117,
       "limitline": 0.20108119039051173,
       "difference": 2.7755575615628914e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standard error, x3",
       "expected": 0.22305147084409124,
       "limitline": 0.2230514708440912,
       "difference": -5.551115123125783e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, intercept",
       "expected": 2.3419510988075174e-11,
       "limitline": 2.3419510988075384e-11,
       "difference": 2.100263274060422e-25,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, x1",
       "expected": 3.650135175836085e-8,
       "limitline": 3.650135175836086e-8,
       "difference": 6.617444900424222e-24,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, x2",
       "expected": 0.0001886853370603402,
       "limitline": 0.00018868533706033902,
       "difference": -1.1926223897340549e-18,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, x3",
       "expected": 0.5082121352493147,
       "limitline": 0.5082121352493147,
       "difference": 0,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Adjusted R²",
       "expected": 0.8107432932158571,
       "limitline": 0.8107432932158571,
       "difference": 0,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Model p (F test)",
       "expected": 3.711493255604741e-10,
       "limitline": 3.7114932556047876e-10,
       "difference": 4.652890945610781e-24,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Leverage, row 1",
       "expected": 0.10629544861623066,
       "limitline": 0.1062954486162306,
       "difference": -6.938893903907228e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Leverage, row 2",
       "expected": 0.15534328056761867,
       "limitline": 0.1553432805676187,
       "difference": 2.7755575615628914e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Leverage, row 3",
       "expected": 0.06425586121756358,
       "limitline": 0.06425586121756355,
       "difference": -2.7755575615628914e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Leverage, row 4",
       "expected": 0.144091936379869,
       "limitline": 0.14409193637986895,
       "difference": -5.551115123125783e-17,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Leverage, row 5",
       "expected": 0.29296335455871225,
       "limitline": 0.29296335455871236,
       "difference": 1.1102230246251565e-16,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standardized residual, row 1",
       "expected": -0.11752039526854481,
       "limitline": -0.11752039526854273,
       "difference": 2.0816681711721685e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standardized residual, row 2",
       "expected": -0.22287158708752558,
       "limitline": -0.2228715870875225,
       "difference": 3.0808688933348094e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standardized residual, row 3",
       "expected": -0.6462074454988388,
       "limitline": -0.6462074454988368,
       "difference": 1.9984014443252818e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standardized residual, row 4",
       "expected": -0.965119649127892,
       "limitline": -0.9651196491278895,
       "difference": 2.55351295663786e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Standardized residual, row 5",
       "expected": 0.2970676764520171,
       "limitline": 0.2970676764520194,
       "difference": 2.3314683517128287e-15,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "VIF, x1",
       "expected": 1.5728945852638618,
       "limitline": 1.5728945852638616,
       "difference": -2.220446049250313e-16,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "VIF, x2",
       "expected": 1.0260329078566854,
       "limitline": 1.0260329078566859,
       "difference": 4.440892098500626e-16,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "VIF, x3",
       "expected": 1.604908810458597,
       "limitline": 1.604908810458597,
       "difference": 0,
       "tolerance": "relative ± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Prediction at (0.5, −0.2, 0.1)",
       "expected": 2.745221351562232,
       "limitline": 2.7452213515622303,
       "difference": -1.7763568394002505e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "95% confidence interval, low",
       "expected": 2.323258410863237,
       "limitline": 2.3232584108632257,
       "difference": -1.1102230246251565e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "95% prediction interval, high",
       "expected": 4.651613048761897,
       "limitline": 4.65161304876194,
       "difference": 4.263256414560601e-14,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Non-normal data: Box-Cox, lognormal and Weibull fits",
     "sources": [
      "scipy"
     ],
     "datasets": [
      "validation/refs-lognormal-60.csv",
      "validation/refs-weibull-80.csv"
     ],
     "note": "Maximum-likelihood fits with the location fixed at 0, as scipy’s floc = 0. These drive LimitLine’s non-normal capability.",
     "checks": [
      {
       "statistic": "Box-Cox λ (maximum likelihood)",
       "expected": -0.0776158953938769,
       "limitline": -0.077615866431758,
       "difference": 2.8962118897579714e-8,
       "tolerance": "± 1e−6",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Lognormal σ",
       "expected": 0.4395476313864137,
       "limitline": 0.43954763138641373,
       "difference": 5.551115123125783e-17,
       "tolerance": "relative ± 1e−7",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Lognormal μ",
       "expected": 0.9725220821969573,
       "limitline": 0.9725220821969572,
       "difference": -1.1102230246251565e-16,
       "tolerance": "relative ± 1e−7",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Lognormal 99.865th percentile",
       "expected": 9.886348474480426,
       "limitline": 9.886348474480434,
       "difference": 7.105427357601002e-15,
       "tolerance": "relative ± 1e−6",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Weibull shape",
       "expected": 2.000148110365271,
       "limitline": 2.0001505280742204,
       "difference": 0.0000024177089494870074,
       "tolerance": "relative ± 1e−5",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Weibull scale",
       "expected": 11.795684214922492,
       "limitline": 11.795715014056919,
       "difference": 0.0000307991344268288,
       "tolerance": "relative ± 1e−5",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Weibull 0.135th percentile",
       "expected": 0.4336535606809802,
       "limitline": 0.43365642448967606,
       "difference": 0.0000028638086958521214,
       "tolerance": "relative ± 1e−4",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Gauge R&R two-way ANOVA (10 parts × 3 operators × 2 trials)",
     "sources": [
      "statsmodels"
     ],
     "datasets": [
      "validation/refs-gage-rr-synthetic.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "SS part",
       "expected": 63.83469679352901,
       "limitline": 63.83469679352902,
       "difference": 7.105427357601002e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "SS operator",
       "expected": 0.3980597608446455,
       "limitline": 0.39805976084465505,
       "difference": 9.547918011776346e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Interaction p-value (vs error)",
       "expected": 0.84997630590148,
       "limitline": 0.8499763059014773,
       "difference": -2.6645352591003757e-15,
       "tolerance": "± 1e−9",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Pooled repeatability SS = interaction SS + error SS",
       "expected": 0.8816023027272333,
       "limitline": 0.881602302727235,
       "difference": 1.7763568394002505e-15,
       "tolerance": "relative ± 1e−10",
       "basis": "software",
       "pass": true
      }
     ]
    },
    {
     "name": "Designed experiment: 2³ full factorial, 2 replicates, full model",
     "sources": [
      "statsmodels"
     ],
     "datasets": [
      "validation/refs-doe-2x3-replicated.csv"
     ],
     "note": "",
     "checks": [
      {
       "statistic": "Coefficient, A",
       "expected": 4.139202170081283,
       "limitline": 4.139202170081285,
       "difference": 1.7763568394002505e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, A",
       "expected": 7.22627022124349e-7,
       "limitline": 7.226270221243461e-7,
       "difference": -2.964615315390051e-21,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, B",
       "expected": -2.607738056833213,
       "limitline": -2.607738056833201,
       "difference": 1.199040866595169e-14,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, B",
       "expected": 0.0000235196089571245,
       "limitline": 0.000023519608957125038,
       "difference": 5.38712954453735e-19,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, C",
       "expected": 0.4531543108018826,
       "limitline": 0.4531543108018887,
       "difference": 6.106226635438361e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, C",
       "expected": 0.16850421570223004,
       "limitline": 0.16850421570222496,
       "difference": -5.079270337660091e-15,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, A×B",
       "expected": 1.5978563655824853,
       "limitline": 1.5978563655824805,
       "difference": -4.884981308350689e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, A×B",
       "expected": 0.0006956174417652914,
       "limitline": 0.0006956174417653054,
       "difference": 1.3986208025063007e-17,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, A×C",
       "expected": -0.049630032764338194,
       "limitline": -0.049630032764336196,
       "difference": 1.9984014443252818e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, A×C",
       "expected": 0.8724222505912682,
       "limitline": 0.8724222505912781,
       "difference": 9.880984919163893e-15,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, B×C",
       "expected": 0.19824090797293234,
       "limitline": 0.1982409079729308,
       "difference": -1.5265566588595902e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, B×C",
       "expected": 0.5263965727898717,
       "limitline": 0.5263965727898698,
       "difference": -1.887379141862766e-15,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "Coefficient, A×B×C",
       "expected": 0.15434352108032262,
       "limitline": 0.15434352108032634,
       "difference": 3.7192471324942744e-15,
       "tolerance": "relative ± 1e−11",
       "basis": "software",
       "pass": true
      },
      {
       "statistic": "p-value, A×B×C",
       "expected": 0.6200488147326317,
       "limitline": 0.6200488147326246,
       "difference": -7.105427357601002e-15,
       "tolerance": "± 1e−8",
       "basis": "software",
       "pass": true
      }
     ]
    }
   ]
  }
 ],
 "datasets": [
  {
   "file": "validation/nist-6322-flow-rate.csv",
   "rows": 10,
   "description": "NIST §6.3.2.2 flow rate, 10 batches"
  },
  {
   "file": "validation/xbar-r-test-5x5.csv",
   "rows": 5,
   "description": "5 subgroups of 5 (LimitLine test set)"
  },
  {
   "file": "validation/nist-6331-wafer-defects.csv",
   "rows": 25,
   "description": "NIST §6.3.3.1 defects per wafer, 25 wafers"
  },
  {
   "file": "validation/nist-6332-wafer-proportions.csv",
   "rows": 30,
   "description": "NIST §6.3.3.2 defective chips, 30 wafers of 50"
  },
  {
   "file": "validation/montgomery-u-computers.csv",
   "rows": 20,
   "description": "Montgomery p. 318 (via IMSL): defects in 20 samples of 5 computers"
  },
  {
   "file": "validation/montgomery-u-cloth-rolls.csv",
   "rows": 10,
   "description": "Montgomery p. 321 (via IMSL): defects in 10 rolls of cloth, units of 50 m²"
  },
  {
   "file": "validation/spcforexcel-laney-p.csv",
   "rows": 16,
   "description": "SPC for Excel Laney p′ example, 16 months"
  },
  {
   "file": "validation/nist-616-capability-mean16-s2.csv",
   "rows": 6,
   "description": "6 values with mean 16 and s 2 (built to match NIST §6.1.6)"
  },
  {
   "file": "validation/aiag-msa4-gage-rr.csv",
   "rows": 90,
   "description": "AIAG MSA (4th ed.) gauge study as printed by SPC for Excel: 10 parts, operators A/B/C, 3 trials"
  },
  {
   "file": "validation/nist-strd-longley.csv",
   "rows": 16,
   "description": "NIST StRD Longley (y = TOTEMP first, then 6 predictors)"
  },
  {
   "file": "validation/nist-strd-numacc4.csv",
   "rows": 1001,
   "description": "NIST StRD NumAcc4, 1001 values"
  },
  {
   "file": "validation/nist-strd-numacc2.csv",
   "rows": 1001,
   "description": "NIST StRD NumAcc2, 1001 values"
  },
  {
   "file": "validation/anhoj-figure2-pattern.csv",
   "rows": 24,
   "description": "Pattern of the qicharts “Run charts with R” Figure 2 case (above/below/on the median)"
  },
  {
   "file": "validation/refs-describe.csv",
   "rows": 37,
   "description": "37 gamma-distributed values used for the descriptive-statistics cross-check"
  },
  {
   "file": "validation/refs-anderson-darling.csv",
   "rows": 280,
   "description": "4 samples (n = 25, 40, 200, 15) used for the Anderson-Darling cross-check"
  },
  {
   "file": "validation/refs-t-tests.csv",
   "rows": 59,
   "description": "Samples a (n 18), b (n 23), c (n 18, paired with a) for the t-test cross-checks"
  },
  {
   "file": "validation/refs-anova-groups.csv",
   "rows": 39,
   "description": "4 groups (n 8, 12, 10, 9) for the one-way ANOVA and Levene cross-checks"
  },
  {
   "file": "validation/refs-regression.csv",
   "rows": 30,
   "description": "30 observations, 3 correlated predictors, for the OLS cross-check"
  },
  {
   "file": "validation/refs-lognormal-60.csv",
   "rows": 60,
   "description": "60 lognormal values for the Box-Cox and lognormal-fit cross-checks"
  },
  {
   "file": "validation/refs-weibull-80.csv",
   "rows": 80,
   "description": "80 Weibull values for the Weibull-fit cross-check"
  },
  {
   "file": "validation/refs-gage-rr-synthetic.csv",
   "rows": 60,
   "description": "Simulated gauge study, 10 parts × 3 operators × 2 trials"
  },
  {
   "file": "validation/refs-doe-2x3-replicated.csv",
   "rows": 16,
   "description": "2³ factorial, 2 replicates (16 runs), coded −1/+1"
  }
 ]
}
