KUENM, MOP, procedimientos de transferencia
Universidad Nacional Autonoma de México
En MNE, transferir un modelo implica proyectar las relaciones especie–ambiente estimadas en una region y periodo especifico hacia nuevos escenarios.
Basado en Qiao et al. (2018)
El modelo se calibró con las condiciones climáticas del rango nativo de la especie en América y se transfirió a Australia, donde fue introducida.
Un modelo Maxent calibrado con registros y condiciones ambientales actuales fue transferido a escenarios de 2050 y 2070.
Liu et al. (2022). Bajo RCP8.5, el modelo proyectó una pérdida neta de hábitat adecuado de 25% para 2050 y 38% para 2070.
Desarrollar un modelo de nicho ecológico con kuenm2, desde la limpieza y preparación de los datos hasta la calibración, selección, y transferencia del modelo.
Durante las transferencias compararemos:
kuenm2 es un paquete de R para desarrollar modelos de nicho ecológico de manera detallada y reproducible.
Actualmente permite trabajar con:
Incluye herramientas para preparar y explorar los datos, calibrar y seleccionar modelos, realizar transferencias y analizar su incertidumbre.
Figura tomada de la documentación oficial de kuenm2, distribuida bajo licencia GPL ≥ 3.
Seguiremos las etapas descritas en las guías oficiales:
Importante
Esta práctica es una adaptación de las guías oficiales de kuenm2, desarrolladas por Weverton C. F. Trindade, Luis F. Arias-Giraldo, Luis Osorio-Olvera, A. Townsend Peterson y Marlon E. Cobos.
La documentación original contiene más opciones. Recomiendo revisarla!
help(package = "kuenm2")El código de kuenm2 se distribuye bajo licencia GPL ≥ 3.
Lagartija espinosa azul yucateca (Sceloporus serrifer). Una especie de lagartija de la Peninsula de Yucatan.
Antes de estimar un modelo debemos limpiar nuestros datos!
En esta sección:
Sección adaptada de la guía oficial
Basic Data Cleaning.
id uuid observed_on_string
1 1276590 653d1567-91c5-48d4-82ea-2873069d6877 2012-05-04
2 2349231 56a61b7f-9c97-4416-bb2e-5df72d44449e 2011-06-19
3 2695920 3ce7ede8-ec7a-496b-8b54-f3dea926f666 2015-11-29 9:36:42 AM CST
4 3697300 490d01d7-5807-4dc9-8117-498141bea807 2007/03/16 4:12 PM HST
5 3697301 93c6d784-6764-402e-bb4e-2aacc70ce16b 2007/03/16 4:13 PM HST
6 3697302 665bc265-1b38-41c9-88cb-c08712127976 2007/03/16 4:13 PM HST
observed_on time_observed_at time_zone user_id
1 2012-05-04 Mexico City 1315
2 2011-06-19 Mexico City 77824
3 2015-11-29 2015-11-29 15:36:42 UTC Central Time (US & Canada) 16074
4 2007-03-16 2007-03-17 02:12:00 UTC Hawaii 238859
5 2007-03-16 2007-03-17 02:13:00 UTC Hawaii 238859
6 2007-03-16 2007-03-17 02:13:00 UTC Hawaii 238859
user_login user_name created_at
1 escalante-pasos Jorge Armín Escalante-Pasos 2015-03-07 17:07:29 UTC
2 adorantes Alfredo Dorantes Euan 2015-11-04 22:23:15 UTC
3 sergiofernando121 Sergio Fernando 2016-02-19 02:49:41 UTC
4 rafas-lara Rafa Lara 2016-07-18 07:54:17 UTC
5 rafas-lara Rafa Lara 2016-07-18 07:54:18 UTC
6 rafas-lara Rafa Lara 2016-07-18 07:54:18 UTC
updated_at quality_grade license
1 2021-11-19 01:07:31 UTC research CC-BY
2 2021-10-13 14:18:57 UTC research
3 2021-10-13 14:19:00 UTC research CC-BY-NC
4 2022-10-12 04:30:26 UTC research
5 2022-10-12 04:30:26 UTC research
6 2022-10-12 04:30:26 UTC research
url
1 http://conabio.inaturalist.org/observations/1276590
2 http://conabio.inaturalist.org/observations/2349231
3 http://www.inaturalist.org/observations/2695920
4 http://www.inaturalist.org/observations/3697300
5 http://www.inaturalist.org/observations/3697301
6 http://www.inaturalist.org/observations/3697302
image_url
1 https://inaturalist-open-data.s3.amazonaws.com/photos/1601390/medium.jpg
2 https://static.inaturalist.org/photos/2609829/medium.JPG
3 https://inaturalist-open-data.s3.amazonaws.com/photos/3034176/medium.jpeg
4 https://static.inaturalist.org/photos/4291334/medium.jpeg
5 https://static.inaturalist.org/photos/4291336/medium.jpeg
6 https://static.inaturalist.org/photos/4291337/medium.jpeg
sound_url tag_list description
1 NA Macho subadulto
2 NA Reptiles Yucatán, Reptiles Homún
3 NA
4 NA
5 NA
6 NA
num_identification_agreements num_identification_disagreements
1 3 0
2 2 0
3 2 0
4 1 0
5 1 0
6 1 0
captive_cultivated oauth_application_id
1 false NA
2 false NA
3 false 2
4 false NA
5 false NA
6 false NA
place_guess latitude longitude
1 San Antonio Kaua 20.94463 -89.58681
2 Homun, Yucatán 20.73728 -89.28595
3 Calle 85 30, Santa Isabel, 97370 Kanasín, Yuc., México 20.91694 -89.57487
4 Ocosingo, Chis., México 16.89572 -90.96684
5 Ocosingo, Chis., México 16.89778 -90.96877
6 Ocosingo, Chis., México 16.89687 -90.96877
positional_accuracy private_place_guess private_latitude private_longitude
1 31 NA NA NA
2 15 NA NA NA
3 33 NA NA NA
4 61 NA NA NA
5 61 NA NA NA
6 61 NA NA NA
public_positional_accuracy geoprivacy taxon_geoprivacy coordinates_obscured
1 31 open false
2 15 open false
3 33 open false
4 61 open false
5 61 open false
6 61 open false
positioning_method positioning_device species_guess
1 Sceloporus serrifer serrifer
2 Lagartija espinosa azul
3 gps gps Yucatecan Blue Spiny Lizard
4 Lagartija espinosa azul
5 Lagartija espinosa azul
6 Lagartija espinosa azul
scientific_name common_name iconic_taxon_name taxon_id
1 Sceloporus serrifer Yucatecan Blue Spiny Lizard Reptilia 36178
2 Sceloporus serrifer Yucatecan Blue Spiny Lizard Reptilia 36178
3 Sceloporus serrifer Yucatecan Blue Spiny Lizard Reptilia 36178
4 Sceloporus serrifer Yucatecan Blue Spiny Lizard Reptilia 36178
5 Sceloporus serrifer Yucatecan Blue Spiny Lizard Reptilia 36178
6 Sceloporus serrifer Yucatecan Blue Spiny Lizard Reptilia 36178
[1] 430
occ <- occ_raw[, c(
"scientific_name",
"longitude",
"latitude")]
names(occ) <- c("species", "longitude", "latitude")
head(occ) species longitude latitude
1 Sceloporus serrifer -89.58681 20.94463
2 Sceloporus serrifer -89.28595 20.73728
3 Sceloporus serrifer -89.57487 20.91694
4 Sceloporus serrifer -90.96684 16.89572
5 Sceloporus serrifer -90.96877 16.89778
6 Sceloporus serrifer -90.96877 16.89687
Construimos un buffer de 200 km alrededor de los registros y recortamos las variables ambientales.
# Convertir los registros en un objeto espacial
registros <- vect(occ, geom = c("longitude", "latitude"),
crs = "EPSG:4326")
# Proyectar a coordenadas en metros
registros_utm <- project(registros, "EPSG:32616")
# Crear un buffer de 200 km
M_buffer <- buffer(registros_utm, width = 200000)
# Unir los buffers
M_buffer <- aggregate(M_buffer)
# Regresar al CRS de las variables
M_buffer <- project(M_buffer, crs(variables))
# Recortar las variables
M_var <- crop(variables, M_buffer)
M_var <- mask(M_var, M_buffer)
plot(M_var)Los ambientes que han sido accesibles para la especie, dónde se generan los puntos de fondo
Sí. Cambiarían los ambientes de fondo y, por lo tanto, el contraste utilizado para estimar las relaciones especie–ambiente.
Conservamos una sola presencia dentro de cada celda de las variables ambientales.
prepare_data():
Utilizaremos:
Esto produce seis modelos candidatos.
set.seed(123)
datos_calibracion <- prepare_data(
algorithm = "maxnet",
occ = occ_clean_cell,
x = "longitude",
y = "latitude",
raster_variables = M_var,
min_number = 4,
species = "Sceloporus serrifer",
partition_method = "kfolds",
n_partitions = 4,
n_background = 1000,
features = c("l", "q"),
r_multiplier = c(0.5, 1, 2))prepared_data object summary
============================
Species: Sceloporus serrifer
Number of Records: 1053
- Presence: 53
- Background: 1000
Partition Method: kfolds
- Number of kfolds: 4
Continuous Variables:
- bio_1, bio_12, bio_15, bio_4
Categorical Variables: None
PCA Information: PCA not performed
Weights: No weights provided
Calibration Parameters:
- Algorithm: maxnet
- Number of candidate models: 6
- Features classes (responses): l, q
- Regularization multipliers: 0.5, 1, 2
El resumen permite comprobar:
Los seis modelos candidatos serán evaluados utilizando cuatro criterios:
“Concave (or bimodal) curves indicate that higher suitability is found at variable values around a point of lower suitability”
calibracion <- calibration(
data = datos_calibracion,
remove_concave = TRUE,
error_considered = 10,
omission_rate = 10,
parallel = FALSE,
ncores = 1)
|
| | 0%
|
|======================================================================| 100%
|
| | 0%
|
|======================= | 33%
|
|=============================================== | 67%
|
|======================================================================| 100%
|
| | 0%
|
|======================= | 33%
|
|=============================================== | 67%
|
|======================================================================| 100%
calibration_results object summary (maxnet)
=============================================================
Species: Sceloporus serrifer
Number of candidate models: 6
- Models removed because they failed to fit: 0
- Models identified with concave curves: 3
- Model with concave curves removed
- Models removed with non-significant values of pROC: 0
- Models removed with omission error > 10%: 0
- Models removed with delta AIC > 2: 0
Selected models: 3
- Up to 5 printed here:
ID Formulas Features R_multiplier
1 1 ~bio_1 + bio_12 + bio_15 + bio_4 -1 l 0.5
2 2 ~bio_1 + bio_12 + bio_15 + bio_4 -1 l 1.0
3 3 ~bio_1 + bio_12 + bio_15 + bio_4 -1 l 2.0
pval_pROC_at_10.mean Omission_rate_at_10.mean dAIC Parameters
1 0 0.0948 0.0000000 4
2 0 0.0948 0.0907178 4
3 0 0.0755 0.4388027 4
ID Formulas R_multiplier Features
1 1 ~bio_1 + bio_12 + bio_15 + bio_4 -1 0.5 l
2 2 ~bio_1 + bio_12 + bio_15 + bio_4 -1 1.0 l
3 3 ~bio_1 + bio_12 + bio_15 + bio_4 -1 2.0 l
Omission_rate_at_10.mean Omission_rate_at_10.sd Mean_AUC_ratio_at_10.mean
1 0.0948 0.0395 1.206010
2 0.0948 0.0395 1.204976
3 0.0755 0.0027 1.201239
Mean_AUC_ratio_at_10.sd pval_pROC_at_10.mean pval_pROC_at_10.sd AICc
1 0.008649086 0 0 713.0060
2 0.006980445 0 0 713.0967
3 0.006494816 0 0 713.4448
Parameters Is_concave dAIC
1 4 FALSE 0.0000000
2 4 FALSE 0.0907178
3 4 FALSE 0.4388027
Los modelos seleccionados:
fit_selected() vuelve a ajustar las configuraciones seleccionadas utilizando:
fitted_models object summary
============================
Species: Sceloporus serrifer
Algortihm: maxnet
Number of fitted models: 3
Models fitted with 4 replicates
Cada configuración seleccionada contiene:
Las curvas muestran cómo cambia la idoneidad estimada a lo largo de cada variable ambiental.
Las líneas verticales discontinuas delimitan los valores utilizados para ajustar los modelos.
Utilizaremos las condiciones proyectadas por MIROC6 para el escenario SSP5-8.5 durante 2041–2060.
future_all <- rast("G_var/set_1/future/bios.tif")
G_future <- future_all[[c(1, 4, 12, 15)]]
names(G_future) <- names(M_var)
G_futureclass : SpatRaster
size : 1080, 2160, 4 (nrow, ncol, nlyr)
resolution : 0.1666667, 0.1666667 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326)
source : bios.tif
names : bio_1, bio_12, bio_15, bio_4
min values : -52.8, 11.2, 0.0, 0.0
max values : 33.2, 2313.7, 8010.2, 236.3
Las variables futuras se recortan utilizando la misma área empleada para calibrar el modelo.
Los predictores presentes y futuros deben tener los mismos nombres
Cuando las condiciones de la región de transferencia exceden los rangos ambientales de calibración, podemos utilizar tres procedimientos:
Extrapolación libre — E: Las respuestas estimadas continúan fuera del rango de calibración.
Extrapolación con clamping — EC: Los valores ambientales que exceden el rango se sustituyen por el límite mínimo o máximo conocido.
No extrapolación o truncamiento — NE: Las celdas con al menos una variable fuera del rango de calibración reciben idoneidad cero.
Dentro de los rangos de calibración, los tres procedimientos producen la misma predicción.
Realizaremos la transferencia utilizando los tres procedimientos:
prediccion_E <- predict_selected(
models = modelos_finales,
new_variables = G_var,
type = "cloglog",
consensus = "mean",
extrapolation_type = "E",
progress_bar = FALSE)
prediccion_EC <- predict_selected(
models = modelos_finales,
new_variables = G_var,
type = "cloglog",
consensus = "mean",
extrapolation_type = "EC",
progress_bar = FALSE)
prediccion_NE <- predict_selected(
models = modelos_finales,
new_variables = G_var,
type = "cloglog",
consensus = "mean",
extrapolation_type = "NE",
progress_bar = FALSE)Compararemos las áreas que permanecen adecuadas, se pierden o se ganan bajo cada procedimiento.
cambios_E <- prediction_changes(
current_predictions = mapa_actual,
new_predictions = mapa_E,
fitted_models = modelos_finales,
predicted_to = "future")
cambios_EC <- prediction_changes(
current_predictions = mapa_actual,
new_predictions = mapa_EC,
fitted_models = modelos_finales,
predicted_to = "future")
cambios_NE <- prediction_changes(
current_predictions = mapa_actual,
new_predictions = mapa_NE,
fitted_models = modelos_finales,
predicted_to = "future")Al transferir el modelo hacia condiciones futuras pueden aparecer ambientes que no estuvieron representados durante la calibración.
El análisis MOP permite identificar:
MOP compara las condiciones ambientales de calibración con las condiciones del escenario de transferencia.
Las condiciones de transferencia que quedan fuera de los rangos observados durante la calibración representan extrapolación estricta.
Información de Owens et al. (2013), disponible también en la documentación de smop.
par(mfrow = c(1, 3))
plot(MOP_futuro$mop_basic, main = "Condiciones no análogas",
col = c("grey90", "#D55E00"), axes = FALSE)
plot(MOP_futuro$mop_simple, main = "Variables fuera del rango",
col = hcl.colors(8, "YlOrRd"), axes = FALSE)
plot(MOP_futuro$mop_distances, main = "Disimilitud ambiental",
col = hcl.colors(100, "Inferno"), axes = FALSE)Las celdas resaltadas presentan valores futuros superiores al máximo utilizado durante la calibración.
Las celdas resaltadas presentan valores futuros inferiores al mínimo utilizado durante la calibración.
MOP identifica las regiones donde la transferencia ocurre bajo condiciones ambientales no representadas durante la calibración.
En esas regiones: - E: el modelo continúa sus respuestas fuera del rango; - EC: los valores se limitan al mínimo o máximo conocido; - NE: las celdas fuera del rango reciben idoneidad cero.
MOP indica dónde existe riesgo de extrapolación y la predicción debe interpretarse con mayor precaución.