npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@iyulab/u-analytics

v0.1.2

Published

Statistical process control, process capability, Weibull reliability, change-point detection, correlation, regression, distribution analysis, and hypothesis testing.

Readme

u-analytics

Crates.io docs.rs CI License

Statistical process control, process capability analysis, Weibull reliability, change-point detection, correlation, regression, distribution analysis, and hypothesis testing for industrial quality engineering.

Modules

| Module | Description | |--------|-------------| | spc | Control charts (X̄-R, X̄-S, I-MR, P, NP, C, U, Laney P'/U', G, T) with Nelson/WE run rules | | capability | Process capability indices (Cp, Cpk, Pp, Ppk, Cpm), sigma level, and Box-Cox non-normal capability | | weibull | Weibull parameter estimation (MLE, MRR) and reliability analysis (R(t), MTBF, B-life) | | detection | Change-point detection (CUSUM, EWMA) | | smoothing | Time series smoothing (SES, Holt linear trend, Holt-Winters seasonal) | | correlation | Correlation analysis (Pearson, Spearman, Kendall, partial, correlation matrices) | | regression | Regression analysis (simple OLS, multiple OLS, VIF multicollinearity) | | distribution | Distribution analysis (ECDF, histogram bins — Sturges/Scott/FD, QQ-plot, KS test) | | testing | Hypothesis testing (t-tests, ANOVA, chi-squared, normality — SW/AD/JB) |

Features

Statistical Process Control (SPC)

Control charts for monitoring process stability:

  • Variables charts: X̄-R, X̄-S, Individual-MR
  • Attributes charts: P, NP, C, U
  • Overdispersion-adjusted: Laney P' and U' (φ coefficient corrects for between-subgroup variation)
  • Rare events: G chart (geometric distribution) and T chart (exponential) for low-defect processes
  • Run rules: Nelson (8 rules), Western Electric (4 rules)
use u_analytics::spc::{XBarRChart, ControlChart};

let mut chart = XBarRChart::new(5);
chart.add_sample(&[25.0, 26.0, 24.5, 25.5, 25.0]);
chart.add_sample(&[25.2, 24.8, 25.1, 24.9, 25.3]);
chart.add_sample(&[25.1, 25.0, 24.7, 25.3, 24.9]);

if chart.is_in_control() {
    println!("Process is stable");
}
use u_analytics::spc::{laney_p_chart, g_chart};

// Laney P' chart for overdispersed proportion data
// samples: (defective count, subgroup size)
let samples = vec![(3u64, 100u64), (5, 120), (2, 95)];
let chart = laney_p_chart(&samples).unwrap();
println!("p̄ = {:.4}, φ = {:.4}", chart.p_bar, chart.phi);

// G chart for rare events (e.g., days between nonconformances)
let inter_event_counts = vec![12.0, 8.0, 25.0, 5.0, 18.0];
let gchart = g_chart(&inter_event_counts).unwrap();

Process Capability

Capability indices quantifying process performance against specifications:

  • Short-term: Cp, Cpk, Cpu, Cpl
  • Long-term: Pp, Ppk, Ppu, Ppl
  • Taguchi: Cpm
  • Sigma level: PPM ↔ sigma conversion (1.5σ shift convention)
  • Non-normal: Box-Cox transformation + capability on transformed scale
use u_analytics::capability::{ProcessCapability, sigma_to_ppm};

let spec = ProcessCapability::new(Some(220.0), Some(200.0)).unwrap();
let data = [210.0, 209.5, 210.2, 209.8, 210.1, 210.3, 209.7, 210.0];
let indices = spec.compute(&data, 0.15).unwrap();

println!("Cp = {:.2}, Cpk = {:.2}", indices.cp.unwrap(), indices.cpk.unwrap());
println!("6σ PPM = {:.1}", sigma_to_ppm(6.0)); // 3.4
use u_analytics::capability::boxcox_capability;

// Non-normal data: auto-estimate λ, transform spec limits, compute Ppk
let skewed_data = vec![0.5, 1.2, 0.8, 2.1, 0.3, 1.7, 0.9, 1.4];
let result = boxcox_capability(&skewed_data, Some(5.0), Some(0.1)).unwrap();
println!("λ = {:.3}, Ppk = {:.3}", result.lambda, result.indices.ppk.unwrap());

Weibull Reliability

Parameter estimation and reliability engineering metrics:

  • MLE: Maximum Likelihood Estimation (Newton-Raphson)
  • MRR: Median Rank Regression (Bernard's approximation)
  • Reliability: R(t), hazard rate, MTBF, B-life
use u_analytics::weibull::{weibull_mle, ReliabilityAnalysis};

let failure_times = [150.0, 200.0, 250.0, 300.0, 350.0, 400.0];
let fit = weibull_mle(&failure_times).unwrap();

let ra = ReliabilityAnalysis::from_mle(&fit);
println!("R(200h) = {:.1}%", ra.reliability(200.0) * 100.0);
println!("MTBF = {:.0}h", ra.mtbf());
println!("B10 life = {:.0}h", ra.b_life(0.10).unwrap());

Change-Point Detection

Algorithms for detecting process mean shifts:

  • CUSUM: Cumulative Sum chart (Page, 1954)
  • EWMA: Exponentially Weighted Moving Average (Roberts, 1959)
use u_analytics::detection::Cusum;

let cusum = Cusum::new(10.0, 1.0).unwrap();
let data = [10.1, 9.9, 10.0, 10.2, 12.0, 12.1, 11.9, 12.3];
let signals = cusum.signal_points(&data);

Test Status

446 lib tests + 68 doc-tests = 514 total
0 clippy warnings

Dependencies

  • u-numflow -- statistics, special functions, probability distributions

References

  • Montgomery, D.C. (2019). Introduction to Statistical Quality Control, 8th ed.
  • Nelson, L.S. (1984). "The Shewhart Control Chart -- Tests for Special Causes"
  • Abernethy, R.B. (2006). The New Weibull Handbook, 5th ed.
  • Page, E.S. (1954). "Continuous Inspection Schemes", Biometrika
  • Roberts, S.W. (1959). "Control Chart Tests Based on Geometric Moving Averages"
  • Laney, D.B. (2002). "Improved Control Charts for Attributes", Quality Engineering 14(4), 531–537
  • Stephens, M.A. (1974). "EDF Statistics for Goodness of Fit", JASA 69(347), 730–737
  • Box, G.E.P. & Cox, D.R. (1964). "An Analysis of Transformations", JRSS-B 26(2), 211–252

Related

License

MIT