---
# System prepended metadata

title: FOSS4G

---

# 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









