pub struct IndividualMRChart { /* private fields */ }Expand description
Individual and Moving Range (I-MR) control chart.
Monitors individual observations (subgroup size = 1) using the moving range of consecutive observations to estimate process variability.
§Algorithm
- Compute moving ranges: MR_i = |x_i - x_{i-1}| for i >= 1.
- Compute the mean of individual observations (X-bar) and the average moving range (MR-bar).
- I chart limits: CL = X-bar, UCL/LCL = X-bar +/- E2 * MR-bar.
- MR chart limits: CL = MR-bar, UCL = D4 * MR-bar, LCL = 0.
§Examples
use u_analytics::spc::{IndividualMRChart, ControlChart};
let mut chart = IndividualMRChart::new();
for &x in &[25.0, 25.2, 24.8, 25.1, 24.9, 25.3, 25.0, 24.7] {
chart.add_sample(&[x]).unwrap();
}
let limits = chart.control_limits().expect("should have limits after 2+ observations");
assert!(limits.ucl > limits.cl);
assert!(limits.cl > limits.lcl);§Reference
Montgomery, D.C. (2019). Introduction to Statistical Quality Control, 8th ed., Chapter 6: Control Charts for Variables.
Implementations§
Source§impl IndividualMRChart
impl IndividualMRChart
Sourcepub fn with_rules(self, rules: RuleSet) -> Self
pub fn with_rules(self, rules: RuleSet) -> Self
Apply only the given run tests when computing limits.
Defaults to RuleSet::shewhart – the 3-sigma test alone; the
supplementary tests raise the false alarm rate and are asked for here.
Existing points are re-evaluated, so the call may be made at any time.
§Examples
use u_analytics::spc::{IndividualMRChart, ControlChart, RuleSet, ViolationType};
let chart = IndividualMRChart::new()
.with_rules(RuleSet::nelson().without(ViolationType::FourteenAlternating));Sourcepub fn sigma_hat(&self) -> Option<f64>
pub fn sigma_hat(&self) -> Option<f64>
Short-term sigma estimated from this chart:
sigma-hat = MR-bar / d2(2).
The moving range of consecutive observations is a range of two, so
d2(2) = 2/sqrt(pi) is the unbiasing constant. This is the within
sigma a capability study of individual observations uses, and the
counterpart of XBarRChart::sigma_hat for subgroups of one.
Returns None if there is not enough data for control limits.
§Examples
use u_analytics::spc::{ControlChart, IndividualMRChart};
let mut chart = IndividualMRChart::new();
for x in [1.0, 3.0, 2.0] {
chart.add_sample(&[x]).unwrap();
}
// MR-bar = (2 + 1) / 2 = 1.5
let sigma = chart.sigma_hat().expect("limits available");
assert!((sigma - 1.5 / (2.0 / std::f64::consts::PI.sqrt())).abs() < 1e-12);Sourcepub fn sigma_hat_df(&self) -> Option<f64>
pub fn sigma_hat_df(&self) -> Option<f64>
Degrees of freedom of sigma_hat, for Cp/Cpk
intervals: 0.62 (N - 1) for N observations. Successive moving
ranges share a value, so they are not independent and no
range-distribution formula applies; the factor is Wheeler’s empirical
one (as JMP uses it).
Returns None if there is not enough data for control limits.
Sourcepub fn mr_limits(&self) -> Option<ControlLimits>
pub fn mr_limits(&self) -> Option<ControlLimits>
Get the MR chart control limits, or None if insufficient data.
Sourcepub fn mr_points(&self) -> &[ChartPoint]
pub fn mr_points(&self) -> &[ChartPoint]
Get the MR chart points.
Trait Implementations§
Source§impl Clone for IndividualMRChart
impl Clone for IndividualMRChart
Source§impl ControlChart for IndividualMRChart
impl ControlChart for IndividualMRChart
Source§fn add_sample(&mut self, sample: &[f64]) -> Result<(), ControlChartError>
fn add_sample(&mut self, sample: &[f64]) -> Result<(), ControlChartError>
Add a single observation. The sample slice must contain exactly one element.
Source§fn control_limits(&self) -> Option<ControlLimits>
fn control_limits(&self) -> Option<ControlLimits>
None if insufficient data.