Se desarrolló un modelo XGBoost para estimar la integridad ecológica, con los siguientes datos:
Fuente de datos | Variable | Nombre de la variable | Link de descarga | Referencia |
---|---|---|---|---|
Hemerobia | Hemerobia | hemerobia | Uso de suelo y vegetación, INEGI | |
Zona de vida de Holdridge | Zona de vida de Holdridge | holdridge | http://www.conabio.gob.mx/informacion/gis/?vns=gis_root/region/fisica/zvh_mx3gw | Portal de Geoinformación, CONABIO |
Elevación (DEM) | Elevación promedio | dem90_mean | https://code.earthengine.google.com/b08b9d4d6689d1f30467a230d9c21ea9 | DEM GLO-30, Copernicus |
Mínimo de elevación | dem90_min | DEM GLO-30, Copernicus | ||
Máximo de elevación | dem90_max | DEM GLO-30, Copernicus | ||
Fotosíntesis (Productividad primaria bruta) | Fotosíntesis promedio anual | modis_mean | https://code.earthengine.google.com/55b24b28652d3a26aa8f5ebc14cc21be | Terra Gross Primary Productivity, NASA LP DAAC |
Desviación estándar anual de fotosíntesis | modis_sd | Terra Gross Primary Productivity, NASA LP DAAC | ||
Promedio de fotosístesis en estación lluviosa | modis_rainy | Terra Gross Primary Productivity, NASA LP DAAC | ||
Promedio de fotosítesis en estación seca | modis_dry | Terra Gross Primary Productivity, NASA LP DAAC | ||
Radar (de apertura sintética en la banda C) | Promedio anual de banda VH | vh | https://code.earthengine.google.com/fc3284f4477aa1765242f61148991966 | Sentinel-1, Copernicus Sentinel data |
DE anual de banda VH | vh_sd | Sentinel-1, Copernicus Sentinel data | ||
Entropía del promedio anual de banda VH | vh_entropy | Sentinel-1, Copernicus Sentinel data | ||
Promedio anual de banda VV | vv | Sentinel-1, Copernicus Sentinel data | ||
DE anual de banda VV | vv_sd | Sentinel-1, Copernicus Sentinel data | ||
Entropía del promedio anual de banda VV | vv_entropy | Sentinel-1, Copernicus Sentinel data | ||
Uso de suelo | Uso de suelo | land_cover | https://code.earthengine.google.com/d8bac0a4a561e853d004d83c60e41fd3 | MODIS Land Cover Type, NASA LP DAAC |
La Zona de vida de Holdridge fue procesada agregando diversas categorías en una sola, con el fin de reducir 31 categorías a 12, de la siguiente manera:
Nueva categoría | Categoría original | Descripción |
1 | 1 | Desierto alvar [Templado - Lluvioso] |
2 | Desierto alvar [Templado - Muy Lluvioso] | |
3 | Desierto alvar [Cálido - Muy Lluvioso] | |
2 | 4 | Desierto Templado Cálido [Templado - Seco] |
3 | 5 | Desierto Subtropical [Cálido - Seco] |
4 | 6 | Tundra Húmeda subalpina [Templado - Lluvioso] |
7 | Tundra Húmeda alpina [Templado - Subhúmedo] | |
5 | 8 | Estepa Espinosa prermontana [Templado - Seco] |
9 | Estepa montana [Templado - Seco] | |
6 | 10 | Matorral Desértico [Cálido - Seco] |
11 | Matorral Desértico premontano [Cálido - Seco] | |
12 | Matorral Desértico montano bajo [Templado - Seco] | |
7 | 13 | Bosque Espinoso [Cálido - Seco] |
8 | 14 | Bosque Muy Seco [Cálido - Subhúmedo] |
9 | 15 | Bosque Seco premontano [Cálido - Subhúmedo] |
16 | Bosque Seco montano bajo [Templado - Subhúmedo] | |
10 | 17 | Bosque Subhúmedo [Cálido - Lluvioso] |
18 | Bosque Subhúmedo premontano [Cálido - Lluvioso] | |
19 | Bosque Subhúmedo montano [Templado - Subhúmedo] | |
20 | Bosque Subhúmedo subalpino [Templado - Seco] | |
21 | Bosque Subhúmedo subalpino [Templado - Subhúmedo] | |
11 | 22 | Bosque Húmedo premontano [Cálido - Lluvioso] |
23 | Bosque Húmedo montano bajo [Templado - Lluvioso] | |
24 | Bosque Húmedo montano [Templado - Lluvioso] | |
25 | Bosque Húmedo subalpino [Templado - Lluvioso] | |
12 | 26 | Bosque Lluvioso [Cálido - Muy Lluvioso] |
27 | Bosque Lluvioso premontano [Cálido - Muy Lluvioso] | |
28 | Bosque Lluvioso montano bajo [Cálido - Muy Lluvioso] | |
29 | Bosque Lluvioso montano bajo [Templado - Muy Lluvioso] | |
30 | Bosque Lluvioso montano [Cálido - Muy Lluvioso] | |
31 | Bosque Lluvioso montano [Templado - Muy Lluvioso] |
Se utilizó la paquetería xgboost
del lenguaje de programación R. Se entrenó el modelo con datos del 2017, a una resolución de 250m para todo el territorio Mexicano. XGBoost tuvo un buen ajuste con los parámetros default, solo fueron modificados algunos considerando el número de variables que se tenían, lo parámetros del modelo final fueron:
-
booster
: gbtree (Default) -
eta
learning rate: 0.3 (Default) -
gamma
minimum loss reduction required to make a further partition on a leaf node of the tree: 0 (Default) -
max_depth
maximum depth of a tree: 10 -
min_child_weight
minimum sum of instance weight needed in a child: 1 (Default) -
subsample
subsample ratio of the training instance: 1 (Default) -
colsample_bytree
subsample ratio of columns when constructing each tree: 0.7Task parameters
-
objective
learning task: multi:softprob (predice las probabilidades de que cada punto pertenezca a cada clase) -
eval_metric
evaluation metric for validation data: merror (error exacto para modelos de clasificación)
El flujo de trabajo es el siguiente:
-
Proyectar cada raster a la misma extención, sistema de coordenadas (epsg) y resolución, mediante el script
scripts/source_extraction/project_raster.R
, que toma un raster de referencia que tiene la exención, epsg y resolución deseada (este se puede encontrar en la carpetascripts/source_extraction
con el nombreMask_IE2018.tif
). Para proyectar rasters con valores continuos, se utilizó el métodoaverage
(promedio) y para valores categóricosnear
(Nearest neighbor). -
Generar el dataframe que será el input del modelo:
- Si no se usa SLIC: Transformar los rasters a un dataframe mediante el script
scripts/source_extraction/create_dataframe.R
, el cual recibe el directorio de la carpeta en donde se encuetran los rasters y arroja un dataframe con cada columna con los valores de cada raster y sus respectivas coordenadas geográficas. - Si se usa SLIC: Se crea el shapefile con superpixeles mediante el algoritmo SLIC, con el script
scripts/source_extraction/create_slic.R
, para después extraer el valor de cada raster sobre los superpixeles conscripts/source_extraction/extract_slic.R
.
Si se desea entrenar el modelo seguir el paso 3, de lo contrario pasar al 4.
- Si no se usa SLIC: Transformar los rasters a un dataframe mediante el script
-
Entrenar el modelo con
xgb_train.r
. Si se tiene una base de datos grande que genera problemas de memoria, utilizarxgb_train_largeData.R
, que crea una matriz esparcida con los datos y entrena el modelo de forma iterativa. -
Predecir el valor de la integridad ecológica con el modelo entrenado y nuevos datos, mediante el script
xgb_predict.R
. Y si se entrenó con matriz esparcida, usarxgb_predict_largeData.R
.
Se puede estimar la integridad ecológica para todo año en el que se tengan datos, con el modelo entrenado para 2017, éste se puede encontrar en la carpeta models
con el nombre xgb.fit
y slic_xgb.fit
para el modelo que usa SLIC.