comparación de técnicas para la obtención de modelos de distribución de especies con r vii...
TRANSCRIPT
Comparación de técnicas para la obtención de modelos de distribución de especies con RVII JORNADAS DE USUARIOS DE R
SALAMANCA 2015
Jennifer Morales Barbero*Dolores Ferrer Castán
Comparación de técnicas para la obtención de modelos de distribución de especies con RVII JORNADAS DE USUARIOS DE R
SALAMANCA 2015
Jennifer Morales Barbero*Dolores Ferrer Castán
Introducción
Hutchinson (1957) definía el nicho ecológico de una especie como un hipervolumen de n-dimensiones en el que se dan las condiciones ambientales necesarias para que la especie puede sobrevivir.
Áreas con una combinación similar de valores de esas mismas variables permitirían la presencia de la especie, generando su distribución potencial.
Los modelos de distribución de especies son una representación parcial de la realidad que trata de generar mapas que representen la idoneidad de un espacio para una especie.
Nicho potencial Nicho realizado
Introducción
Variable 3
Variable 2
Variable 1
Datos de entrada Modelado de nicho Predicción de la distribución potencial de
la especie
Evaluación del modelo
Esquema Modelado de distribución de especies
Introducción
Asunciones:Las variables ambientales determinan el nicho ecológico.La especie se encuentra en equilibrio o pseudoequilibrio con el ambiente.
Incertidumbres:Calidad de capas y datos disponibles.Exactitud, complejidad y naturaleza del modelo.No consideran interacciones bióticas, barreras geográficas, capacidad de
dispersión, etc.
Aplicaciones:Cartografía automática de especies.Análisis de distribución de especies.Localizaciones de poblaciones desconocidas.Predicción de invasiones biológicas.Reconstrucción de distribuciones del pasado.Predicción de efectos del cambio climático.…
Datos de entrada
library(raster)library(maps)library(mapdata)
Importar los datos de las variables predictoras.WorldClim – Global Climate Data http://www.worldclim.org/
Confirmar extensión, resolución, formato y proyección.
bio1<-raster(“C:/.../bio1.asc") # extensión Península Ibérica, formato .asc...predictores <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)class : RasterStack dimensions : 240, 336, 80640, 7 (nrow, ncol, ncell, nlayers)resolution : 0.04166667, 0.04166667 (x, y)extent : -10, 4, 35, 45 (xmin, xmax, ymin, ymax)coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs names : bio1, bio5, bio7, bio14, bio15, bio3, bio12 min values : -7, 113, 123, 0, 11, 26, 219 max values : 193, 364, 335, 105, 86, 50, 1757
predictores_6k <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)predictores_2070<- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)
# extensión Península Ibérica, formato.asc, renombrado a bio1,...
Variables ambientales
Datos de entrada
library(raster)library(maps)library(mapdata)
Environmental data
WorldClim – Global Climate Data http://www.worldclim.org/
bio1<-raster(“C:/.../bio1.asc") # extension Península IbéricaI, format .asc...predictors <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)class : RasterStack dimensions : 240, 336, 80640, 7 (nrow, ncol, ncell, nlayers)resolution : 0.04166667, 0.04166667 (x, y)extent : -10, 4, 35, 45 (xmin, xmax, ymin, ymax)coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs names : bio1, bio5, bio7, bio14, bio15, bio3, bio12 min values : -7, 113, 123, 0, 11, 26, 219 max values : 193, 364, 335, 105, 86, 50, 1757
predictors_6k <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)# extensión PI, format.asc, renombrado a bio1,...
3640
44
bio1
050100150
bio5
150200250300350
bio7
150200250300
3640
44
bio14
020406080100
bio15
20304050607080
bio3
3035404550
-10 -6 -2 2 4
3640
44
bio12
4006008001000120014001600
Variables ambientales
Importar datos de ocurrencia de la especieGlobal Biodiversity Information Facility (http://www.gbif.org)
Limpieza de datosEliminar registros duplicados
sp.occ <-read.csv("C:/…/Sorex_granarius.csv", header=T, sep=",") # formato.csv. 2 columnas (Longitude/Latitude). 2 decimales.coordinates(sp.occ)<-c("longitude","latitude")presclim <- extract(predictores, sp.occ,
method='bilinear', buffer=NULL, fun=NULL, df=TRUE)
#Extraer valores del raster.pres=rep(1, nrow(presclim))presclim = data.frame(presclim, pres)presencias<-cbind(presclim,sp.occ)
Datos de entradaVariable respuesta (Presencias)
Datos de entradaVariable respuesta (“background points”)
https://ecologicaconciencia.wordpress.com/library(dismo) #cf Dolores Ferrer Castán
abs <-read.csv("C:/…/backgroundpoints.csv", header=T) # 500 puntos background, formato .csv; latitud y longitud, redondeado a 2 dígitos; sin duplicados
coordinates(abs)<- c("longitude","latitude")
absclim <- extract(predictores, abs, method='bilinear', buffer=NULL, fun=NULL, df=TRUE) # extraer valores del raster
pres = rep(0, nrow(absclim))absclim = data.frame(absclim, pres)ausencias <- cbind(absclim, background)
presabs <- rbind(presencias, ausencias)presabs = data.frame(presabs)presabs[!duplicated(presabs[,8:9]),] # [,columna longitude:latitude] ID bio1 bio2 bio7 bio12 bio15 pres longitude latitude1 1 85.96 83.48 252.97 706.28 14.49 1 8.02 49.502 2 100.66 88.00 265.91 694.94 18.25 1 8.09 48.993 3 86.74 77.66 233.66 821.35 14.02 1 7.31 50.634 4 93.74 87.31 262.12 713.20 16.31 1 8.00 49.125 5 84.49 87.96 255.04 714.50 15.63 1 7.51 49.396 6 86.78 89.00 257.97 659.96 16.00 1 7.65 49.47
Estudio de correlación entre variablescor.test(variable1, variable2, alternative="two.sided", method="pearson")
Variable respuesta (“background points”)Datos de entrada
Métodos basados en árboles de decisión:
Random Forest (RF; Breiman, 2001).
Selecciona puntos al azar (muestreo con reemplazo) para crear diferentes sets de datos
Al crear los árboles, las variables se eligen en cada nodo del árbol
Crea un árbol de decisión con cada set de datos, obteniendo diferentes árboles (cada set contiene diferentes puntos y diferentes variables)
Predice los nuevos datos usando el "voto mayoritario", donde clasificará como "positivo" si la mayoría de los árboles predicen la observación como positiva
Datos de presencia y “ausencia”
500 “background points”
500 árboles.
Modelado de nicho
Métodos de regresión:
Modelos Aditivos Generalizados (GAMs; Hastie y Tibshirani, 1990; Yee y Mitchell, 1991)
Modelos Lineales Generalizados (GLM; McCullagh y Nelder, 1989))
Distribución binomial de los errores y vinculación logística.
Selección de variables paso a paso hacia delante
Datos de presencia y “ausencia”.
500 “background points”
Tipos de algoritmo
Modelado de nichoGAMs
Relación entre la presencia de Sorex granarius con las variables ambientales más relevantes. Las líneas de regresión han sido generadas mediante modelos aditivos generalizados (GAMs) del paquete “gam”.
15 20 25 30 35
0.0
0.2
0.4
0.6
0.8
1.0
bio5[ord1]
f[or
d1]
15 20 25 30
0.0
0.2
0.4
0.6
0.8
1.0
bio7[ord1]
f[or
d1]
400 600 800 1200 1600
0.0
0.2
0.4
0.6
0.8
1.0
musaraña$bio12[ord1]
f[or
d1]
0 20 40 60 80
0.0
0.2
0.4
0.6
0.8
1.0
musaraña$bio14[ord1]
f[or
d1]
20 30 40 50 60 70
0.0
0.2
0.4
0.6
0.8
1.0
musaraña$bio15[ord1]
f[or
d1]
BIO1 BIO5 BIO7
BIO12 BIO14 BIO15
5 10 15
0.0
0.2
0.4
0.6
0.8
1.0
bio1[ord1]
f[or
d1]
Probabilidad de ocurrencia de la especie
P < 0,0001P < 0,0001
P < 0,0001P < 0,0001P < 0,0001
P < 0,01
Matriz de confusión Curva ROC (Receiver Operating Characteristic)
AUC (Area under the curve) (0.5-1)[0.5, 0.6): Test malo.[0.6, 0.75): Test regular.[0.75, 0.9): Test bueno.[0.9, 0.97): Test muy bueno.[0.97, 1): Test excelente.
Modelado de nicho
Presencia real Ausencia real
Presencia predicha AVerdadero positivo
BFalso negativoError Comisión(sobrepredicción)
Ausencia predichaC
Falso negativoError Omisión(subpredicción)
DVerdadero negativo
Evaluación
A/(A+C) SENSIBILIDAD (Fracción de verdaderos positivos)C/(A+C) TASA OMISIÓN (Fracción de falsos positivos)D/(D+B) ESPECIFICIDAD (Fracción de verdaderos negativos)
GLMs (paso a paso hacia adelante)
modelo <- glm (pres ~ I(bio14^2)+bio1+I(bio7^2)+I(bio7^3)+bio5+bio15+I(bio15^2)+I(bio15^3), binomial, data=presabs)presencias <-read.table("C:/…/sorex_granarius.txt", header=T, dec=",")# 2 columnas (longitude;latitude)ausencias <-read.table("C:/…/backgroundpoints.txt", header=T, dec=",")coordinates(presencias)<-c(“longitude", “latitude")coordinates(ausencias)<-c(“longitude", “latitude")
e <- evaluate(presencias, ausencias, modelo, predictores)eclass : ModelEvaluation n presences : 172 n absences : 469 AUC : 0.9437571 cor : 0.4896901 max TPR+TNR at : -1.190812plot(e, 'ROC', col='blue', cex=0.1)
Modelado de nicho
0.0 0.2 0.4 0.6 0.8 1.0
0.0
0.2
0.4
0.6
0.8
1.0
AUC= 0.944
False postive rate
Tru
e po
sitiv
e ra
te
Métodos de modelado y Evaluación
Random Forest
library(randomForest)
modelo <- pres ~ bio1 + bio3 + bio5 + bio7 + bio12 + bio14 + bio15 #variables no correlacionadasRF <- randomForest(modelo, data=presabs)
e <- evaluate(presencias, ausencias, RF, predictores)eclass : ModelEvaluation n presences : 172 n absences : 469 AUC : 0.9945331 cor : 0.9196274 max TPR+TNR at : 0.3918667plot(e, 'ROC', col=‘red', cex=0.1)
Modelado de nicho
0.0 0.2 0.4 0.6 0.8 1.0
0.0
0.2
0.4
0.6
0.8
1.0
AUC= 0.995
False postive rate
Tru
e p
ositi
ve r
ate
Métodos de modelado y Evaluación
numerador <- exp(3.432890e+01-(4.965115e-03*bio14*bio14)-(5.533876e-01*bio1)-(1.517093e-03*bio7*bio7)+(2.042169e-06*bio7*bio7*bio7)+(4.720571e-01*bio5)-(2.435548e+00*bio15)+(7.346630e-02*bio15*bio15)-(7.257137e-04*bio15*bio15*bio15))denominador <- 1+numeradorcociente <- numerador/denominadorplot(cociente)
GLMs (paso a paso hacia adelante)
modelo <- glm (pres ~ I(bio14^2)+bio1+I(bio7^2)+I(bio7^3)+bio5+bio15+I(bio15^2)+I(bio15^3), binomial, data=presabs)predictores <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)summary(modelo)
Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 3.433e+01 1.178e+01 2.914 0.003568 ** I(bio14^2) -4.965e-03 7.089e-04 -7.004 2.49e-12 ***bio1 -5.534e-01 8.140e-02 -6.798 1.06e-11 ***I(bio7^2) -1.517e-03 2.236e-04 -6.784 1.17e-11 ***I(bio7^3) 2.042e-06 3.657e-07 5.585 2.34e-08 ***bio5 4.721e-01 8.952e-02 5.273 1.34e-07 ***bio15 -2.436e+00 7.020e-01 -3.469 0.000522 ***I(bio15^2) 7.347e-02 1.978e-02 3.714 0.000204 ***I(bio15^3) -7.257e-04 1.797e-04 -4.039 5.36e-05 ***--- Null deviance: 745.60 on 640 degrees of freedomResidual deviance: 327.97 on 632 degrees of freedomAIC: 345.97
(745.6-327.97)*100/745.6[1] 56.01261 # %varianza explicado
Modelado de nicho
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
Predicción de Modelos
p<-predict(predictores, RF)plot(p)
Random Forest
modelo <- pres ~ bio1 + bio3 + bio5 + bio7 + bio12 + bio14 + bio15predictores <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)RF <- randomForest(modelo, data=presabs)
Coefficients:(Intercept) bio1 bio5 bio7 bio14 bio15 4.06898 -0.04518 0.03665 -0.02849 -0.01953 -0.00980
Degrees of Freedom: 640 Total (i.e. Null); 635 ResidualNull Deviance: 125.8 Residual Deviance: 80.2 AIC: 500.8
RFCall: randomForest(formula = model, data = presabs) Type of random forest: regression Number of trees: 500No. of variables tried at each split: 2
Mean of squared residuals: 0.06779842 % Var explained: 65.47
Modelado de nicho
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
Predicción de Modelos
GLMs (modelo hacia adelante)
modelo <- glm (pres ~ I(bio14^2)+bio1+I(bio7^2)+I(bio7^3)+bio5+bio15+I(bio15^2)+I(bio15^3), binomial, data=presabs)predictores_6k <- stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)summary(modelo)
Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 3.433e+01 1.178e+01 2.914 0.003568 ** I(bio14^2) -4.965e-03 7.089e-04 -7.004 2.49e-12 ***Bio1 -5.534e-01 8.140e-02 -6.798 1.06e-11 ***I(bio7^2) -1.517e-03 2.236e-04 -6.784 1.17e-11 ***I(bio7^3) 2.042e-06 3.657e-07 5.585 2.34e-08 ***bio5 4.721e-01 8.952e-02 5.273 1.34e-07 ***bio15 -2.436e+00 7.020e-01 -3.469 0.000522 ***I(bio15^2) 7.347e-02 1.978e-02 3.714 0.000204 ***I(bio15^3) -7.257e-04 1.797e-04 -4.039 5.36e-05 ***
Modelado de nicho
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
Proyección de modelos en espacio y tiempo
#Opción 1: modelo con coeficientes de presente.numerador <- exp(3.432890e+01-(4.965115e-03*bio14*bio14)-(5.533876e-01*bio1)-(1.517093e-03*bio7*bio7)+(2.042169e-06*bio7*bio7*bio7)+(4.720571e-01*bio5)-(2.435548e+00*bio15)+(7.346630e-02*bio15*bio15)-(7.257137e-04*bio15*bio15*bio15))denominador <- 1+numeradorcociente <- numerador/denominadorplot(cociente)
#Opción 2: función predictpred <- predict(predictores_6k, modelo, type="response")plot(pred)
Random Forest
modelo <- pres ~ bio1+bio3+bio5+bio7+bio12+bio14+bio15RF <- randomForest(modelo, data=presabs)predictors_6k <-stack(bio1, bio3, bio5, bio7, bio12, bio14, bio15)
pred <- predict(predictores_6k, RF, type="response")plot(pred)
Modelado de nichoProyección de modelos en espacio y tiempo
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
Modelos consenso:models<-(stack(pred1, pred2, predN))plot(mean(models))
Modelado de nichoBinario
e=evaluate(presencias, ausencias, modelo, predictores)pr <-predict(predictores, modelo)tr<-threshold(e, 'spec_sens') # umbral en el cual la suma de sensibibidad y especificidad es mayor.bin<-pr > trplot(bin)
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
1.0
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
1.0
GLMs(paso a paso hacia delante)
Random Forest
Modelado de nichoResumen Resultados
-10 -8 -6 -4 -2 0 2 4
36
38
40
42
44
0.0
0.2
0.4
0.6
0.8
-10 -8 -6 -4 -2 0 2 4
36
38
40
42
44
0.0
0.2
0.4
0.6
0.8
-10 -8 -6 -4 -2 0 2 4
36
38
40
42
44
0.0
0.2
0.4
0.6
0.8
-10 -8 -6 -4 -2 0 2 4
36
38
40
42
44
0.0
0.2
0.4
0.6
0.8
AUC=0.94356.01 %varianza
explicado
AUC=0.99465.47 %varianza
explicado
GLM
s(p
aso
a pa
so h
acia
ade
lant
e)Ra
ndom
For
est
-10 -8 -6 -4 -2 0 2 4
3638
4042
44
0.0
0.2
0.4
0.6
0.8
-10 -8 -6 -4 -2 0 2 4
36
38
40
42
44
0.0
0.2
0.4
0.6
0.8
Medio Holoceno Presente 2070
¡¡MUCHAS GRACIASpor su atención!!