====== Distúrbio e Sucessão ======
{{:mod1:mat_apoio:noiteestrelada.jpg?200 |}}
Vamos investigar nesse exercício modelos de sucessão e incorporar neles distúrbio. No exercício de coexistência simulamos distúrbio através da taxa de extinção. Vamos partir desse modelo e avaliar o que acontece com a coexistência conforme aumento da intensidade do distúrbio.
Vamos relembrar o modelo de coexistência e o exercício que fizemos. Tínhamos duas espécie, sendo a primeira melhor competidora pois podia colonizar manchas já ocupadas pela outra, enquanto a segunda só colonizava manchas vazias. A variação na ocupação de manchas era dada por:
$$ (df_1)/dt = i_1f_1(1-f_1)-p_e f_1 $$
$$ (df_2)/dt = i_2f_2(1-f_1-f_2)-i_1f_1f_2-p_e f_2 $$
onde:
* f = fração de machas ocupadas
* pe = probabilidade de extinção por mancha
* i = taxa de incremento da probabilidade de colonização com o aumento de f
* A taxa de colonização, portanto, é o produto i.f, e varia com a fração de manchas ocupadas (quanto mais ocupação, mais propágulos).
Para que a espécie dois persistisse no sistema era necessário que:
$$ e/i_(1) > i_(1)/i_(2) $$
===== Simulação =====
Abaixo o código da função utilizada na aula de coexistência, copie e cole no R para podermos utilizá-la.
meta.comp<-function(tf,l,c,fi1,fi2,i1,i2,pe,plot.eq=FALSE,D=0){
F1 <- 1-(pe/i1)
F2 <- pe/i1-i1/i2
if(F1<=0) F2 <- 1-(pe/i2)
Nt <- l*c
N <- floor(Nt*(1-D))
resultado=matrix(nrow=tf,ncol=3)
n1 <- floor(fi1*N)
n2 <- floor(fi2*N)
antes <- sample(rep(c(2,1,0),c(n2,n1,N-(n1+n2))))
resultado[,1] <- 1:tf
resultado[1,2:3] <- c(sum(antes==1),sum(antes==2))/N
for(t in 2:tf){
depois <- rep(0,N)
pi1=i1*sum(antes==1)/Nt
pi2=i2*sum(antes==2)/Nt
depois[antes==1]<-sample(c(0,1),sum(antes==1),replace=T,prob=c(pe,1-pe))
depois[antes==2]<-sample(c(0,2),sum(antes==2),replace=T,prob=c(pe,1-pe))
depois[antes==0] <- sample(c(0,2),sum(antes==0),replace=T,prob=c(1-pi2,pi2))
d1<-sample(c(0,1),sum(antes!=1),replace=T,prob=c(1-pi1,pi1))
depois[antes!=1][d1==1] <- 1
resultado[t,2:3]=c(sum(depois==1),sum(depois==2))/Nt
antes <- depois
}
plot(1:tf,resultado[,2],type="l",xlab="Tempo",ylab="Fração de manchas ocupadas",
ylim=c(0,1),main=paste("Competição com Colonização Interna","\n c=",c," l=",l," fi1=",fi1," fi2=",
fi2,"\n i1=",i1," i2=",i2," pe=",pe," D=",D),font.lab=2,lwd=2, col="red")
lines(1:tf,resultado[,3],col="blue", lwd=2)
if(plot.eq==T){
abline(h=F1,col="red",lwd=1.5,lty=2)
abline(h=F2,col="blue",lwd=1.5,lty=2)
}
if(D>0)abline(h=1-D,lty=2)
legend("topright", c("Melhor competidora", "Pior competidora"),col=c("red","blue"),lty=1)
invisible(resultado)
}
==== Relembrando Argumentos ====
Os argumentos da função são:
* o número de linhas e colunas da matriz (''l'', ''c''),
* o número de intervalos de tempo para reiterar a simulação (''tf''),
* a fração inicial de manchas ocupadas por cada espécie (''fi1'', ''fi2'') e
* os parâmetros do modelo (''i1'', ''i2'', ''pe'' ) ((Há um último argumento, ''D'', que foi usado no exercício de [[:mod1:mat_apoio:rem_habitat|Destruição de Habitat]]. Não vamos especificar nenhum valor para ele nessa aula.)).
==== Simulando Distúrbio ====
Vamos simular um aumento crescente da probabilidade de extinção:
par(mfrow=c(2,3)) ## dividindo a tela gráfica em seis partes
meta.comp(tf=100,c=100,l=100,fi1=0.1,fi2=0.1,i1=0.4,i2=0.8,pe=0.10, plot.eq=FALSE)
meta.comp(tf=100,c=100,l=100,fi1=0.1,fi2=0.1,i1=0.4,i2=0.8,pe=0.20, plot.eq=FALSE)
meta.comp(tf=100,c=100,l=100,fi1=0.1,fi2=0.1,i1=0.4,i2=0.8,pe=0.25, plot.eq=FALSE)
meta.comp(tf=100,c=100,l=100,fi1=0.1,fi2=0.1,i1=0.4,i2=0.8,pe=0.30, plot.eq=FALSE)
meta.comp(tf=100,c=100,l=100,fi1=0.1,fi2=0.1,i1=0.4,i2=0.8,pe=0.40, plot.eq=FALSE)
meta.comp(tf=100,c=100,l=100,fi1=0.1,fi2=0.1,i1=0.4,i2=0.8,pe=0.50, plot.eq=FALSE)
- O que está acontecendo com o sistema conforme aumentamos a intensidade do distúrbio (pe)?
- Em que cenário o sistema é mais diverso?
- Interprete o comportamento da espécie pior competidora (azul) no início das quatro primeiras simulações. O que está acontecendo?
===== Modelo Multiespécies =====
{{:mod1:mat_apoio:rman10556l.jpg.png?200 | }}
Para criar um modelo onde exista demanda conflitante (tradeoff) entre colonização e competição em um sistema multiespécies, precisamos primeiro criar uma cenário onde há um variação na habilidade de colonização/competição das espécies.
Para tanto vamos criar um sistema onde a habilidade competitiva é inversamente relacionada a habilidade de colonização, uma clássica demanda conflitante.
No equilíbrio ou em intensidades baixas de distúrbios, nossa comunidade virtual teria a espécie melhor competidora com maior proporção de manchas ocupadas, assim como no modelo de coexistência de duas espécies. Vamos estabelecer que essa proporção seja 20% de manchas ocupadas e em seguida estabelecer uma sequência ordenada hierárquica onde a próxima melhor competidora ocupará 20% das manchas restantes e a seguinte 20% do que restou depois, até nossa última espécie (pior competidora) ocupar uma fração de 20% daquelas últimas manchas não ocupadas por nenhuma das outras espécies.
Nesse caso, teríamos o seguinte cenário na distribuição de abundâncias das nossas espécies:
$$p_(i)=d(1-d)^(i-1) $$
onde:
$$p_(i)$$ = proporção de manchas ocupadas pela espécie cuja ordem na classificação de abundância é //i//
//d//= proporção de manchas ocupadas pela espécie mais abundante
Vamos fazer um gráfico desse cenário de abundâncias para 10 espécies sendo a proporção de manchas ocupadas pela melhor competidora 20%:
x11() # abre uma nova janela gráfica
s=10 # número de espécies no sistema no início da simulaçao
i=1:s # posição da espécie no classificação de competição
i
d=0.2 # potencial de manchas ocupadas pela melhor competidora
p=d*(1-d)^(i-1) # proporção de manchas ocupadas por cada espécie no equilíbrio
p
plot(i, p, type="b", ylab="Proporção de manchas ocupadas", xlab="Ordem das espécies")
O Pesquisador David Tilman demonstrou que esse cenário de distribuição de abundâncias é possível quando todas as espécies experienciam a mesma taxa de extinção/mortalidade e quando a taxa de colonização de cada espécie é dada por:
$$ c_(i)= e/(1-d)^(2i-1)$$
Vamos adicionar os valores de taxas de colonização no nosso gráfico anterior, calculados para uma taxa de extinção igual a 0.04 para todas as espécies:
pe=0.04
c= pe/(1-d)^(2*i-1)
c
par(mfrow=c(1,2))
plot(i, p, type="b", ylab="Abundância Proporcional", xlab="Ordem de classificação da espécie")
plot(i, c, type="b", col="red", ylab="Taxa de Colonização", xlab="Ordem de classificação da espécie" )
Essa é nossa situação de equilíbrio na comunidade, uma distribuição geométrica de abundâncias com a mais abundante chegando a 20% e com um taxa de extinção de 4% para todas as espécies.
Além disso, o mesmo pesquisador generalizou a equação de variação da proporção de manchas ocupadas ao longo do tempo para //n// espécies, como sendo:
$$ (dp_(i))/dt = c_(i)p_(i)(1-sum_(j=1)^i(p_i)) - m_ip_i - sum_(j=1)^(i-1)(c_jp_jp_i)$$
Vamos montar essa comunidade simulando sua dinâmica ao longo do tempo. A nossa função tem os seguintes passos:
- cria a ordenação das espécies
- calcula a coeficiente de colonização como acima
- se o //fi// (proporção de manchas ocupadas no início) é um valor único, preenche essa proporção de manchas com (s) espécies ao acaso
- se //fi// é um vetor de //s// valores, esses são utilizados para o preenchimento inicial das manchas sendo as proporções no vetor //fi// relacionadas à ordem das espécies, começando com a espécie melhor competidora para a pior
- inicia ciclos até //tf//
- a cada ciclo calcula a extinção para cada espécie e sua colonização respeitando a hierarquia de competição para decidir qual espécie é deslocada da mancha e qual permanece
- guarda a proporção de manchas ocupadas por cada espécie a cada ciclo
- produz o gráfico e retorna o resultado de número de manchas ocupadas por cada espécie a cada tempo
Copie e cole o código abaixo no R para rodar a função //com.compete//
com.compete = function(tf,l,c, s, fi, d, pe,fr=0,int=0)
{
rank=1:s
vetor.dist=rep("n", tf)
if(fr>0 & int>0)
{
n.dist=floor(tf/fr)
max.dist=n.dist*fr
vetor.dist[seq(0,max.dist, by=fr)[-1]]="d"
}
vetor.dist=vetor.dist[-1]
ci= pe/(1-d)^(2*rank-1)
N <- l*c
resulta=matrix(nrow=s,ncol=tf)
attributes(resulta)=c(attributes(resulta),list(tempo=tf, riqueza=s, n.manchas=N, inicial= fi, comp=d, coloniza=ci, freq.dist=fr, int=int))
n.ocup= sum(fi)*N
t=1
if(length(fi)==s)
{
resulta[,1]=fi
antes=sample(c(rep(0,N-n.ocup),rep(rank,each=fi*N)))
}
if(length(fi)==1)
{
antes <- sample(c(1:s, sample(1:s, (n.ocup-s),replace=TRUE), rep(0, N-n.ocup)))
t.antes=table(antes)
n.sp=rep(0,s)
names.antes=match(as.numeric(names(t.antes)), rank)
rank.antes=match(rank,as.numeric(names(t.antes)))
n.sp[na.omit(names.antes)]=t.antes[na.omit(rank.antes)]
resulta[,1]<-n.sp/N
}
for (f in vetor.dist)
{
t=t+1
depois <- rep(0,N)
ncum=cumsum(resulta[,1])-resulta[1,1]
pi=ci*resulta[,t-1]
pi[pi>1]=0.999
for(r in s:1)
{
depois[antes==r]<-sample(c(0,r),sum(antes==r),replace=T,prob=c(pe,1-pe))
d1<-sample(c(0,r),sum(antes>r | antes==0),replace=T,prob=c(1-pi[r],pi[r]))
depois[antes>r | antes==0][d1==r] <- r
}
n.sp=rep(0,s)
if(f=="d")
{
depois[sample(1:N,N*int)]=0
}
t.depois=table(depois)
names.match=match(as.numeric(names(t.depois)), rank)
rank.match=match(rank,as.numeric(names(t.depois)))
n.sp[na.omit(names.match)]=t.depois[na.omit(rank.match)]
resulta[,t]<-n.sp/N
antes<-depois
}
matplot(1:tf,t(resulta),type="l",lty=1:s, col=rainbow(s),ylim=c(0,max(resulta)+0.2), xlab="Tempo", ylab="Fração de manchas ocupadas",main=paste("Competição x Colonização \n d=",d," pe=",pe, "fr= ",fr, "int= ", int))
legend("topright", legend=paste("sp", 1:s, sep="_"), lty=1:s, col=rainbow(s), bty="n", cex=0.5)
invisible(resulta)
}
Nossa função tem os seguintes argumentos:
- tf= tempo final da simulação,
- l= número de linhas no espaço de manchas,
- c= número de colunas no espaço de manchas,
- s= número de espécies no tempo inicial,
- fi= proporção de manchas ocupadas no tempo inicial,
- d= proporção de manchas ocupadas pela espécie melhor competidora no equilibrio,
- pe= taxa de extinção das manchas,
- fr= frequencia de distúrbio (usada somento mais a frente no exercício),
- int= intensidade do distúrbio (idem)
==== Testando o Modelo ====
Vamos testar o nosso modelo com 10 espécies (s=10), 10000 manchas (l = 100, c= 100 ), com a espécie competidora tendo o potencial de ocupar 20% das manchas, probabilidade de extinção pe=0.04. Vamos rodar primeiro com 200 ciclos de tempo e depois com 1000. Em ambas as simulações vamos começar com uma proporção de manchas ocupadas no início baixa (//fi//=0.2), simulando uma situação onde o sistema está fora do equilíbrio.
par(mfrow=c(1,1))
teste1=com.compete(tf=200,l=100,c=100, s=10, fi=0.2, d=0.2, pe=0.04)
x11()
teste2=com.compete(tf=1000,l=100,c=100, s=10, fi=0.2, d=0.2, pe=0.04)
* Interprete o resultado do modelo em termos de:
- demanda conflitante de colonização x competição,
- substituição de espécies e
- sucessão ecológica.
==== Incluindo distúrbios ====
{{:mod1:mat_apoio:disturbio.jpg?200 |}}
Vamos simular agora um sistema com distúrbios. Nos modelos de metapopulação vimos que a probabilidade de extinção ($$p_e$$) podia ser interpretada como distúrbio, já que atingia uma parte das manchas tornando-as vagas para posterior colonização. Aqui, vamos interpretar o $$p_e$$ como a mortalidade basal das populações, não mais como distúrbio. Essa probabilidade de morte é constante e igual para todas as espécies no nosso modelo, somente para simplificar a simulação. Vamos criar distúrbios na nossa comunidade que acontecem com uma certa frequência de intervalos regulares (//fr//) e uma certa intensidade (//int//) relacionada à proporção de manchas afetadas.
==== Aplicando distúrbios ====
Antes de incluir o distúrbio no sistema, vamos fazer um gráfico do sistema de referência sem distúrbio. No exemplo 2 o resultado foi guardado no objeto //teste2//. Vamos usá-lo para não ter que rodar novamente a função (( como devem ter percebido a simulação é um pouco demorada pois demanda muita capacidade de processamento do computador )):
par(mfrow=c(2,2))
matplot(1:attributes(teste2)$tempo,t(teste2),type="l",ylim=c(0,max(teste2)+0.1),lty=1:dim(teste2)[1], col=rainbow(dim(teste2)[1], start=.7, end=.4), xlab="Tempo", ylab="Fração de manchas ocupadas",main=paste("Competição x Colonização" ))
legend("topright", legend=paste("sp", 1:10, sep="_"), lty=1:10, col=rainbow(10, start=.7, end=.4), bty="n", cex=0.5)
## testando distúrbios com frequência baixa (intervalo grande entre eventos fr=100) e intensidade baixa (0.2)
teste3=com.compete(tf=1000,l=100,c=100, s=10, fi=0.2, d=0.2, pe=0.04, fr=100, int=0.2)
## distúrbio com frequência baixa (intervalo grande fr=100) e intensidade média (0.5)
teste4=com.compete(tf=1000,l=100,c=100, s=10, fi=0.2, d=0.2, pe=0.04, fr=100, int=0.5)
## distúrbio com frequência alta (intervalo pequeno entre eventos, 10) e intensidade média (0.2)
teste5=com.compete(tf=1000,l=100,c=100, s=10, fi=0.2, d=0.2, pe=0.04, fr=10, int=0.2)
* Responda as seguintes questões:
- Em que situações as melhores competidoras se dão melhor?
- E as piores competidoras?
- Consegue detectar algum padrão na coexistência de espécies com essas poucas simulações?
==== Distúrbio Intemediário ====
É creditado ao pesquisador Joseph Connell (1978) a teoria do distúrbio intermediário, apesar dela ter sido proposta por J. Phillip Grime alguns anos antes em 1973, tratando de exclusão competitiva em plantas. O trabalho de Connel (veja referência) pode ter tido preferência na citação da teoria por ter contrastando dois ambientes muito distintos e reconhecidamente entre os mais diversos do planeta (recifes de corais e florestas tropicais). Nele o pesquisador advoga que o principal fator relacionado à manutenção da alta diversidade nesse ecossistemas é a presença de distúrbios em frequências e intensidade intermediárias.
Faça simulações para testar essa teoria.
Salve cada simulação em um objeto de nome diferente. Nos exemplos acima fizemos isso denominando cada simulação por um nome (teste1, teste2...) à direta do sinal de igualdade ou com o símbolo (<-), veja abaixo:
teste5 <- com.compete(tf=1000,l=100,c=100, s=10, fi=0.2, d=0.2, pe=0.04, fr=10, int=0.2)
Desta forma o resultado da simulação é salvo em objetos diferentes e podemos depois usar esses resultados. Por exemplo, podemos estar interessados em ver quais as espécies mais abundantes no final da simulação, por exemplo nos 10 últimos ciclos:
tf5=dim(teste5)[2]
teste5[,(tf5-10):tf5]
Podemos contar o número de espécies ao longo do tempo, da seguinte forma:
apply(teste2>0, 2, sum)
Caso queira fazer alguma outra operação com os dados resultantes das simulações, contate um monitor ou professor.
===== Referências =====
* {{:mod1:mat_apoio:diversity_in_rainforests_and_coral_reefs.pdf|Connell, J. H. 1978}} Diversity in tropical rain forests and coral reefs. Science 199(4335):1302 - 1310
* {{:mod1:mat_apoio:hastings_80_theorpopbiol.pdf|Hastings, A. (1980)}} Disturbance, coexistence, history and competition for space. Theoretical Population Biology, 18:363–373.
* Stevens, M.H.H. (2009) A primer in ecology with R. New York, Springer. {{:mod1:mat_apoio:stevens_cap9.pdf|capítulo 9}}