Macroecología
Instituto de Ecología, A.C. - INECOL
Cargar el paquete letsR
library(letsR)
Cargar la matriz de presencia-ausencia observada
load("ejercicios_datos/bats_PAM.Rdata")
bats.pam <- m.PAM
Calcular el tamaño de range de las especies
bats.ranges <- lets.rangesize(bats.pam, units = "cell")
Ahora tenemos un vector con los tamaños de range (número de celdas) de las especies
El enfoque interespecífico se basa en el análisis de las especies como unidades, necesitando la caracterización de las propriedades de las especies. Además del atributo (range size), necesitamos obtener la ‘ubicación’ de las especies en el gradiente (latitud).
Obtener la ubicación de las especies. En este caso, el ‘midpoint’ de cada especie en el gradiente latitudinal
bats.midpoints <-lets.midpoint(bats.pam, planar = F)
Listo! tenemos los datos, ahora poner a prueba la relación latitud~range size
bats.lm <- lm(bats.ranges[,1]~abs(bats.midpoints[,3]))
summary(bats.lm)
Pero, ¿y la cuestión evolutiva? ¿La relación (o falta de) se mantiene? vamos a ponerlo a prueba!
#cargar los paquetes para el análisis filogenético
library(ape)
library(caper)
#cargar la filogenia de los carnívoros estudiados
bats.tree <- read.tree("ejercicios_datos/bats_tree")
bats.tree$tip.label <- gsub("_"," ",bats.tree$tip.label)
#prepare the data
bats.data <- cbind(bats.midpoints[,c(1,3)],bats.ranges)
colnames(bats.data) <- c("Species","MidLat","Range_size")
#crear un objeto "comparative data" necesario para el análisis, de acuerdo con lo que exige el paquete `caper`
bats.compdata <- comparative.data(bats.tree,bats.data,Species,vcv=T)
#ajustar el modelo de regresión considerando la filogenia (PGLS: phylogenetic generalized least squares)
bats.pgls <- pgls(Range_size~abs(MidLat),bats.compdata,lambda='ML')
summary(bats.pgls)
¿Qué tal? ¿Qué resultados obtuvieron?
El enfoque de ensamblajes se basa en el análisis de los sitios (celdas) como unidades, necesitando la caracterización de las propriedades de los conjuntos de especies que están presentes en esos sitios. Tenemos que calcular una métrica por ensamblaje/celda, como el promedio del valor del atributo para el conjunto de especies, además de la ubicación de la celda (latitud).
#Obtener los valores promedio por ensamblaje en cada celda
#para eso, tenemos el paquete letsR! (shameless selfpromotion, again ;) )
bats.medianRS <- lets.maplizer(bats.pam,bats.ranges[,1],rownames(bats.ranges), fun = median, ras=T)
#la ubicación de cada celda/sitio ya la tenemos en la PAM (las primeras dos columnas).
#Entonces, podemos tomar únicamente la latitud y probar la relación de la mediana del atributo (range size) y la latitud
bats.lmSites <- lm(bats.medianRS$Matrix[,3]~abs(bats.medianRS$Matrix[,2]))
summary(bats.lmSites)
¿Qué tal? ¿Qué nos dice ese resultado?
Ahora, incluimos la cuestión evolutiva basada en el enfoque PVR (Phylogenetic eigenVector Regression; Diniz-Filho et al. 1998) para estimar los componentes filogenético (P) y específico (S)
#Obtener los componentes P y S, ¿pero cómo? tenemos letsR! Mentira, la función aún no fue incluida en letsR, pero va a estar próximamente. Por ahora, podemos cargar la función versión beta
#cargar los paquetes necesarios para el resto de análisis
library(picante)
library(vegan)
#cargar la función (el archivo .R que debe estar en su carpeta/espacio de trabajo WD)
source("ejercicios_datos/p_s_components.R")
#correr la función
bats.pscomps <- p.s.comps(phy = bats.tree,sppnames = bats.midpoints[,1],data = bats.ranges,colnum = 1)
#espacializar los componentes
#componente P
bats.meanP <- lets.maplizer(bats.pam,bats.pscomps[[2]][,1],bats.midpoints[,1], fun = mean, ras=T)
#componente S
bats.meanS <- lets.maplizer(bats.pam,bats.pscomps[[2]][,2],bats.midpoints[,1], fun = mean, ras=T)
#modelos lineales
#componente filogenético
bats.lm.meanP <- lm(bats.meanP$Matrix[,3]~abs(bats.pam$P[,2]))
summary(bats.lm.meanP)
#componente específico
bats.lm.meanS <- lm(bats.meanS$Matrix[,3]~abs(bats.pam$P[,2]))
summary(bats.lm.meanS)
Grafiquemos los componentes!
par(mfrow=c(1,3))
#atributo original
plot(bats.medianRS$Raster, main="observed range size")
#componente filogenético
plot(bats.meanP$Raster, main="phylogenetic component")
#componente específico
plot(bats.meanS$Raster, main= "specific component")
¿Y ahora? ¿Qué podemos concluir con esto? ¿Los patrones se mantienen? ¿Por qué sí/no?