Repairable Systems Analysis

To run a repairable systems analysis, start by loading ReliaGrowR and ReliaPlotR:

library(ReliaGrowR)
library(ReliaPlotR)

Statistical Background

Repairable systems experience multiple failure events over their lifetime. Standard survival analysis (Kaplan-Meier, Weibull) applies to the first failure; repairable-systems methods model the entire recurrence process (Nelson 2003).

The Mean Cumulative Function (MCF), \(M(t) = E[N(t)]\), is the expected cumulative number of repairs per system by time \(t\). The nonparametric Nelson-Aalen estimator

\[\hat{M}(t) = \sum_{t_i \leq t} \frac{d_i}{r_i},\]

where \(d_i\) is the number of events at time \(t_i\) and \(r_i\) is the number of systems at risk (still under observation), provides an unbiased estimate that properly accounts for systems observed only up to a censoring time (Nelson 2003). This differs fundamentally from the Kaplan-Meier estimator: Kaplan-Meier estimates survival to first event; MCF sums expected recurrences and can exceed 1.

The NHPP Power Law (Crow-AMSAA) model fits a parametric intensity function \(\lambda(t) = \lambda \beta t^{\beta - 1}\) to the recurrent process. It is the repairable-systems analog of the Crow-AMSAA model for development testing: \(\beta < 1\) indicates improving reliability; \(\beta > 1\) indicates deterioration; \(\beta = 1\) is a homogeneous Poisson process (Crow 1974).

The examples below use a fleet of five field units. Each row records which unit failed and when:

id    <- c("U1","U1","U1","U2","U2","U3","U3","U3","U4","U5","U5")
time  <- c( 120, 310, 560, 200, 480, 95, 280, 430, 370, 150, 490)

Mean Cumulative Function

The Mean Cumulative Function (MCF) is a non-parametric estimate of the expected cumulative number of failures per system by time t. It is computed using the Nelson-Aalen estimator, which accounts for systems that are still operating (censored) at the end of the observation window.

end_times <- c(U1 = 600, U2 = 600, U3 = 600, U4 = 600, U5 = 600)
fit_mcf   <- mcf(id = id, time = time, end_time = end_times)
plotly_mcf(fit_mcf)

The shaded band shows the pointwise confidence interval. Hover over the step function to read exact MCF values at each event time.

Exposure Analysis

The exposure plot tracks the cumulative event rate — total failures divided by total system-time — over the observation period. A rising rate indicates a deteriorating fleet; a flat or falling rate indicates stability or improvement.

fit_exp <- exposure(id = id, time = time)
plotly_exposure(fit_exp)

NHPP — Power Law Model

The Non-Homogeneous Poisson Process (NHPP) fits a parametric model to the recurrent failure process. The Power Law model (also called the Crow-AMSAA model for repairable systems) describes how the failure intensity changes over time:

\[\lambda(t) = \lambda \beta \, t^{\beta - 1}\]

A shape parameter \(\beta < 1\) indicates reliability improvement; \(\beta > 1\) indicates deterioration; \(\beta = 1\) reduces to a homogeneous Poisson process.

times  <- c(120, 200, 310, 370, 430, 480, 490, 560)
events <- c(  1,   1,   1,   1,   1,   1,   1,   1)
fit_nhpp <- nhpp(time = times, event = events, model_type = "Power Law")
plotly_nhpp(fit_nhpp)

NHPP — Piecewise Model

When a corrective action or design change is introduced mid-program, the failure process may shift. A piecewise NHPP fits separate Power Law segments on either side of a specified breakpoint, shown as a vertical dotted line:

# Dense failures before the design change (t < 500), sparse afterwards
times2  <- c(30, 65, 105, 150, 200, 255, 315, 380, 450, 800, 1300, 1950, 2800)
events2 <- rep(1, 13)
fit_nhpp2 <- nhpp(time = times2, event = events2, breaks = 500, method = "LS")
plotly_nhpp(fit_nhpp2, fitCol = "steelblue", confCol = "steelblue", breakCol = "red")

Overlay

Multiple MCF or NHPP estimates can be overlaid on the same plot by passing a list of objects. This is useful for comparing two fleets, two time periods, or a before/after scenario.

id2   <- c("A","A","B","B","B","C")
time2 <- c(180, 420, 90, 310, 530, 260)
end2  <- c(A = 600, B = 600, C = 600)
fit_mcf2 <- mcf(id = id2, time = time2, end_time = end2)

plotly_mcf(list(fit_mcf, fit_mcf2), cols = c("steelblue", "tomato"))

References

See Also

Crow, Larry H. 1974. “Reliability Analysis for Complex Repairable Systems.” In Reliability and Biometry: Statistical Analysis of Lifelength, edited by F. Proschan and R. J. Serfling. SIAM.
Nelson, Wayne B. 2003. Recurrent Events Data Analysis for Product Repairs, Disease Recurrences, and Other Applications. ASA-SIAM.