likelihood.model.series.md: Maximum Likelihood Estimation for Masked Series System Failures
Two days ago, I submitted likelihood.model to CRAN—the foundation package for composable statistical inference. Next in line: likelihood.model.series.md, which implements maximum likelihood estimation for series systems where component failure causes are masked.
This package represents the practical culmination of my master’s thesis work. Three years of theoretical development, now packaged for anyone analyzing masked failure data.
The Problem: Masked Component Failures
A series system fails when any of its \(m\) components fails. In reliability testing, you observe the system fail at time \(t\), but two layers of uncertainty obscure the full picture:
Right-censoring: Some systems are still running when testing ends—you know they survived at least until time \(\tau\), but not how much longer they would have lasted.
Masked cause of failure: When a system fails, you often can’t identify which component caused it. Diagnostic tests might narrow it down to a candidate set of possible causes, but the true failure component remains ambiguous.
This happens constantly in practice. Electronic systems fail with only board-level diagnostics. Industrial machinery fails without root-cause teardown. Medical devices fail with symptoms pointing to multiple possible subsystems.
The question: given this incomplete information, can you still estimate the lifetime distribution of each component?
The Package: Three Likelihood Models
likelihood.model.series.md provides three models with different complexity-accuracy tradeoffs:
| Model | Parameters | Use Case |
|---|---|---|
exp_series_md_c1_c2_c3 | \(m\) rates \((\lambda_1, \ldots, \lambda_m)\) | Memoryless components (constant failure rate) |
wei_series_md_c1_c2_c3 | \(2m\) params \((k_1, \beta_1, \ldots, k_m, \beta_m)\) | Weibull with per-component shapes |
wei_series_homogeneous_md_c1_c2_c3 | \(m+1\) params \((k, \beta_1, \ldots, \beta_m)\) | Weibull with shared shape parameter |
Each model implements the full inference stack: loglik(), score(), hess_loglik(), rdata(), and assumptions().
The C1-C2-C3 Conditions
The models assume three conditions that simplify the likelihood:
- C1: The failed component is in the candidate set with probability 1
- C2: Given the failed component is in the candidate set, masking probability is uniform across candidates
- C3: Masking probabilities are independent of system parameters \(\theta\)
Under these conditions, the masking mechanism factors out of the likelihood—you can estimate component parameters without modeling the diagnostic process itself. This is why the package name includes “c1_c2_c3”.
When these conditions don’t hold, see mdrelax for relaxed masking models.
Usage
Basic workflow for exponential series systems:
...Read more →