Los modelos de distribución de especies son represetaciones cartográficas de la idoneidad de un espacio para la presencia de una especie en función de las variables empleadas para generar dicha representación (Mateo, Felicisimo, and Munoz 2011).
La idioneidad no es mas que la relación matemática entre la distribucion real y unas varibles independientes que suelen ser topográficas, ambientales y geológicas.
La variable dependiente es dicotómica (presencia/ausencia) y las independientes pueden ser cuantitativas (e.g., temperatura o elevación) o nominales (e.g., litología o uso del suelo).
Pasos para la realización de un modelo de distribución de especies
Los datos conocidos sobre la distribucion de la especies se realacionan con los datos disponibles, si existe la realación se extrapola, comunmente la interperetación es erronea, pues se toma como la probabilidad de la especie en un punto, realmente es la similitud del lugar según las variables utilizadas (ej. condiciónes ambientales)
Modelos de idioneidad: Representa la distribución potencial de la especie
Modelos del habitat potencial: El concepto puede aplicarse a la decripción de la asociación entre los organismos y las condiciónes ambientales.
Modelos del nicho ecológico: La combinación de condiones ambientales que una especie puede tolerar.
Generalmenete se cuentan con datos de precensia, pocas veces con datos de ausencia y casi nunca cpn datos de abundancias.
Son los datos climaticos, son buenos para determinar el patron general de la distribución de una especie a escalas grandes,sin embargo, a una escala mas reducida las causas de distribución puede ser atribuida la distribución de rescursos y a condiciónes microtopográficas en el ambiente; las variabes cambian según el objetivo, en todo caso es recomendable que tengan estas tres condiciónes:
En la mayoría de los casos, tendrá un archivo con datos de localidad de puntos que representan la distribución conocida de una especie.
library(dismo)
file<- paste0(system.file(package = "dismo"), "/ex/bradypus.csv")
datasp<- read_csv(file)
Importante: las coordenadas deben estar en longitud-latitud
# Variable Dependiente
datasp<- datasp %>% dplyr::select(lon, lat)
#datad<- gbif("solanum", "acaule*", geo = TRUE)
#save(datad, file = "datad.Rdata")
load("datad.Rdata")
datad<- datad %>% filter(lat != "NA" & lon != "NA")
library(maptools)
data(wrld_simpl)
plot(wrld_simpl, xlim=c(-80,70), ylim=c(-60,60), axes=TRUE, col="light yellow")
box()
points(datad$lon, datad$lat, col='orange', pch=20, cex=0.75)
Tener en cuenta la distribución de especie, en este caso Solanum acaule
es una especie que se encuentra en las partes más altas de las montañas de los Andes del sur de Perú, Bolivia y el norte de Argentina.
datap<- datad %>% dplyr::select(c(country, acceptedScientificName, lon, lat))
# Hice el filtro anterior para que no mostrara las columnas completas
coordinates(datap)<- ~lon+lat
raster(datap)
# Este modo se pueden encontrar las anomalias, no encontré en Rmarkdown como hacer para que corriera, se puede copiar en un script para que pueda depurar....
filas<- tibble()
plot(wrld_simpl, xlim=c(-150,150), ylim=c(-80,80), axes=TRUE, col="light yellow")
points(datap$lon, datap$lat, col='orange', pch=20, cex=0.75)
a= row.names(click(datap, n= Inf))
filas<- rbind(filas, a)
load("filas.Rdata")
datad<- datad %>% slice(-as.numeric(c(filas$x)))
Verificar que los puntos si estan dentro de los poligonos de los paises
coordinates(datad)<- ~lon+lat
crs(datad) <- crs(wrld_simpl)
#class(datad)
ovr<- over(datad, wrld_simpl) # Contiene para cada punto, el registro correspondiente de wrld_simpl
ovr<- ovr$NAME
i<- which(ovr != datad$country)
#r<- raster(datad)
#plot(r)
#click(r)
plot(datad)
plot(wrld_simpl, add=T, border='blue', lwd=2)
points(datad[i, ], col='red', pch=20, cex=2)
#click(r)
Estas variables generalmenete se presentan en archivos raster, pueden incluir clima, suelo, terreno, vegetación, uso del suelo y otras.
path <- file.path(system.file(package="dismo"), 'ex')
capas <- list.files(path, pattern='grd$', full.names=TRUE )
El $
signo indica que los archivos deben terminar con los caracteres ‘grd’. Al usar full.names=TRUE
, se vuelven a ajustar los nombres de ruta completos.
conjunto<- stack(capas) # Unir capas
plot(conjunto)
plot(conjunto, 1)
plot(wrld_simpl, add= TRUE)
points(datasp, col= "red")
Se extraen los valores de predictoras con las respuesta..
ocurrencia<- extract(conjunto, datasp)
set.seed(0)
i<- randomPoints(conjunto, 500) # Puntos de fondo (ausencia)
ausencia<- extract(conjunto, i)
ocurrencia<- as.tibble(ocurrencia) %>% mutate(ap= 1)
ausencia<- as.tibble(ausencia) %>% mutate(ap= 0)
conjunto<- rbind(ocurrencia, ausencia) %>% mutate(biome= as.factor(biome),
ap= as.factor(ap))
library(GGally)
conjunto[, 1:8] %>% ggpairs(., ggplot2::aes(colour= conjunto$ap)) + theme(legend.position = "top")
El modelo es muy parecido a una formula para r ~
depende del modelo que se vaya a emplear hay unos que emplean datos de ausencia y presencia glm
y otros solo de presencia bioclim
del paquete dismo
, para este caso se utiliza conjunto
y presencia
data..
conjunto<- conjunto %>% mutate(ap= as.numeric(as.character(ap)))
model<- glm(ap ~ bio16 + bio12+ bio5, data=conjunto)
broom::tidy(model)
## # A tibble: 4 x 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 0.0126 0.105 0.121 0.904
## 2 bio16 0.0000951 0.000112 0.850 0.396
## 3 bio12 0.000124 0.0000411 3.01 0.00274
## 4 bio5 -0.000285 0.000340 -0.838 0.402
broom::augment(model)
## # A tibble: 616 x 11
## ap bio16 bio12 bio5 .fitted .se.fit .resid .hat .sigma .cooksd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 724 1639 338 0.188 0.0179 0.812 0.00256 0.353 0.00338
## 2 1 724 1639 338 0.188 0.0179 0.812 0.00256 0.353 0.00338
## 3 1 1547 3624 329 0.514 0.0367 0.486 0.0107 0.354 0.00517
## 4 1 775 1693 318 0.205 0.0178 0.795 0.00252 0.353 0.00319
## 5 1 775 1693 318 0.205 0.0178 0.795 0.00252 0.353 0.00319
## 6 1 1081 2501 326 0.332 0.0226 0.668 0.00408 0.353 0.00366
## 7 1 516 1214 317 0.121 0.0156 0.879 0.00194 0.352 0.00300
## 8 1 956 2259 335 0.287 0.0196 0.713 0.00307 0.353 0.00313
## 9 1 807 2212 327 0.270 0.0184 0.730 0.00271 0.353 0.00290
## 10 1 877 2233 329 0.278 0.0173 0.722 0.00240 0.353 0.00251
## # … with 606 more rows, and 1 more variable: .std.resid <dbl>
modelb<- bioclim(ocurrencia[,c("bio16", "bio12", "bio5")])
pairs(modelb)
ggpairs(ocurrencia[,c("bio16", "bio12", "bio5")])
conjunto
names(conjunto)
i<- predict(conjunto, model)
plot(i)
Mateo, Ruben G, Angel M Felicisimo, and Jesus Munoz. 2011. “Species Distributions Models: A Synthetic Revision.” Revista Chilena de Historia Natural 84 (2): 217–40.