Generate a matrix containing dissimilarities between one or more pairs of
Ecological Dynamic Regimes (EDR). dist_edr()
computes different dissimilarity
indices, all of them based on the dissimilarities between the trajectories of
two EDRs.
Usage
dist_edr(
d,
d.type,
trajectories = NULL,
states = NULL,
edr,
metric = "dDR",
symmetrize = NULL,
...
)
Arguments
- d
Symmetric matrix or object of class
dist
containing the dissimilarities between each pair of states of all trajectories in the EDR or the dissimilarities between each pair of trajectories.- d.type
One of
"dStates"
(ifd
contains state dissimilarities) or"dTraj"
(ifd
contains trajectory dissimilarities).- trajectories
Only if
d.type
="dStates"
. Vector indicating the trajectory or site corresponding to each entry ind
.- states
Only if
d.type
="dStates"
. Vector of integers indicating the order of the states ind
for each trajectory.- edr
Vector indicating the EDR to which each trajectory/state in
d
belongs.- metric
A string indicating the dissimilarity index to be used:
"dDR"
(default),"minDist"
,"maxDist"
.- symmetrize
String naming the function to be called to symmetrize the resulting dissimilarity matrix (
"mean"
,"min"
,"max
,"lower"
,"upper"
). IfNULL
(default), the matrix is not symmetrized.- ...
Only if
d.type
="dStates"
. Further arguments to calculate trajectory dissimilarities. Seeecotraj::trajectoryDistances()
.
Details
The implemented metrics are:
"dDR"
\( d_{DR}(R_1, R_2) = \frac{1}{n} \sum_{i=1}^{n} d_{TR}(T_{1i}, R_2) \)
"minDist"
\( d_{DRmin}(R_1, R_2) = \min_{i=1}^{n} \{ d_{TR}(T_{1i}, R_2) \} \)
"maxDist"
\( d_{DRmax}(R_1, R_2) = \max_{i=1}^{n} \{ d_{TR}(T_{1i}, R_2) \} \)
where \(R_1\) and \(R_2\) are two EDRs composed of \(n\) and \(m\) ecological trajectories, respectively, and \(d_{TR}(T_{1i}, R_2)\) is the dissimilarity between the trajectory \(T_{1i}\) of \(R_1\) and the closest trajectory of \(R_2\):
\( d_{TR}(T_{1i}, R_2) = \min\{d_T(T_{1i}, T_{21}), ... , d_T(T_{1i}, T_{2m})\} \)
The metrics calculated are not necessarily symmetric. That is, \(d_{DR}(R_1, R_2)\)
is not necessarily equal to \(d_{DR}(R_2, R_1)\). It is possible to symmetrize
the returned matrix by indicating the name of the function to be used in symmetrize
:
"mean"
\( d_{DRsym} = \frac{d_{DR}(R_1, R_2) + d_{DR}(R_2, R_1)}{2} \)
"min"
\( d_{DRsym} = \min\{d_{DR}(R_1, R_2), d_{DR}(R_2, R_1)\} \)
"max"
\( d_{DRsym} = \max\{d_{DR}(R_1, R_2), d_{DR}(R_2, R_1)\} \)
"lower"
The lower triangular part of the dissimilarity matrix is used.
"upper"
The upper triangular part of the dissimilarity matrix is used.
References
Sánchez-Pinillos, M., Kéfi, S., De Cáceres, M., Dakos, V. 2023. Ecological Dynamic Regimes: Identification, characterization, and comparison. Ecological Monographs. doi:10.1002/ecm.1589
Examples
# Load species abundances and compile in a data frame
abun1 <- EDR_data$EDR1$abundance
abun2 <- EDR_data$EDR2$abundance
abun3 <- EDR_data$EDR3$abundance
abun <- data.frame(rbind(abun1, abun2, abun3))
# Define row names in abun to keep the reference of the EDR, trajectory, and
# state
row.names(abun) <- paste0(abun$EDR, "_", abun$traj, "_", abun$state)
# Calculate dissimilarities between every pair of states
# For example, Bray-Curtis index
dStates <- vegan::vegdist(abun[, -c(1, 2, 3)], method = "bray")
# Use the labels in dStates to define the trajectories to which each state
# belongs
id_traj <- vapply(strsplit(labels(dStates), "_"), function(x){
paste0(x[1], "_", x[2])
}, character(1))
id_state <- vapply(strsplit(labels(dStates), "_"), function(x){
as.integer(x[3])
}, integer(1))
id_edr <- vapply(strsplit(labels(dStates), "_"), function(x){
paste0("EDR", x[1])
}, character(1))
# Calculate dissimilarities between every pair of trajectories
dTraj <- ecotraj::trajectoryDistances(d = dStates, sites = id_traj,
surveys = id_state,
distance.type = "DSPD")
# Use labels in dTraj to identify EDRs
id_edr_traj <- vapply(strsplit(labels(dTraj), "_"), function(x){
paste0("EDR", x[1])
}, character(1))
# Compute dissimilarities between EDRs:
# 1) without symmetrizing the matrix and using state dissimilarities
dEDR <- dist_edr(d = dStates, d.type = "dStates",
trajectories = id_traj, states = id_state, edr = id_edr,
metric = "dDR", symmetrize = NULL)
# 2) symmetrizing by averaging elements on and below the diagonal and using
# trajectory dissimilarities
dEDR <- dist_edr(d = dTraj, d.type = "dTraj", edr = id_edr_traj,
metric = "dDR", symmetrize = "mean")