FiWiControl/docs/spc.md

57 lines
2.1 KiB
Markdown

# FiWiControl SPC — Shewhart and Hotelling *T*²
**Package:** `**fiwicontrol.spc`**
**Implementation:** `**src/fiwicontrol/spc/`** (`shewhart.py`, `hotelling.py`; lazy exports from `**fiwicontrol/spc/__init__.py*`*)
Small **statistical process control (SPC)** building blocks for lab metrics: a univariate **Shewhart**-style individuals chart (moving-range dispersion) and a multivariate **Hotelling T²** object with a Phase II upper control limit.
---
## Install
SPC uses **NumPy** and **SciPy** (not bundled in the base `**fiwicontrol`** install):
```bash
cd ~/Code/FiWiControl
python3 -m pip install -e ".[spc]"
```
`**import fiwicontrol.spc**` does not load **NumPy** / **SciPy** until you access `**ShewhartControlChart`** (NumPy only) or `**HotellingT2`** (both).
---
## Classes
### `ShewhartControlChart`
- `**ShewhartControlChart(k=3.0)**` — chart width in multiples of estimated sigma.
- `**fit_individuals(x, moving_range_span=2)**` — Phase I fit from a 1-D `**numpy**` array; only `**moving_range_span=2**` is supported (average moving range of consecutive pairs, `**d₂ = 1.128**`).
- `**limits()**``**(LCL, center, UCL)**` with width `**k**` sigma (default `**k=3.0**`).
- `**is_out_of_control(value)**` — boolean vs those limits.
### `HotellingT2`
- `**fit(X)**``**X**` shape `**(m, p)**` with `**m > p + 1**`; unbiased sample covariance, inverse for *T*².
- `**mean_`**, `**covariance_*`* — fitted Phase I mean vector and covariance (after `**fit**`).
- `**t2(x)**` — Hotelling statistic for one observation `**x**` of length `**p**` vs the fitted mean.
- `**ucl(alpha=0.05)**` — Phase II UCL using the `**F_{p, m-p}**` distribution (**SciPy**).
- `**is_out_of_control(x, *, alpha=0.05)`** — `**True`** if `**t2(x) > ucl(alpha=alpha)**` (`**alpha**` is keyword-only).
---
## Tests
With `**[spc]**` installed:
```bash
python3 -m pytest tests/test_spc.py -q
```
---
## See also
- `**README.md**` (full `**fiwicontrol**` package list and `**src/**` layout)
- `**docs/install.md**` (optional `**[spc]**` alongside `**[flows]**`, `**[power]**`, …)