Logical and set operations are useful for **comparative distribution modelling**, to assess **consensus or mismatch between **the predictions of different** models**, and to quantify **differences between models obtained for different time periods**. Fuzzy set theory (Zadeh 1965, Barbosa & Real 2012) allows performing such operations **without converting the predictions from continuous to binary**, with the inherent application of arbitrary thresholds and over-simplification of model predictions. The result is a continuous numerical value quantifying the intersection, union, sum, or other operation among model predictions, whether binary or continuous.

The *fuzzyOverlay* function, used e.g. by Gutiérrez-Rodríguez et al. (in press) and by Reino et al. (in press) and included in the *fuzzySim* package (>=**1.6**), requires a *data* frame (or a matrix) containing **the model prediction columns to compare**, an indication of which columns are to be compared (*overlay.cols*; by default they are all included), and an *op* indicating the operation to perform between them. Can be ‘**consensus**‘ for the arithmetic mean of predictions (or the fuzzy equivalent of the proportion of models that agree that the species occurs at each site), ‘**fuzzy_and**‘ or ‘**intersection**‘ for fuzzy intersection; ‘**fuzzy_or**‘ or ‘**union**‘ for fuzzy union; ‘**prob_and**‘ or ‘**prob_or**‘ for probabilistic and/or, respectively (see Details); ‘**maintenance**‘ for the values where all predictions for the same row (rounded to the number of digits specified in the next argument) are the same. If data has only two columns to compare, you can also calculate ‘**xor**‘ for exclusive or, ‘**AnotB**‘ for the the occurrence of the species in column 1 in detriment of that in column 2,’**expansion**‘ for the prediction increase in rows where column 2 has higher values than column 1, ‘**contraction**‘ for the prediction decrease in rows where column 2 has lower values than column 1, or ‘**change**‘ for a mix of the latter two, with positive values where there has been an increase and negative values where there was decrease in favourability from columns 1 to 2.

fuzzyOverlay <- function(data,
overlay.cols = 1:ncol(data),
op = "intersection",
na.rm = FALSE,
round.digits = 2
) {
# version 1.2 (13 Nov 2015)
data <- data[ , overlay.cols]
stopifnot(all(data[!is.na(data), ] >= 0 && data[!is.na(data), ] <= 1))
if (op == "consensus") rowSums(data, na.rm = na.rm) / ncol(data)
else if (op %in% c("fuzzy_and", "intersection")) apply(data, MARGIN = 1, FUN = min, na.rm = na.rm)
else if (op == "prob_and") apply(data, MARGIN = 1, FUN = prod, na.rm = na.rm)
else if (op %in% c("fuzzy_or", "union")) apply(data, MARGIN = 1, FUN = max, na.rm = na.rm)
else if (op == "prob_or") apply(data, MARGIN = 1, FUN = sum, na.rm = na.rm) - apply(data, MARGIN = 1, FUN = prod, na.rm = na.rm)
else if (op == "maintenance") ifelse(round(data[ , 2], digits = round.digits) == round(data[ , 1], digits = round.digits), round(data[ , 1], digits = round.digits), 0)
else if (op %in% c("xor", "AnotB", "expansion", "contraction", "change")) {
if (ncol(data) != 2) stop ("This 'op' works only for 'data' with 2 columns.")
if (op == "xor") pmax(pmin(data[,1], 1 - data[,2], na.rm = na.rm), pmin(1 - data[,1], data[,2], na.rm = na.rm), na.rm = na.rm) # http://www.dmitry-kazakov.de/ada/fuzzy.htm#Fuzzy
else if (op == "AnotB") pmin(data[,1], 1 - data[,2], na.rm = na.rm)
else if (op == "expansion") ifelse(data[ , 2] > data[ , 1],
data[ , 2] - data[ , 1],
0)
else if (op == "contraction") ifelse(data[ , 2] < data[ , 1],
data[ , 2] - data[ , 1],
0)
else if (op == "change") data[ , 2] - data[ , 1]
}
else stop ("Invalid 'op' name.")
}

[presented with Pretty R]

You can install and load *fuzzySim* (>= 1.6) and then check *help(fuzzyOverlay)* for further info and reproducible usage examples.

**REFERENCES**

Barbosa A.M. & Real R. (2012) Applying fuzzy logic to comparative distribution modelling: a case study with two sympatric amphibians. *The Scientific World Journal*, 2012, Article ID 428206

Gutiérrez-Rodríguez J., Barbosa A.M. & Martínez-Solano I. (in press) Present and past climatic effects on the current distribution and genetic diversity of the Iberian spadefoot toad (*Pelobates cultripes*): an integrative approach. *Journal of Biogeography*

Reino L., Ferreira M., Martínez-Solano I., Segurado P., Xu C. & Barbosa A.M. (in press) Favourable areas for co-occurrence of parapatric species: niche conservatism and niche divergence in Iberian tree frogs and midwife toads. *Journal of Biogeography*

Zadeh, L.A. (1965) Fuzzy sets. *Information and Control*, 8: 338-353