Written and maintained by CASRAI Editorial Board
Published
On this page
Weibull analysis is a statistical method for modeling time-to-failure, degradation, and survival data across engineering reliability, materials research, and life-science testing. By fitting observational failure records to the two-parameter or three-parameter Weibull distribution, researchers can characterize underlying failure mechanisms, quantify probability percentiles such as B10 life, and make statistically valid predictions even when datasets contain right-censored suspensions. To explore the foundational probability density and cumulative distribution formulas, consult our Weibull equation guide.
What it is used for in research
In empirical laboratory and field research, Weibull analysis serves as the primary analytical framework for life data analysis (LDA). Physical components, structural materials, and biomedical devices rarely exhibit memoryless failure rates over their entire operational lifecycle. Weibull analysis accommodates changing hazard rates across time, providing actionable insights across multiple scientific domains:
- Component Reliability and Life Testing: In mechanical, electrical, and aerospace engineering, researchers evaluate the endurance of mechanical bearings, turbine blades, solar cells, and microelectronics under operational or cyclic stress. When tests run under accelerated environmental conditions, Weibull modeling connects directly with accelerated failure time models.
- Evaluation of Right-Censored Datasets: Laboratory life tests frequently terminate before all test units fail due to time constraints, budget limits, or unfailed sample removal. Weibull analysis incorporates these right-censored “suspensions” alongside recorded failures through Maximum Likelihood Estimation (MLE), contrasting with non-parametric estimators covered in our guide to survival analysis parametric models.
- Failure Physics Classification: The Weibull shape parameter (β) functions as an empirical diagnostic tool. By estimating β, investigators determine whether component degradation is driven by early-life manufacturing defects, random external shocks, or progressive wear-out mechanisms.
- B-Life Metric Determination: Engineering specifications and warranty commitments rely on percentile life metrics. Researchers calculate B10 life (the operational time by which 10% of the population fails) and B50 life (median time to failure) to define preventive replacement schedules.
- Distribution Identification: When evaluating experimental failure times, researchers test whether empirical data follow a Weibull, lognormal, or exponential distribution, following standard workflows for identifying data distributions.
Install or access (official source only)
While commercial desktop statistical suites such as Minitab statistical software or ReliaSoft Weibull++ offer graphical user interfaces for life data analysis, open-source Python packages enable reproducible, automated analysis within scientific data pipelines. The primary open-source library for engineering reliability is reliability, supported by NumPy, SciPy, and Matplotlib.
Install the reliability package from PyPI using standard package management:
pip install reliability numpy matplotlib
Alternatively, in Anaconda or Miniconda scientific research environments, install from conda-forge:
conda install -c conda-forge reliability
Requirements include Python 3.8 or higher, with SciPy providing the underlying numerical optimization algorithms (such as L-BFGS-B and Nelder-Mead).
Step-by-step task
This reproducible workflow demonstrates how to conduct a two-parameter Weibull analysis using the benchmark reliability dataset published in Section 8.4.1.3 of the NIST/SEMATECH e-Handbook of Statistical Methods. The dataset comprises 10 recorded component failure times and 10 right-censored units that survived 500 operating hours without failure.
Step 1: Import packages and prepare failure and censored arrays
Initialize Python and structure the observational data into separate NumPy arrays for failures and right-censored suspensions:
import numpy as np
import matplotlib.pyplot as plt
from reliability.Fitters import Fit_Weibull_2P
# NIST Handbook 151 Section 8.4.1.3 benchmark life test data
# 10 observed failure times in operating hours
failures = np.array([54, 187, 216, 240, 244, 335, 361, 373, 375, 386], dtype=float)
# 10 units that completed 500 hours without failing (right-censored suspensions)
censored = np.full(shape=10, fill_value=500.0, dtype=float)
print(f"Total test units: {len(failures) + len(censored)}")
print(f"Observed failures: {len(failures)}, Suspensions at 500h: {len(censored)}")
Step 2: Fit the two-parameter Weibull model using Maximum Likelihood Estimation
Execute the Weibull fit using Fit_Weibull_2P, specifying Maximum Likelihood Estimation (method='MLE') and 95% two-sided confidence intervals:
# Fit 2-parameter Weibull distribution with MLE
fit = Fit_Weibull_2P(
failures=failures,
right_censored=censored,
method='MLE',
CI=0.95,
show_probability_plot=True,
print_results=True
)
Step 3: Extract parameter estimates and confidence limits
Programmatically access the fitted characteristic life (scale parameter, α or η) and shape parameter (β), along with their upper and lower confidence intervals:
# Scale parameter (characteristic life eta / alpha)
eta_est = fit.alpha
eta_lower = fit.alpha_lower
eta_upper = fit.alpha_upper
# Shape parameter (Weibull slope beta)
beta_est = fit.beta
beta_lower = fit.beta_lower
beta_upper = fit.beta_upper
print(f"Scale parameter (eta): {eta_est:.4f} hours [95% CI: {eta_lower:.4f} - {eta_upper:.4f}]")
print(f"Shape parameter (beta): {beta_est:.4f} [95% CI: {beta_lower:.4f} - {beta_upper:.4f}]")
Step 4: Compute B-life percentiles and survival probabilities
Evaluate operational life percentiles, specifically B10 (time to 10% population failure) and B50 (median lifetime):
# Access underlying Weibull distribution object
dist = fit.distribution
# Compute B10 life (quantile at 10% cumulative failure probability)
b10_life = dist.quantile(0.10)
# Compute B50 life (median life, quantile at 50%)
b50_life = dist.quantile(0.50)
# Compute reliability (survival probability) at 300 operating hours
r_300 = dist.SF(300.0)
print(f"B10 Life: {b10_life:.2f} hours")
print(f"B50 Life (Median): {b50_life:.2f} hours")
print(f"Reliability at 300 hours: {r_300 * 100:.2f}%")
Output and how to read it
Executing the Weibull fit produces numeric parameter tables and an empirical probability plot. Correct interpretation of these outputs requires understanding how the mathematical parameters translate into physical phenomena:
- Characteristic Life (Scale Parameter η / α): In the NIST benchmark dataset, the characteristic life is estimated at 606.53 hours. Regardless of the shape parameter value, η represents the operating threshold where exactly 63.21% (1 − e⁻¹) of the population is expected to fail. For components operating below 606.53 hours, cumulative reliability is greater than 36.79%.
- Shape Parameter (Weibull Slope β): In our model fit, β is estimated at 1.7208. The magnitude of β indicates the underlying failure regime:
- β < 1.0 (Decreasing Failure Rate / Infant Mortality): Units exhibit early-life failures caused by substandard assembly, manufacturing defects, or contamination. Failure rates decrease as weak units are weeded out during initial burn-in screening.
- β = 1.0 (Constant Failure Rate / Exponential Behavior): Failures occur completely at random due to unpredictable external shocks, independent of accumulated operating age. Component survival follows an exponential decay.
- β > 1.0 (Increasing Failure Rate / Wear-Out): Failure risk accelerates over time due to progressive physical degradation, mechanical friction, corrosion, or fatigue. A value of β = 1.72 indicates early wear-out behavior.
- β ≈ 3.44 (Symmetric / Normal Approximation): When β is between 3.2 and 3.6, the Weibull distribution becomes nearly symmetric, closely approximating a normal (Gaussian) distribution.
- Goodness-of-Fit and Likelihood: The fitting algorithm reports the log-likelihood (ln L = −75.135) and Akaike’s Information Criterion (AIC = 154.27). In model selection, lower AIC values indicate superior trade-offs between distributional fit and parametric complexity.
- Weibull Probability Plot: The probability plot displays ln(−ln(1 − F(t))) on the vertical axis against ln(t) on the horizontal axis. A valid two-parameter Weibull model forms a straight line. Observed failures plotted via Bernard median rank plotting positions ((i − 0.3) / (N + 0.4)) should track closely along the fitted regression line within the 95% confidence bounds.
Troubleshooting
When applying Weibull analysis to experimental or field life data, researchers frequently encounter numerical estimation challenges and distributional anomalies:
1. Non-Convergence in Maximum Likelihood Estimation with Small Samples
Symptom: SciPy or reliability raises an optimization warning stating that the log-likelihood optimizer failed to converge, or yields unreasonably inflated parameter confidence intervals.
Cause: Maximum Likelihood Estimation relies on asymptotic properties that can become numerically unstable when the number of observed failures is very small (fewer than 5 failures), particularly when censored suspensions dominate.
Fix: Switch the fitting method from method='MLE' to Rank Regression on X (method='RRX') or Least Squares (method='LS'). Rank regression linearizes the cumulative hazard function and applies ordinary least squares, providing more stable parameter estimates in small-sample regimes.
2. Zero Failures in Testing (Weibayes / 1-Parameter Weibull)
Symptom: Life testing concludes with zero observed failures across all test units, causing 2-parameter estimation functions to return an error.
Cause: Estimating both shape (β) and scale (η) simultaneously requires at least two distinct failure times.
Fix: Apply a 1-parameter Weibull test (Weibayes analysis) by supplying an assumed shape parameter β based on prior historical testing or physics-of-failure standards for the component material (e.g., β = 1.5 for ball bearing fatigue). In reliability, pass force_beta=1.5 into Fit_Weibull_2P to estimate characteristic life under zero-failure conditions.
3. Non-Linear Curvature on Probability Plots (Competing Failure Modes)
Symptom: Data points plotted on Weibull probability paper curve upward or downward in a dog-leg pattern rather than following a single linear trajectory.
Cause: Multiple competing failure modes are operating simultaneously within the sample population (for example, electrical shorting combined with mechanical fatigue wear-out).
Fix: Perform root-cause failure analysis (RCFA) to categorize each observed failure by specific physical mechanism. Filter data by failure mode, treating failures from alternative modes as right-censored suspensions at their time of occurrence, or fit a mixed Weibull distribution (bimodal mixture model).
4. Threshold Failure-Free Operating Life (Three-Parameter Weibull)
Symptom: Plotted data points curve steeply downward near the lower time axis, indicating zero probability of failure before a finite operating threshold.
Cause: The component has a failure-free incubation time (location parameter γ > 0) during which no failures can physically manifest.
Fix: Transition from a two-parameter model to a three-parameter model using reliability.Fitters.Fit_Weibull_3P. Ensure that the estimated location parameter γ is strictly less than the minimum observed failure time.
Free alternatives
Scientific researchers can select among several free and open-source software libraries for conducting Weibull analysis, depending on their programming language, censoring complexity, and reporting needs:
| Software / Library | Primary Language | Estimation Methods | Censoring Support | License | Optimal Research Application |
|---|---|---|---|---|---|
| reliability | Python | MLE, Least Squares, RRX, RRY | Right-censored suspensions | LGPLv3 | Dedicated reliability engineering, automated probability plotting, B-life determination, and accelerated life models. |
| lifelines | Python | MLE (Newton-Raphson) | Right, left, and interval censoring | MIT | Biostatistical survival analysis, clinical trial cohort modeling, and parametric accelerated failure time (AFT) regression. |
| scipy.stats (weibull_min) | Python | MLE (numerical minimization) | Uncensored data (censoring requires custom likelihood) | BSD 3-Clause | General statistical workflows and probability distribution fitting where life data contain no right-censored suspensions. |
| WeibullR | R | MLE, Rank Regression (RRX, RRY) | Right-censored life data | GPL-3 | IEC 61649 compliant industrial reliability data analysis, plotting on standardized Weibull paper grids, and contour plots. |
| survival (survreg) | R | MLE (extreme value reparameterization) | Arbitrary censoring (right, left, interval) | LGPL-2+ | Authoritative epidemiological survival regression, covariate hazard ratio estimation, and clinical mortality studies. |
| OpenTURNS | C++ / Python | MLE, Method of Moments | Right-censored data | LGPLv3 | Structural reliability, uncertainty quantification, and high-dimensional stochastic sensitivity analysis. |
FAQ
What is the difference between Weibull analysis and Kaplan-Meier estimation?
Kaplan-Meier estimation is a non-parametric method that estimates survival probabilities step-by-step from observed data without assuming an underlying distribution. Weibull analysis is a parametric method that fits a continuous mathematical curve defined by scale (η) and shape (β) parameters. While Kaplan-Meier cannot extrapolate beyond the last observed failure time, Weibull analysis allows researchers to model hazard trajectories and extrapolate low-probability percentiles such as B1 life.
What does a Weibull shape parameter (beta) less than 1 mean?
A shape parameter β < 1.0 indicates a decreasing failure rate (DFR) over time, commonly known as the infant mortality or early-life failure phase. This condition signifies that components surviving their initial operational period are less likely to fail per unit time subsequently. Physical causes include material defects, poor soldering, assembly misalignment, or substandard component quality.
How is B10 life calculated from Weibull parameters?
B10 life is the operational time at which 10% of a population is expected to have failed (cumulative failure probability F(t) = 0.10, or reliability R(t) = 0.90). In a two-parameter Weibull model, B10 life is derived by inverting the cumulative distribution function: B10 = η × (−ln(0.90))^(1/β). For the NIST benchmark model (η = 606.53 hours, β = 1.7208), B10 life evaluates to 164.02 hours.
When should researchers use Rank Regression instead of Maximum Likelihood Estimation?
Maximum Likelihood Estimation (MLE) is preferred for moderate to large sample sizes (typically 15 or more observed failures) because it provides mathematically optimal, unbiased parameter estimators with robust asymptotic properties. Rank Regression on X (RRX) is preferred when analyzing small sample sizes (fewer than 10 failures) or heavily censored cohorts, where numerical MLE algorithms can fail to converge or yield unstable confidence limits.
Why is the characteristic life (eta) defined at 63.2% failure probability?
The scale parameter η is termed the characteristic life because setting operating time t equal to η simplifies the two-parameter Weibull cumulative distribution function to F(η) = 1 − exp(−(η/η)^β) = 1 − e⁻¹ = 1 − 0.367879 ≈ 0.6321. This 63.2% failure threshold holds true regardless of the shape parameter β, providing a standardized benchmark for comparative reliability across materials and designs.
Sources
- NIST/SEMATECH. (2026). NIST/SEMATECH e-Handbook of Statistical Methods (NIST Handbook 151). Section 8.1.6.2 (Weibull Distribution), Section 1.3.3.31 (Weibull Plot), and Section 8.4.1.3 (Weibull Maximum Likelihood Estimation Example). Accessed November 9, 2026. https://www.itl.nist.gov/div898/handbook/apr/section1/apr162.htm
- Reid, M. (2026). Reliability: A Python library for reliability engineering and survival analysis. API Reference and Documentation. Accessed November 9, 2026. https://reliability.readthedocs.io/en/latest/
- Davidson-Pilon, C. (2026). Lifelines: Survival Analysis in Python. Univariate WeibullFitter Reference. Accessed November 9, 2026. https://lifelines.readthedocs.io/en/latest/fitters/univariate/WeibullFitter.html
- Silkworth, D., & Abernethy, J. (2026). WeibullR: An R Package for Weibull Analysis. Comprehensive R Archive Network (CRAN). Accessed November 9, 2026. https://cran.r-project.org/web/packages/WeibullR/index.html
- International Electrotechnical Commission. (2008). IEC 61649:2008: Weibull analysis. Technical Committee TC 56 Dependability. Geneva, Switzerland: IEC.







