Regra de Rapoport

Obter o traço de interesse: tamanho da área de distribuição/range size (usando os dados dos morcegos do exercicio de distribuições geográficas)

Carregar o letsR (Ver exemplo de como crear uma matriz de presencia-ausência)

library(letsR)

#carregar os dados dos morcegos (já tem a PAM lá dentro)
load("bats_PAM.Rdata")
bats.pam <- m.PAM

Calcular o range size das especies

bats.ranges  <- lets.rangesize(bats.pam, units = "cell")
#trocas "_" por " " nos nomes das especies
bats.ranges.spp <- rownames(bats.ranges)
bats.ranges.spp <- gsub("_"," ",bats.ranges.spp)
rownames(bats.ranges) <- bats.ranges.spp

agora temos um vetor com os tamanhos de range (numero de celdas) das espécies

Qual abordagem usar? interspecies vs assemblage?

Interspecies approach

A abordagem inter-específica se basea no análise das espécies como unidades, precisando então da caraterização das propriedades das espécies. Além do traço (range size), precisamos da ‘posição’ das espécies no gradiente (latitude).

Obter a posição das especies. Nesse caso, o ‘midpoint’ de cada uma delas no gradiente latitudinal

bats.midpoints  <-lets.midpoint(bats.pam, planar = F)
#os nomes tem que ter "_"
bats.midpoints[,1] <- bats.ranges.spp

Pronto! temos os dados, agora testar a relação latitude~range size

bats.lm <- lm(bats.ranges[,1]~abs(bats.midpoints[,3]))

summary(bats.lm)

Mas, e a questão evolutiva? A relação (ou falta de) se mantem? vamos testar!

#carregar pacotes para análise filogenética
library(ape)
library(caper)
#carregar a filogenia dos morcegos estudados
bats.tree <- read.tree("bats_tree")
#vamos ver a árvore
plot(bats.tree)
#trocar os "_" por " " nos nomes dos tips/espécies, pra bater com os outros dados
bats.tree.spp <- bats.tree$tip.label
bats.tree.spp <- gsub("_"," ",bats.tree.spp)
bats.tree$tip.label <- bats.tree.spp

#preparar os dados (junta-los em um objeto só)
bats.data  <- cbind(bats.midpoints[,c(1,3)],bats.ranges)
colnames(bats.data) <- c("Species","MidLat","Range_size")
#criar o objeto "comparative data" necessario pro analise, de acordo com o pacote "caper"
bats.compdata <- comparative.data(bats.tree,bats.data,Species,vcv=T)

#ajustar o modelo de regressão considerando a filogenia (PGLS: phylogenetic generalized least squares)
bats.pgls <- pgls(Range_size~abs(MidLat),bats.compdata,lambda='ML')

summary(bats.pgls)

E aí?

Assemblage approach

A abordagem de assembléia se basea no análise dos locais (celdas) como unidades, precisando então da caraterização das propriedades dos conjuntos de espécies que estão presentes nesses locais. A gente precisa calcular uma métrica por assembléia, tipo a media do valor do traço pro conjunto de espécies, além da posição dessa assembléia (latitude).

#Obter os valores médios por assembléia em cada celda
#pra isso, temos o pacote letsR!
bats.medianRS <- lets.maplizer(bats.pam,bats.ranges,bats.midpoints[,1], fun = median, ras=T)

#a posição de cada celda/local já está na PAM (as primeiras duas colunas).
#daí, podemos pegar só a latitude e testar a relação mediana do tamanho do range ~ latitude
bats.lmSites  <- lm(bats.medianRS$Matrix[,3]~abs(bats.medianRS$Matrix[,2]))

summary(bats.lmSites)

E daí?

Agora, incluirmos a questão evolutiva baseada na abordagem PVR para estimar os componentes filogenético (P) e específico (S)

#Obter os componentes P e S, mas como? temos o letsR! mentira, a função ainda não foi incluida no letsR, mas vai ser proximamente. Mas, temos função pra isso
#carregar pacotes necessarios
library(picante)
library(vegan)
#carregar a função (o arquivo .R deve estar no seu WD)
source("p_s_components.R")

#rodar a função
bats.pscomps <- p.s.comps(phy = bats.tree,sppnames = bats.midpoints[,1],data = bats.ranges,colnum = 1)

“Espacializar” esses 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)

Ajustar os modelos linares para cada componente

#modelos lineais
bats.lm.meanP <- lm(bats.meanP$Matrix[,3]~abs(bats.pam$P[,2]))
bats.lm.meanS <- lm(bats.meanS$Matrix[,3]~abs(bats.pam$P[,2]))

E aí? Qual é a conclusão? Os padrões mudaram? Por que?