# FOSS4G
## Español
# **modleR**: un flujo de trabajo modular para el modelado de nichos ecógicos en R
# sobre
- Laboratorio de computación científica: Informática de la biodiversidad, MNE, ciencia abieta, reproducibilidad
- Flujos de trabajo científicos basados en R para descarga y limpieza de datos, verificación taxonómica
# contenido
- Flujos de trabajo científicos y por qué crear un paquete de R
- Paso 1: `setup_sdmdata()`
- muestreo de pseudo-ausencia
- Paso 2: `do_(m)any()`
- Paso 3: `final_model()`
- Paso 4: `ensemble_model()`
# ¿Por qué crear un paquete MNE?
- Comenzamos con un conjunto de scripts de específico del proyecto para ejecutar MNE para especies en el Bosque Atlántico brasileño
- Otros proyectos: estructura similar pero flexibilidad necesaria según la pregunta de investigación
- Muchas opciones dentro de R
- SIG con **raster**, **sp**, **maps**, **rgdal**, **sf**
- paquetes establecidos como **dismo** (Hijmans et al 2017), **BIOMOD2** (Thuiller et al 2007)
- otros paquetes: **ENMeval** (Muscarella et al 2014), **sdm** (Naimi & Araujo 2016), **spThin** (Aiello-Lammens et al 2015), **zoon** (Golding et al. 2018), **wallace** (Kass et al 2018), **kuenm** (Cobos et al 2019), **occCite** (Lowens 2020)
# Necesitábamos un flujo de trabajo en lugar de paquetes de R independientes
# ¿Por qué crear un paquete MNE?
## estructura de carpetas y portabilidad
- Un único directorio de trabajo por proyecto
- Diferentes pasos: diferentes subcarpetas
- Una estructura de subcarpetas consistente
- Rutas relativas en lugar de absolutas y no `setwd()`
# ¿Por qué crear un paquete MNE?
## modularidad
- Cada paso guarda su salida
- El siguiente paso lee la salida anterior
- Usando espacio HD en lugar de RAM
- La persona usuaria puede entrar y salir del flujo de trabajo en cualquier paso
- Paralelización y uso en marcos computacionales de alto procesamiento / alto rendimiento (HPC / HTC)
# ¿Por qué crear un paquete MNE?
## reproducibilidad
Registro completo de metadatos:
- opciones de parametrización
- información de sesión
- paquetes utilizados y su versión
# ¿Por qué crear un paquete MNE?
## interoperabilidad
No creamos nuevas clases o métodos: comunicación con otros paquetes de R
# modleR
Un flujo de trabajo desarrollado para automatizar algunos de los pasos comunes en el modelado de nichos ecológicos
# un flujo de trabajo de cuatro pasos
1. `setup_sdmdata()` configuración de datos
2. `do_any()` y `do_many()`: ajuste, proyección y evaluación del modelo
3. `final_model()`: uniendo particiones
4. `ensemble_model()`: consenso del algoritmo
# Paso 1: `setup_sdmdata()`
# `setup_sdmdata()`: preparación de datos
Preparación y limpieza de datos debe realizarse previamente
- Comprobaciones de limpieza de datos opcionales: datos duplicados, NA y una ocurrencia por píxel
- Diseño experimental: *bootstrap*, validación cruzada
- Muestreo de pseudo-ausencia
- Control de correlación de variables hasta un valor definido por el usuario (p. ej., 0,8)
# muestreo de pseudo-ausencia
# opciones de muestreo de pseudo-ausencia
sin búfer. búfer de distancia media y filtro de distancia euclidiana; búfer definido por la persona usuária (M) y filtro de distancia euclidiana
# salida de `setup_sdmdata()`
Al final de la configuración de datos:
- metadatos e información de sesión
- crea data.frame sdmdata.csv que se utilizará en el siguiente paso
# Paso 2: `do_(m)any()`
# `do_(m)any()`: ajuste y proyección del modelo
# `do_(m)any()`: ajuste y proyección del modelo
- `do_any()` para un algoritmo y partición (ej. algo = "maxent")
- `do_many()` llama a `do_any()` para adaptarse a múltiples algoritmos (ej. bioclim = TRUE, maxent = TRUE)
- Parametrización
- La persona usuária puede aplicar una máscara
- Proyección a diferentes conjuntos de datos (en tiempo o espacio)
- Devuelve una tabla con estadísticas de desempeño --> TSS, AUC, pROC, FNR, Jaccard
# `do_(m)any()`: ajuste y proyección del modelo
Algoritmos actuales:
- bioclim, mahalanobis distance, maxent en el paquete **dismo**
- Boosted Regression Trees(BRT) implementados por la función `gbm.step()` del paquete **dismo**
- maxent del paquete **maxnet**
- GLM de base R, implementado con un enfoque de selección paso a paso
- Support Vector Machines (SVM) de los paquetes **kernlab** y **e1071**
- Random Forest del paquete **randomForest**
# salida de `do_(m)any()`
Al final de la etapa de ajuste del modelo:
- Salidas en el disco duro: .tif, .png para cada partición
- data.frame de evaluación con las estadísticas de rendimiento en diferentes umbrales
- Metadatos e información de sesión
# salida de `do_(m)any()` salida
## un modelo por partición
*Abarema lansgsdorfiii*, tres particiones, Random Forest
# Paso 3. `final_model()`
# `final_model()` un modelo por algoritmo por especie
- lo básico: una medida de tendencia central e incertidumbre entre particiones
- ¿qué modelos unir? (el modelo continuo sin procesar, el binario)
- Algunas operaciones adicionales: consenso entre modelos binarios
- Incertidumbre: rango (max-min) entre particiones
# `final_model()` un modelo por algoritmo por especie
media cruda; consenso binario; incertidumbre (rango)
# Paso 4. `ensemble_model()`
# `ensemble_model()`
# `ensemble_model()`: consenso algorítmico
- Media entre `final_models()`
- Consenso
- Algoritmo de mejor rendimiento
- PCA entre algoritmos
- Métricas de incertidumbre de rango
- Los modelos *ensemble* no necesariamente funcionan mejor que los algoritmos individuales (Zhu & Peterson 2017)
# observaciones finales
- La reproducibilidad debería impulsar cualquier flujo de trabalho de MNE
- Los metadatos son realmente útiles y necesarios
- Cualquier flujo de trabajo MNE debe adaptarse fácilmente a HPC
- La flexibilidad para empezar y salir en cualquier paso es fundamental para garantir una evaluación sólida de los ENM
- No es un problema tener un paquete más si se integra con otros paquetes
----------
## Português
# modleR: um fluxo de trabalho modular para modelagem de nicho ecológico em R
# sobre
- Núcleo de Computação Científica e Geoprocessamento: Informática da Biodiversidade, MNE, ciência aberta, reprodutibilidade
- Fluxos de trabalho científicos baseados em R para download e limpeza de dados, checagem taxonômica
# conteúdo
- Fluxos de trabalhos científicos e por que criar um pacote de R
- Passo 1: `setup_sdmdata()`
- amostragem de pseudo-ausência
- Passo 2: `do_(m)any()`
- Passo 3: `final_model()`
- Passo 4: `ensemble_model()`
# Por que criar um pacote de MNE?
- Começamos com um conjunto de scripts específicos de um projeto para executar MNE para espécies da Mata Atlântica brasileira
- Outros projetos: estrutura similar, mas flexibilidade para se ajustar à pergunta do trabalho
- Muitas opções dentro do R
- SIG com **raster**, **sp**, **maps**, **rgdal**, **sf**
- pacotes estabelecidos como **dismo** (Hijmans et al 2017), **BIOMOD2** (Thuiller et al 2007)
- outros pacotes: **ENMeval** (Muscarella et al 2014), **sdm** (Naimi & Araujo 2016), **spThin** (Aiello-Lammens et al 2015), **zoon** (Golding et al. 2018), **wallace** (Kass et al 2018), **kuenm** (Cobos et al 2019), **occCite** (Lowens 2020)
# Precisásamos de um fluxo de trabalho ao invés de pacotes de R independentes
# Por que criar um pacote de MNE?
## estrutura de pastas e portabilidade
- Um único diretório de trabalho por projeto
- Diferentes passos: diferentes subpastas
- Uma estrutura de pastas consistente
- Caminhos relativos ao invés de absolutos e sem `setwd()`
# Por que criar um pacote de MNE?
## modularidade
- Cada passo guarda sua saída
- O passo seguinte lê a saída anterior
- Uso do HD ao invés de RAM
- A pessoa usuária pode entrar e sair do fluxo de trabalho em qualquer passo
- Paralelização e uso de computação de alto processamento / alto rendimento(HPC / HTC)
# Por que criar um pacote de MNE?
## reprodutibilidade
Registro completo de metadatos:
- opções de parametrização
- información de sesión
- pacotes utilizados e suas versões
# Por que criar um pacote de MNE?
## interoperabilidade
Não criamos novas classes ou métodos: comunicação com outros pacotes de R
# modleR
Um fluxo de trabalho desenvolvido para automatizar os passos comuns de modelagem de nicho ecológico
# um fluxo de trabalho em quatro passos
1. `setup_sdmdata()` preparação dos dados
2. `do_any()` e `do_many()`: ajuste, projeção e avaliação do modelo
3. `final_model()`: juntando partições
4. `ensemble_model()`: consenso algorítmico
# Passo 1: `setup_sdmdata()`
# `setup_sdmdata()`: preparação dos dados
Preparação e limpeza dos dados deve ser realizada previamente
- Checagens opcionais de limpeza de dados: dados duplicados, NA e uma ocorrência por píxel
- Desenho experimental: bootstrap, validação cruzada
- Amostragem de pseudo-ausência
- Controle de correlação entre as variáveis a partir de um corte definido pela pessoa usuária (p. ex., 0,8)
# amostragem de pseudo-ausência
# opções de amostragem de pseudo-ausência
sem bufer; bufer de distância média e filtro de distância euclidiana; bufer definido pela pessoa usuária (M) e filtro de distância euclidiana
# saída de `setup_sdmdata()`
Ao final da preparação dos dados:
- metadatos e informação da seção
- cria data.frame sdmdata.csv que será utilizado no passo seguinte
# Passo 2: `do_(m)any()`
# `do_(m)any()`: ajuste e projeção do modelo
# `do_(m)any()`: ajuste e projeção do modelo
- `do_any()` para un algoritmo y partición (ej. algo = "maxent")
- `do_many()` llama a `do_any()` para adaptarse a múltiples algoritmos (ej. bioclim = TRUE, maxent = TRUE)
- Parametrización
- La persona usuária puede aplicar una máscara
- Proyección a diferentes conjuntos de datos (en tiempo o espacio)
- Tabla de devoluciones con estadísticas de rendimiento --> TSS, AUC, pROC, FNR, Jaccard
# `do_(m)any()`: ajuste y proyección del modelo
Algoritmos actuales:
- bioclim, mahalanobis distance, maxent en el paquete **dismo**
- Boosted Regression Trees(BRT) implementados por la función `gbm.step()` del paquete **dismo**
- maxent del paquete **maxnet**
- GLM de base R, implementado con un enfoque de selección paso a paso
- Support Vector Machines (SVM) de los paquetes **kernlab** y **e1071**
- Random Forest del paquete **randomForest**
# salida de `do_(m)any()` salida
Al final de la etapa de ajuste del modelo:
- Salidas en el disco duro: .tif, .png para cada partición
- data.frame de evaluación con las estadísticas de rendimiento en diferentes umbrales
- Metadatos e información de sesión
# salida de `do_(m)any()` salida
## un modelo por partición
*Abarema lansgsdorfiii*, tres particiones, Random Forest
# Paso 3. `final_model()`
# `final_model()` un modelo por algoritmo por especie
- o básico: una medida de tendencia central y incertidumbre entre particiones
- ¿A qué modelos unirse? (el modelo continuo sin procesar, el binario)
- Algunas operaciones adicionales: consenso entre modelos binarios
- Incertidumbre: rango (max-min) entre particiones
# `final_model()` un modelo por algoritmo por especie
media cruda; consenso binario; incertidumbre (rango)
# Paso 4. `ensemble_model()`
# `ensemble_model()`
# `ensemble_model()`: consenso algorítmico
- Media entre `final_models()`
- Consenso
- Algoritmo de mejor rendimiento
- PCA entre algoritmos
- Métricas de incertidumbre de rango
- Los modelos *ensemble* no necesariamente funcionan mejor que los algoritmos individuales (Zhu & Peterson 2017)
# observaciones finales
- La reprocibilidad debería impulsar cualquier flujo de trabalho de MNE
- Los metadatos son realmente útiles y necesarios
- Cualquier flujo de trabajo MNE deve adaptarse fácilmente a HPC
- La flexibilidad para empezar y salir en cualquier paso es fundamental para garantir una evaluación sólida de los ENM
- No es un problema tener un paquete más si se integra con otros paquetese