knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(dist.structure) library(algebraic.dist)
Importance measures quantify how much a component matters to system
reliability. Different definitions answer different questions.
dist.structure provides four classical measures:
| Measure | Question | |---|---| | Structural | How often is j pivotal across all states of the other components? | | Birnbaum (reliability) | At component reliabilities p, how much does dR/dp_j change R? | | Criticality | Given the system failed by t, what fraction attributable to j failing and being critical? | | Vesely-Fussell | Given the system failed by t, what is the probability that some cut set containing j is fully failed? |
Each reduces to a closed form in simple topologies but diverges on complex ones. The bridge network is a canonical case where all four matter, so we'll use it throughout.
sys <- bridge_dist(replicate(5, exponential(1), simplify = FALSE)) min_paths(sys) min_cuts(sys)
Components 1 and 2 appear in two minimal paths each; components 4 and
5 likewise. Component 3 (the cross-link) appears in two paths but not
the "primary" ones {1,4} and {2,5}.
Structural importance is purely topological: it ignores component distributions.
sapply(1:5, function(j) structural_importance(sys, j))
For the bridge, components 1, 2, 4, 5 are structurally equivalent; component 3 is less structurally important (smaller fraction of pivotal states).
Birnbaum importance is dR/dp_j at given component reliabilities p:
p <- 0.9 sapply(1:5, function(j) birnbaum_importance(sys, j, p))
At iid p = 0.9, the ordering agrees with structural importance (same symmetry). Where they diverge is at non-iid p or time-varying p.
Criticality importance turns Birnbaum into a time-varying quantity by
plugging in p_j(t) = S_j(t):
t_vals <- c(0.1, 0.5, 1, 2) sapply(t_vals, function(t) { sapply(1:5, function(j) criticality_importance(sys, j, t)) })
Each column is a time point; each row is a component. Read it as: "at time t, what fraction of system-failure probability is attributable to component j having failed AND being critical".
At small t (high reliability), the breakdown looks like structural importance (because all components have similar F_j(t)). At larger t, the contributions of each component to system failure diverge.
Vesely-Fussell uses minimal cut sets instead of direct pivotality:
t0 <- 1 sapply(1:5, function(j) vesely_fussell_importance(sys, j, t0))
Component j's Vesely-Fussell importance at time t is the conditional probability that some minimal cut set containing j is fully failed, given that the system has failed by t. It tends to be larger than criticality importance for components that appear in small cuts.
# Build a comparison table at p = 0.9 and t s.t. S(t) = 0.9 for all components. # For iid Exp(1), S(t) = 0.9 -> t = -log(0.9) t_star <- -log(0.9) tab <- data.frame( j = 1:5, structural = sapply(1:5, function(j) structural_importance(sys, j)), birnbaum = sapply(1:5, function(j) birnbaum_importance(sys, j, 0.9)), criticality = sapply(1:5, function(j) criticality_importance(sys, j, t_star)), vesely_fussell = sapply(1:5, function(j) vesely_fussell_importance(sys, j, t_star)) ) tab
For the bridge at iid p = 0.9 (equivalent to t = t_star), all four measures agree on the ordering (components 1, 2, 4, 5 identical; component 3 different). Under heterogeneous reliabilities the measures can rank components differently.
Some importance values have simple closed forms worth remembering:
# Series: Birnbaum importance of j equals product of the OTHER p's. series3 <- series_dist(replicate(3, exponential(1), simplify = FALSE)) p_vec <- c(0.9, 0.8, 0.7) birnbaum_importance(series3, j = 1, p = p_vec) prod(p_vec[-1])
# Parallel: Birnbaum importance of j equals product of the OTHER (1 - p_i). parallel3 <- parallel_dist(replicate(3, exponential(1), simplify = FALSE)) birnbaum_importance(parallel3, j = 1, p = p_vec) prod(1 - p_vec[-1])
# Series: Vesely-Fussell equals F_j / F_sys at time t, since each # component forms its own min cut. t0 <- 1 F_j_1 <- 1 - exp(-t0) F_sys <- 1 - exp(-3 * t0) # Exp(sum(rates) = 3) vesely_fussell_importance(series3, j = 1, t = t0) F_j_1 / F_sys
p
and ask which component contributes most to dR/dp.All four are computed from the same primitives (phi, min_cuts, the
component survivals and failures) and the differences are in which
event you condition on and which counting you do.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.