本文へ移動
cccskills
無料GitHub で公開

matlab-analyze-reliability

Use this skill when fitting accelerated life models, computing mean time to failure (MTTF), B10 life and similar quantities, fitting life distributions like Weibull for reliability analysis, comparing distribution fits, computing confidence intervals on reliability quantities with bootstrapping, performing lifetime prediction, computing failure rates, plotting Kaplan-Meier curves, computing survival functions, or doing reliability analysis.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md12.6 KB
  • manifest.yaml473 B
  • references/distribution-methods.md1.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

matlab-analyze-reliability

Fit and evaluate probability distributions for use in reliability workflows in MATLAB using the recommended APIs and probability distribution framework (fitdist, makedist, pdf, icdf, cdf, probplot, bootci, fitacclife, meanfailtime).

When to Use

Activate this skill when a user asks to:

  • Fit an accelerated life model
  • Compute standard quantities in a reliability analysis, such as mean time to failure (MTTF) or B10
  • Fit life distributions, such as Weibull, for determining the lifetime/reliability of something
  • Compare multiple distribution fits to determine the best model for failure data
  • Estimate product reliability using lifetime/failure data
  • Compute a survival/survivor function
  • Plot a Kaplan-Meier curve or compute an empirical CDF of failure data
  • Fit a distribution to censored failure data

When NOT to Use

Do not activate this skill when:

  • Fitting probability distributions for general statistical analysis without a reliability or lifetime context
  • Performing hypothesis testing, ANOVA, or regression
  • Computing capability indices (Cpk) or control charts for statistical process control as a standalone workflow
  • Running simulation-based reliability analysis (Monte Carlo, fault trees)

Key Functions

FunctionPurposeToolboxAvailable From
fitdistFit probability distribution to dataStatistics and Machine Learning ToolboxR2009a
makedistCreate probability distribution from parametersStatistics and Machine Learning ToolboxR2013a
bootciBootstrap confidence intervalsStatistics and Machine Learning ToolboxR2006a
fitacclifeFit accelerated life modelStatistics and Machine Learning ToolboxR2026a
meanfailtimeCompute mean failure time from accelerated life modelStatistics and Machine Learning ToolboxR2026a
ecdfEmpirical CDF and Kaplan-Meier survival estimationStatistics and Machine Learning ToolboxR2006a

Conventions

Constructing distribution objects

Always create a distribution object when working with probability distributions. The object stores distribution information, eliminating duplication and repeated computation across a script.

Use makedist when exact distribution parameters are known. Use fitdist when fitting data to a named distribution — this is the more common case. fitdist creates a distribution object and supports censored data via the Censoring name-value argument:

% Fit a Weibull distribution to right-censored failure data
% cens is a logical vector: true = still running (censored), false = failed
pd = fitdist(failureTimes, "weibull", Censoring=cens);

% Assess fit quality using a probability plot
probplot(pd)

Get a list of all supported distributions by executing the command

% All supported distributions
distributions = prob.ProbabilityDistributionRegistry.list() 

% All distributions that can be fit to data via fitdist
fittableDistributions = prob.ProbabilityDistributionRegistry.list('fittable')

This returns a cell array where each entry is a distribution with a corresponding object.

Comparing distribution fits

When determining the best life distribution for failure data, fit multiple candidate distributions and compare them systematically using information criteria, goodness-of-fit tests, and visual assessment.

Step 1: Fit multiple candidates

% Fit candidate life distributions
pdWeibull = fitdist(failureTimes, "weibull");
pdLognormal = fitdist(failureTimes, "lognormal");
pdExponential = fitdist(failureTimes, "exponential");

Step 2: Compare using AIC (Akaike Information Criterion)

AIC balances fit quality against model complexity. Lower AIC is better. Compute AIC from the negative log-likelihood (negloglik) and number of parameters (NumParameters):

% Compute AIC for each fit: AIC = 2*k + 2*NLL
distributions = {pdWeibull, pdLognormal, pdExponential};
distNames = ["Weibull", "Lognormal", "Exponential"];
aic = zeros(1, numel(distributions));
for i = 1:numel(distributions)
    nll = negloglik(distributions{i});
    k = distributions{i}.NumParameters;
    aic(i) = 2*k + 2*nll;
end

% Display comparison table
comparisonTable = table(distNames', aic', VariableNames=["Distribution", "AIC"]);
comparisonTable = sortrows(comparisonTable, "AIC");
disp(comparisonTable)

For BIC (Bayesian Information Criterion), use BIC = k*log(n) + 2*NLL where n is the sample size. BIC penalizes complexity more heavily than AIC.

Step 3: Plotting

Step 3a: Visual comparison with probability plots

Use probplot on each fitted distribution object for a qualitative visual check of fit quality. Data points appear along the straight reference line if the distribution is a good fit:

