Compares simulated against observed change with Pontius' figure of merit (Pontius et al. 2008). The initial and observed maps are read from a reference run, the simulated maps from one or more other runs, each through its own run lineage. Every cell that changed in either the observed or a simulated map is one of:
hit: observed change, simulated as change to the observed class;
wrong hit: observed change, simulated as change to another class;
miss: observed change, simulated as persistence;
false alarm: observed persistence, simulated as change.
The figure of merit is hits / (misses + hits + wrong hits + false alarms), the share of the
union of observed and simulated change that the simulation got right. Cells that persisted in
both maps do not enter it, so, unlike overall agreement, it is not inflated by a mostly
unchanging landscape. Its value scales with how much change there is to get right, so compare
it against figure_of_merit_null, the value expected when the simulated quantity of each
transition is placed at random among the cells of its initial class.
Cells whose change is not the model's to get right, such as a class whose transitions are
imposed deterministically, can be left out with exclude_id_lulc. Which cells are left out
is decided on the reference run alone: a cell is ignored, in every simulated run, if its class
in the reference run's initial or observed map is one of them. Its simulated class does not
matter.
For an ensemble of runs, the expected counts are the means of the per-run counts; recompute the ratios from those means rather than averaging the per-run ratios.
Usage
figure_of_merit_v(
self,
id_period_anterior,
id_period_post,
id_run_reference,
id_run_simulated = self$id_run,
by_transition = FALSE,
exclude_id_lulc = integer(0)
)Arguments
- self
An evoland_db instance
- id_period_anterior
Integer, period of the initial map
- id_period_post
Integer, period of the observed and simulated maps
- id_run_reference
Integer, run holding the initial and observed maps
- id_run_simulated
Integer vector, runs holding the simulated maps; defaults to the active run
- by_transition
Logical; if
TRUE, report per transition instead of overall.- exclude_id_lulc
Integer vector of classes; cells whose class in the reference run, at
id_period_anteriororid_period_post, is one of them are ignored. Default none.
Value
A data.table::data.table() with one row per simulated id_run (and transition).
Overall (by_transition = FALSE): hits, wrong_hits, misses, false_alarms,
figure_of_merit, producers_accuracy (hits over observed change), users_accuracy
(hits over simulated change) and figure_of_merit_null. Per transition:
id_lulc_anterior, id_lulc_posterior, the observed and simulated cell counts,
hits, figure_of_merit (hits over the union of observed and simulated change) and
figure_of_merit_null. Cells missing from any of the three maps are ignored.