View source: R/analysis_selection.R
| selection_similarity | R Documentation |
Calculate pairwise structural similarity among the stored solutions in a
solutionset-class object.
selection_similarity(
x,
metric = c("jaccard", "hamming"),
format = c("long", "matrix")
)
x |
A |
metric |
Character. Similarity metric to use. One of
|
format |
Character. Output format. If |
Solutions are compared using their complete planning-unit/action assignment vectors. Consequently, two solutions that select the same planning unit but assign different actions are treated as structurally different.
For simple conservation-planning problems without explicit actions,
selected planning units are represented using the canonical action name
"conservation".
Two similarity metrics are supported:
"jaccard" compares the sets of selected planning-unit/action
assignments:
J(A,B) =
\frac{|A \cap B|}
{|A \cup B|}.
Jaccard similarity focuses on selected assignments and ignores joint absences. It is generally the preferred metric for sparse conservation and management portfolios.
"hamming" calculates the proportion of decision-vector
positions that are equal:
H(A,B) =
\frac{1}{m}
\sum_{k=1}^{m} I(A_k = B_k),
where m is the number of feasible planning-unit/action assignments.
Unlike Jaccard similarity, Hamming similarity includes shared
non-selections.
For both metrics, similarity ranges from zero to one:
1 indicates identical assignment structures;
0 indicates no structural agreement under the selected
metric.
The corresponding distance is calculated as:
D(A,B) = 1 - S(A,B).
The comparison is performed over all stored solutions in the supplied
object. To compare only a subset, first use
solution_filter or solution_unique.
The two solution-id columns are returned as integers.
If format = "long", a data.frame with columns:
solution_id_1;
solution_id_2;
similarity;
distance.
If format = "matrix", a symmetric numeric matrix of similarities is
returned. Its diagonal is equal to one.
The selected metric is stored in the "metric" attribute.
selection_frequency,
selection_consistency,
solution_filter,
solution_unique,
get_actions,
get_planning_units
# Load a complete simulated planning problem.
example_data <- load_sim_multiaction()
problem <- create_problem(
pu = example_data$planning_units,
features = example_data$features,
dist_features = example_data$dist_features,
cost = "cost"
) |>
add_actions(
example_data$actions,
cost = example_data$action_costs
) |>
add_effects(
example_data$effect_assumptions
) |>
add_constraint_targets_relative(0.05) |>
add_objective_min_cost(alias = "cost", include_pu_cost = FALSE) |>
add_objective_max_effect(alias = "benefit") |>
set_method_weighted_sum(
aliases = c("cost", "benefit"),
runs = set_runs_grid(n = 3),
normalize_weights = TRUE
)
if (requireNamespace("rcbc", quietly = TRUE)) {
problem <- set_solver_cbc(
problem,
verbose = FALSE
)
solutions <- solve(problem)
# Pairwise Jaccard similarity in long format
jaccard_long <- selection_similarity(
solutions
)
jaccard_long
# Symmetric Jaccard similarity matrix
jaccard_matrix <- selection_similarity(
solutions,
format = "matrix"
)
jaccard_matrix
# Hamming similarity includes shared non-selections
hamming_long <- selection_similarity(
solutions,
metric = "hamming"
)
hamming_long
# Compare only structurally unique solutions
unique_solutions <- solution_unique(
solutions,
by = "decisions"
)
selection_similarity(
unique_solutions,
format = "matrix"
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.