figure
tiledlayout(1, numel(distributions))
for i = 1:numel(distributions)
    nexttile
    probplot(distNames[i],failureTimes)
    title(distNames(i))
end

Step 3b: Overlay PDFs on a histogram

Plot each candidate's PDF over the data histogram to visually compare how well they capture the shape of the failure time distribution:

figure
histogram(failureTimes, Normalization="pdf")
hold on
t = linspace(min(failureTimes), max(failureTimes), 200);
for i = 1:numel(distributions)
    plot(t, pdf(distributions{i}, t), LineWidth=1.5, DisplayName=distNames(i))
end
hold off
legend
xlabel("Failure Time")
ylabel("Probability Density")
title("Distribution Fit Comparison")

Step 3c: Overlay CDFs on the empirical CDF

Compare fitted CDFs against the empirical CDF to assess fit in the tails:

figure
ecdf(failureTimes)
hold on
for i = 1:numel(distributions)
    plot(t, cdf(distributions{i}, t), LineWidth=1.5, DisplayName=distNames(i))
end
hold off
legend
xlabel("Failure Time")
ylabel("Cumulative Probability")
title("CDF Comparison with Empirical CDF")

Step 4: Goodness-of-fit tests (optional, uncensored data only)

Use hypothesis tests for a formal statistical assessment. These tests do not account for censoring — apply them only to complete (uncensored) failure data. Using them on censored data produces misleading rejections.

Common choices:

  • Kolmogorov-Smirnov test — kstest(failureTimes, CDF=pdWeibull) — tests whether data follows the fitted distribution
  • Chi-square test — chi2gof(failureTimes, CDF=pdWeibull) — tests against the fitted CDF
  • Anderson-Darling — available via adtest — more sensitive in the tails than K-S

A test returning h = 0 means the fit is not rejected at the specified significance level. For censored data, rely on probability plots (probplot) and information criteria (AIC/BIC) to assess fit quality instead.

Working with distribution objects

All distribution objects expose a standard set of methods. Execute methods on a constructed object for the full list. See references/distribution-methods.md for the complete method reference. Key methods for reliability workflows: cdf (with "upper" for survival function), icdf (for quantiles like B10), mean, paramci (parameter confidence intervals), probplot (fit assessment), and plot.

Always prefer distribution object methods over manual computation. For example, use mean(pd) to get the mean of a fitted distribution rather than computing it from the parameters by hand. Use icdf(pd, 0.10) to get the B10 life rather than inverting the CDF manually.

Computing the survival/survivor function

Always compute the survival function using the "upper" argument to cdf. Never compute it as 1 - cdf(...) — this is numerically unstable in the tails. Use the pattern below:

% Create a distribution
pd = makedist('normal');

% Get the survivor/survival function at 0, .2, .4, .6, .8, and 1
surv = cdf(pd, [0, .2, .4, .6, .8, 1], "upper")

Computing the empirical CDF

There are two ways in which the empirical CDF can be computed:

% Create via dedicated command line function
[F, x] = ecdf(survivalTimes)

% Create a distribution object
pd = fitdist(survivalTimes, "Empirical")

Either approach is valid, but the choice to use one or another depends on the end goal. The distribution object allows for computation of the PDF, CDF, etc. The ecdf function can allow for creating a quick visual, or getting a set of CDF numbers. In either case, the computation process can accomodate censored data.

If a user asks for a Kaplan-Meier or K-M curve/estimate, this is what they are referring to. The ecdf function can also get an estimate of the cumulative hazard function (Nelson-Aalen estimator) via Function="cumulative hazard":

% Nelson-Aalen cumulative hazard estimate
[H, x] = ecdf(survivalTimes, Censoring=cens, Function="cumulative hazard");

To plot a Kaplan-Meier survival curve with censored data:

% cens is a logical vector: true = still running (censored), false = failed
% Use 'function','survivor' to plot the survival curve directly
ecdf(survivalTimes, Censoring=cens, Function="survivor")
xlabel("Time")
ylabel("Survival Probability")
title("Kaplan-Meier Survival Estimate")

Fitting distributions that aren't supported by fitdist

Prefer fitdist for fitting distributions. If the requested distribution does not appear in prob.ProbabilityDistributionRegistry.list('fittable'), use the mle function instead. Provide mle with the data and either a PDF function handle or a negative log-likelihood function. For example:

% Create some sample data
x = ncx2rnd(8,3,1000,1);

% Create a function handle for the PDF. Note that this is distribution-specific
% and either you or a user should determine the correct form of this function handle
% The handle should take in a vector of data, and then one argument per parameter to fit
pdfFcn = @(x, v, d) ncx2pdf(x,v,d);

% Get the fitted parameters and confidence intervals
% A start point is required to estimate the parameters. Good values of the 
% start points should be determined based on what each of the distribution parameters represents,
% and they can be derived by data
start = [1 1];
[params, paramsCI] = mle(x, Pdf=pdfFcn, Start=start)

