Constructs a tree structure capturing the hierarchical relationships between spurious extrema through their basins of attraction. The tree alternates between minima and maxima, terminating at non-spurious extrema.
Usage
build.se.tree(
adj.list,
weight.list,
y,
root.vertex,
spurious.min,
spurious.max,
basins,
compute.hr.support = TRUE,
verbose = TRUE
)Arguments
- adj.list
Graph adjacency list (1-based indexing).
- weight.list
Edge weight list.
- y
Numeric vector of function values.
- root.vertex
Vertex index of the spurious extremum to use as root (1-based).
- spurious.min
Integer vector of spurious minimum vertices (1-based).
- spurious.max
Integer vector of spurious maximum vertices (1-based).
- basins
A gfc_basins object from compute.gfc.basins().
- compute.hr.support
Logical; if TRUE, compute the harmonic repair support region.
- verbose
Logical; print progress information.
Value
An object of class "se_tree" containing:
- root.vertex
Root vertex index (1-based)
- root.is.maximum
Logical; TRUE if root is a maximum
- classification
One of "both_types", "only_min", "only_max", "no_terminals"
- nodes
Named list of node structures
- ns.min.terminals
Non-spurious minimum terminal vertices
- ns.max.terminals
Non-spurious maximum terminal vertices
- hr.support.vertices
Vertices in HR support region (if computed)
- hr.support.boundary
Boundary of HR support region (if computed)
Details
The SE tree is built by breadth-first search starting from the root:
Find opposite-polarity extrema within the root's basin
Add them as children, mark as discovered
For each child, recursively find opposite-polarity extrema in its basin
Terminate branches at non-spurious extrema
The tree classification determines the HR support strategy:
both_types: Use branches to both NSMIN and NSMAX terminals
only_min/only_max: Use branch to nearest NS terminal
no_terminals: Use all nodes (isolated SE cluster)
Examples
if (FALSE) { # \dontrun{
# First compute basins
basins <- compute.gfc.basins(adj.list, weight.list, fitted.values)
# Identify spurious extrema (e.g., from hop index analysis)
spurious.min <- c(725, 809, 1806)
spurious.max <- c(718, 815)
# Build SE tree from a spurious minimum
se.tree <- build.se.tree(
adj.list, weight.list, fitted.values,
root.vertex = 725,
spurious.min = spurious.min,
spurious.max = spurious.max,
basins = basins,
compute.hr.support = TRUE
)
print(se.tree)
} # }