level_partitioning: Level Partitioning for ISM

View source: R/level_partitioning.R

level_partitioningR Documentation

Level Partitioning for ISM

Description

Performs hierarchical level decomposition of system elements based on their reachability and antecedent sets. This is a core step in Interpretive Structural Modelling (ISM) analysis.

Usage

level_partitioning(reach_matrix)

Arguments

reach_matrix

A square reachability matrix (n x n) with 0/1 entries, typically computed using compute_reachability. The diagonal should be 1 (self-reachability).

Details

The algorithm implements the standard ISM level partitioning procedure:

  1. For each remaining element i, compute:

    • Reachability set R(i): elements that i can reach (within remaining set)

    • Antecedent set A(i): elements that can reach i (within remaining set)

  2. An element belongs to the current (top) level if: R(i) \cap A(i) = R(i), i.e., the reachability set equals the intersection

  3. Remove top-level elements and repeat until all elements are assigned

This implementation correctly operates on the remaining subset at each iteration, which is essential for correct level assignment.

Value

An object of class ism_levels, which is a list containing:

  • Each element is a vector of node indices belonging to that level

  • Level 1 is the top level (outcomes/dependent variables)

  • Higher numbered levels are lower in the hierarchy (drivers/independent variables)

  • Attribute labels: node names if the input matrix has dimnames

References

Warfield, J. N. (1974). Developing interconnection matrices in structural modeling. IEEE Transactions on Systems, Man, and Cybernetics, SMC-4(1), 81-87. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1109/TSMC.1974.5408524")}

Sage, A. P. (1977). Interpretive Structural Modeling: Methodology for Large-scale Systems. McGraw-Hill.

See Also

compute_reachability for computing reachability matrices, plot_ism for visualization, plot_interactive_ism for interactive visualization, micmac_analysis for MICMAC analysis.

Examples

# Create adjacency matrix
adj_matrix <- matrix(c(0, 1, 0, 0,
                       0, 0, 1, 1,
                       0, 0, 0, 0,
                       0, 0, 0, 0), nrow = 4, byrow = TRUE)
rownames(adj_matrix) <- colnames(adj_matrix) <- c("A", "B", "C", "D")

# Compute reachability matrix
reach_mat <- compute_reachability(adj_matrix)

# Perform level partitioning
levels <- level_partitioning(reach_mat)
print(levels)

# Access specific levels
levels[[1]]  # Top level elements (outcomes)
levels[[length(levels)]]  # Bottom level elements (root causes)

ISMtools documentation built on March 13, 2026, 1:06 a.m.