====== 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}}