Execute help mle for details on specifying censoring data and other options.

Getting confidence intervals for derived quantities

To get confidence intervals on derived quantities like mean failure time or B10, use bootci with successive refitting:

% Create some sample data
x = wblrnd(30, 10, 100, 1);

% Use bootci to successively refit data to a distribution, and get bootstrapped
% mean failure times
meanFailTime = @(x) mean(fitdist(x, "weibull"));
meanCI = bootci(500, meanFailTime, x)

% If there is censored data, make sure to refit with censoring to get an accurate result
meanFailTime = @(x, cens) mean(fitdist(x, "weibull", Censoring=cens));
meanCI = bootci(500, meanFailTime, x, cens)

Fitting an accelerated life model

Use fitacclife (R2026a or later) to fit accelerated life models. Execute help fitacclife for full details. The function accepts factor data and failure times. Pass stress data in whatever units it is given — do not convert units (e.g., do not convert Celsius to Kelvin). Pass censoring data via the Censoring name-value argument. The default model is Arrhenius — change it with StressModel (built-in options include "arrhenius" and "linear", or pass a function handle for custom models). Change the assumed life distribution with Distribution.

fitacclife returns an AcceleratedLifeModel object. Use meanfailtime on it to get mean failure times at original factor values or at specified normal operating conditions. Visualize predictions with meanfailplot. Other useful methods include accelfactor, coefci, distplot, icdf, and probplot — execute methods on the object for the full list.

If fitacclife emits convergence warnings, try providing initial parameter estimates via InitialStressModelCoefficients and InitialDistributionCoefficient, or adjust optimization settings via the Options argument (see help fitacclife).

Copyright 2026 The MathWorks, Inc.


レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Guide for accessing financial and economic data in MATLAB using the Datafeed Toolbox. Covers Bloomberg (market data via bloomberg/blp/bloombergHypermedia), FRED (Federal Reserve economic data via fredrs), Haver Analytics (economic data via haver/haverdirect/haverview), and LSEG Datastream (historical data via datastreamws). Use when connecting to any of these data providers from MATLAB.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1492026年10月9日 更新

Read BEFORE writing any code that adds Additive White Gaussian Noise (AWGN) to signals and converts between SNR, Eb/No, Es/No, and per-subcarrier SNR for communications simulations, using awgn(), convertSNR(), berawgn(). The default MATLAB patterns for AWGN (e.g., 'measured' option, manual SNR formulas) produce subtly incorrect results. This skill specifies the correct calling conventions, required function usage, and critical anti-patterns that must be avoided.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1492026年10月9日 更新

Analyze AMS waveform data using Mixed-Signal Blockset utilities: phase noise measurement, clock jitter, anti-aliased resampling, timing measurements, lock time, INL/DNL, ADC/DAC calibration, HSpice import. Use when analyzing time-domain voltage from PLL/VCO/clock simulations, measuring phase noise from variable-step solver output, computing jitter, or resampling non-uniform data.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1492026年10月9日 更新

Design and analyze electrically large antenna structures using MATLAB Antenna Toolbox. Covers reflector antennas (parabolic, Cassegrain, Gregorian, offset, corner, cylindrical, spherical, custom STL), reflectarrays and reconfigurable intelligent surfaces (RIS), antennas installed on platforms (vehicles, aircraft, ships, satellites), and radar cross section (RCS) analysis. Includes solver selection (MoM-PO, PO, MoM, FMM), mesh control, and GPU acceleration. Use when the user wants to design a dish/reflector antenna, reflectarray, analyze an antenna on a platform, or compute RCS.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1492026年10月9日 更新

Analyze data using MATLAB. Use when the task involves tables, timetables, time-series data, numeric arrays, sensor matrices, or gridded data — including but not limited to exploring, row filtering, sorting, cleaning, transforming, aggregating, smoothing, padding, trimming, and answering questions about data. MATLAB provides extensive, easy-to-use built-in functions for these workflows with no additional products required.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1492026年10月9日 更新

S-parameters, insertion loss, fields, currents, mesh control, and solver selection for RF PCB performance validation. TRIGGER: user asks to compute S-parameters, analyze insertion/return loss, extract fields or currents, compare MoM vs FEM, or control mesh for any RF PCB component. Invoke BEFORE writing sparameters() or solver code — API is non-obvious. SKIP: designing or creating components (use the specific matlab-design-pcb-* skill), material/stackup setup only (use matlab-manage-pcb-material), optimization sweeps (use matlab-optimize-pcb-design), PDN/IR-drop analysis (use matlab-analyze-pcb-pdn).

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1492026年10月9日 更新

matlab のスキルをすべて見る

このスキルの問題を報告する