Baixe o app para aproveitar ainda mais
Prévia do material em texto
Ecologia de populações - R Primeiro relatório de aulas práticas Fabio Mitsuo Kimura Roteiro 3 - Aula introdutória parte 2 # Criando um objeto chamado curupiras e adicionando valores curupiras <- c(50, 63, 71, 106, 79, 33, 42, 18, 21, 2) # Do ano 2001 a 2010 ano <- 2001:2010 # Contar o que tem em cada um length(curupiras) length(ano) # Abundância de curupiras ao longo do tempo plot (curupiras, ano, type=“b”) A população de curupiras nesse período de 9 anos variou bastante, atingindo o pico em 2004 mas depois de 2005 passou a decrescer. # Criando um vetor „chuvas‟ com as condições climáticas chuvas <- c(rep("chuvosos", 4), rep("secos", 6)) # Transformando „chuvas‟ em fator chuvasf <- as.factor(chuvas) # Conferindo tipos de classe dos objetos class(ano) class(curupiras) class(chuvas) class(chuvasf) # Juntando os objetos em um único objeto tabela <- cbind(ano, curupiras, chuvas, chuvasf) # Verificando a classe da „tabela‟ class(tabela) # Tente identificar problemas Os números encontram-se entre parêntese, sendo convertidos em chr, além disso, chuvasf foi con- vertido em número, porém, entendido pelo R como chr. # Juntando objetos com a função „data.frame‟ tabela2 <- data.frame(ano, curupiras, chuvas, chuvasf) # Usando str para ambos os objetos str(tabela) str(tabela2) # Identifique as diferenças Na tabela todos os itens do objeto foram convertidos em chr, enquanto que na tabela2 os itens dos objetos mantém o seu formato original. # Removendo os objetos criados, excetuando as tabelas rm(ano,curupiras,chuvas,chuvasf) ano <- 2001:2010 # Contar o que tem em cada um length(curupiras) length(ano) # Elaborando o gráfico lado a lado par(mfrow=c(1, 2)) plot (curupiras ~ chuvas, data=tabela2, type="b", col="white", lwd=1, xlab="Chuvas", ylab="Abundância de curupiras") De acordo com os gráficos, a população de curupiras cresce melhor em estações chuvosas, pois como os primeiros 4 anos são chuvosos e o restante são secos, isso coincide com o ano de observa- ção, em que inicialmente a população aumentou (período chuvoso) e posteriormente, diminuiu (período seco), quase levanto a população à extinção. # Calculando a média dos valores de abundância em separado para meses chuvosos e secos mean(tabela2$curupiras[1:4]) # abundância de curupiras nos meses chuvosos mean(tabela2$curupiras[5:10]) # abundância de curupiras nos meses secos # Utilizando a função for for(i in 1:length(curupiras)){ print(paste("No ano de", ano[i], "foram observados", curupiras[i], "curupiras. E o valor de i agora é", i) ) } O for é utilizado para fazer o trabalho repetitivo, nesse caso, o i representaria o primeiro número guardado dentro do objeto, no caso do objeto „ano‟ e „curupiras‟. O “i in 1” indicaria que a conta- gem estaria sendo feito de 1 em 1. Roteiro 4 - PA e PG # “Lendo” o arquivo gerado no excel objeto <- read.table("aritmeticaegeometricacsv.csv", header=TRUE,sep=";",dec=",") # Criando os gráficos plot(aritmetica ~ tempo, data=objeto, type="l") plot(geometrico ~ tempo, data=objeto, type="l") Apesar de ambos apresentarem o mesmo tempo e o mesmo número no início, o crescimento geo- métrico é muito maior em relação ao aritmético. # Criando um objeto „aritmética‟ e uma função que crie 20 valores somando de 10 em 10 aritmetica <- c(100, rep(NA, 19)) for(i in 2:length(aritmetica)) { aritmetica[i] <- aritmetica[i-1] + 10} # Criando um objeto „geométrica‟ e uma função que crie 20 valores somando 10% geometrica <- c(100, rep(NA, 19)) for(i in 2:length(geometrica)) { geometrica[i] <- (geometrica[i-1] * 0.1) + geometrica[i-1]} # Juntando ambos os objetos em uma matriz e criando um gráfico aaaaa <- cbind(aritmetica, geometrica) plot(aaaaa, type=“l”) O gráfico mostra a razão entre o objeto „aritmética‟ e „geométrica‟, onde é possí- vel verificar com maior clareza a dife- rença de um crescimento em PA e em PG. Roteiro 5 - Crescimento exponencial contínuo # Criando os comandos para gerar um gráfico com diferentes curvas de crescimento N0 <- 10 tempo <- 0:50 rr <- c(-0.03, -0.02, 0, 0.02, 0.03) Nr1 <- N0 * exp(rr[1] * tempo) Nr2 <- N0 * exp(rr[2] * tempo) Nr3 <- N0 * exp(rr[3] * tempo) Nr4 <- N0 * exp(rr[4] * tempo) Nr5 <- N0 * exp(rr[5] * tempo) NNs <- cbind(Nr1, Nr2, Nr3, Nr4, Nr5) # Gerando o gráfico matplot(tempo, NNs, type="l", lwd=2, ylab="Número de indivíduos") legend("topleft", title="Valores de r", legend=rr, lty=1:5, col=1:5, lwd=2) Quando o valor de r = 0, a população se mantém cons- tante. Quando r < 0, a po- pulação diminui e r > 0 a po- pulação aumenta. # Gerando o gráfico em escala logarítmica matplot(tempo, NNs, type="l", lwd=2, ylab="Número de indivíduos", log="y") legend("topleft", title="Valores de r", legend=rr, lty=1:5, col=1:5, lwd=2, cex=0.6) Transformando o gráfico em escala logarítmica, as curvas se tornam uma reta. # Criando objetos para o estudo hipotético N02 <- c(10, 20, 30) t2 <- 0:5 r2 <- 0.25 N1 <- N02[1] * exp(r2 * t2) N2 <- N02[2] * exp(r2 * t2) N3 <- N02[3] * exp(r2 * t2) NNs2 <- cbind(N1, N2, N3) # Elaborando o gráfico matplot(t2, NNs2, type="l", lwd=2, xlab="tempo", ylab="Tamanho populacional") legend("topleft", title="Valores de N0", legend=N02, lty=1:3, col=1:3, lwd=2, cex=0.6) Em todos a curva está crescendo, mas o valor é maior para aqueles cuja população apresentava tamanho maior. # Gerando o mesmo gráfico em escala logarítmica matplot(t2, NNs2, type="l", lwd=2, xlab="tempo", ylab="Tamanho populacional", log="y") legend("topleft", title="Valores de N0", legend=N02, lty=1:3, col=1:3, lwd=2, cex=0.6) A mudança de gráfico apenas altera a forma da linha, que passa a ser uma reta # Após os cinco anos, a população que iniciou com 30 indivíduos atingiu de fato 60 indivíduos. # Decida se houve algum problema no andamento da reintrodução dessa subpopulação. Sim, apresentou problema pois deveria ter alcançado pelo menos 100 indivíduos na população. # Montando os objetos para wolffia e besouro # Estimando as taxas de crescimento r.wolffia <- log(2) / 30 r.besouro <- log(2) / 6.9 # Convertendo a taxa para indivíduo/dia para wolffia r.wolffia <- (log(2) / 30) * 24 # Criando objetos para montar o gráfico N0 <- 10 tempo <- 0:100 N.wolffia <- N0 * exp(r.wolffia * tempo) N.besouro <- N0 * exp(r.besouro * tempo) NNs <- cbind(N.wolffia, N.besouro) # Elaborando o gráfico matplot(tempo, NNs, type="l", lwd=2, log="y", xlab="Tempo(dias)", ylab="Tamanho populacio- nal") legend("topleft", title="Espécies", legend =c("Wolffia", "besouro"), lty=1:2, col=1:2, lwd=2, cex=0.6) Gráfico relacionando o tamanho populacional de wolffia e besouro no decorrer dos dias, observa- se que wolffia cresce a uma taxa muito mais rápida em relação ao besouro. Roteiro 6 - Crescimento exponencial discreto # Criando objetos para o exercício do jardim ano <- 2016:2020 daninha <- c(1, 3, 9, 27, 81) Rs <- daninha[2:5] / daninha[1:4] # lambda Rs 3 3 3 3 # Valor de lambda # Gráfico plot (ano, daninha, type="b", lty=2) Como é crescimento discreto e não se sabe ao certo a quantidade exata de indivíduos, optou-se por utilizar linha pontilhada. Percebe-se também que a população está aumentando. # Aumentando o tempo N0 <- 1 lambda <- 3 tempo <- 0:9 daninha2025 <- lambda^tempo* N0 ano2025 <- 2016:2025 plot(daninha2025 ~ ano2025, type="b", lty=2, ylab ="Erva daninha", xlab="Tempo") A população de daninha está crescendo bastante, sendo necessário cuidar do jardim para evitar uma superpopulação dessa planta. # Criando objetos e função para o gráfico lambda <- c(1.05, 0.99, 0.75) N_0 = 20 Nts1 <- c(N_0, rep(NA,9)) for(i in 2:length(Nts1)) { Nts1[i] <- lambda[1] * Nts1[i-1] } Nts2 <- c(N_0, rep(NA,9)) for(i in 2:length(Nts2)) { Nts2[i] <- lambda[2] * Nts2[i-1] } Nts3 <- c(N_0, rep(NA,9)) for(i in 2:length(Nts3)) { Nts3[i] <- lambda[3] * Nts3[i-1] } # Juntando em um objeto e elaborando o gráfico Nts <- cbind(Nts1, Nts2, Nts3) matplot(tempo, Nts, type="b", lty=2, pch=1, ylab="Tamanho populacional") legend("bottomleft", title="Valores de lambda", legend=lambda, lty=2, pch=1, col=1:3, cex=0.6) O gráfico mostra que quanto maior o valor de lambda, mais a população cresce (no caso de L > 1). No entanto, se o lambda for menor que 1, a população decresce. # Aumentando o tempo para 20 anos Nts1 <- c(N_0, rep(NA,19)) Nts2 <- c(N_0, rep(NA,19)) Nts3 <- c(N_0, rep(NA,19)) tempo <- 0:19 for(i in 2:length(Nts1)) { Nts1[i] <- lambda[1] * Nts1[i-1] } for(i in 2:length(Nts2)) { Nts2[i] <- lambda[2] * Nts2[i-1] } for(i in 2:length(Nts3)) { Nts3[i] <- lambda[3] * Nts3[i-1] } Nts <- cbind(Nts1, Nts2, Nts3) matplot(tempo, Nts, type="b", lty=2, pch=1, ylab="Tamanho populacional") legend("topleft", title="Valores de lambda", legend=lambda, lty=2, pch=1, col=1:3, cex=0.6) Com um tempo maior fica mais claro a direção da população para cada lambda, principalmente o de L = 0.99. Roteiro 7 - Variação ambiental # Criando os objetos N0 <- 20 nrs <- 240 r.medio <- 0.01 r.variacao <- 0.05 set.seed(20) rr <- rnorm(nrs, mean=r.medio, sd=r.variacao) N <- numeric(length(rr)) N[1] <- N0 tempo <- 0:length(rr)/24 ntempo <- length(rr)/24 for(t in 2:(length(rr)+1)) { N[t] <- N[t-1] + (rr[t] * N[t-1]) plot(tempo[1:t], N[1:t], xlab="Tempo (dias)", ylab=“Tamanho populacional”, type="l", xlim=c (0, ntempo)) Sys.sleep(0.05) } legend("topleft", legend=paste('r= ', r.medio, 'var.r=', r.variacao), cex=0.8, bty="n") A população está crescendo, é possível analisar algumas flutuações maiores a partir do dia 7. # Alterando o valor do r.medio para -0.01 r.medio <- -0.01 rr <- rnorm(nrs, mean=r.medio, sd=r.variacao) for(t in 2:(length(rr)+1)) { N[t] <- N[t-1] + (rr[t] * N[t-1]) plot(tempo[1:t], N[1:t], xlab="Tempo (dias)", ylab="Tamanho Populacional", type="l", xlim=c(0, ntempo)) Sys.sleep(0.05) } legend("bottomleft", legend=paste('r= ', r.medio, 'var.r=', r.variacao), cex=0.8, bty="n") Com um r negativo, o tamanho populacional continua variando, porém, tendendo a diminuir. # Alterando a variação para 0.5 e retornando o r para 0.01 r.medio <- 0.01 r.variacao <- 0.5 rr <- rnorm(nrs, mean=r.medio, sd=r.variacao) for(t in 2:(length(rr)+1)) { N[t] <- N[t-1] + (rr[t] * N[t-1]) plot(tempo[1:t], N[1:t], xlab="Tempo (dias)", ylab="Tamanho Populacional", type="l", xlim=c(0, ntempo)) Sys.sleep(0.05) } legend("topright", legend=paste('r= ', r.medio, 'var.r=', r.variacao), cex=0.8, bty="n") Aumentando o valor da variação, o tamanho populacional variou de maneira que esse tipo de grá- fico não poderia existir, pois ou a população atinge 0 ou permanece com um número baixo. Nesse caso, a população chegou a um valor negativo. # Teste diferentes valores para ver o que acontece. Em todos os casos a população cresce ou de- cresce conforme o esperado? Quanto maior a variação, maior é a imprevisibilidade do crescimento da população. Caso fosse descartado a variação, a população poderia aumentar ou diminuir dependendo do valor de r. # Que tipo de espécie "real" pode apresentar um crescimento similar? Wolffia # Importando dados dos pardais pardais <- read.table("pardais.csv", header=TRUE, sep=";") # Elaborando o gráfico plot(Contagem ~ Ano, data=pardais, type="b", lty=2) Número de pardais no decorrer do tempo de estudo. Para esse gráfico foi utilizado linha pontilhada para representar crescimento discreto. # Calculando a taxa de crescimento n.anos <- nrow(pardais) Rt <- pardais$Contagem[2:36]/pardais$Contagem[1:35] Rt [1] 1.1764706 1.0500000 1.2857143 0.9074074 1.4489796 0.9295775 0.8484848 1.2857143 [9] 1.0694444 0.4805195 0.8648649 0.8125000 0.8461538 1.4090909 0.9032258 1.4642857 [17] 0.8780488 1.0277778 1.1891892 0.7727273 1.3823529 0.9574468 0.9111111 0.7804878 [25] 1.2500000 3.0000000 0.8000000 0.9687500 0.7204301 1.2537313 1.0714286 0.4111111 [33] 0.9189189 1.0000000 1.2647059 Analisando estes dados, não há como definir uma taxa de crescimento único para essa população de pardais, pois ao longo do tempo ocorrem oscilações, não tendo um padrão definido. # Elaborando o gráfico (ano x R) plot(Rt ~ Ano[2:n.anos], data=pardais, xlab="Ano", ylab="R") abline(h=1, lty=3) Gráfico representando o ano x taxa de crescimento. Não há um padrão definido para determinar um crescimento ou decrescimento fixo. # Que explicações você acredita que podem explicar essas flutuações? Disponibilidade de recursos e fatores ambientais como o frio ou o calor que pode afetar os pardais. # Elaborando o gráfico (número de pardais x R) plot(Rt ~ Contagem[1:35], data=pardais) abline(h=1, lty=3) Gráfico representando o número de pardais x taxa de crescimento. Observa-se que não há uma ta- xa definida, tendo épocas em que a população aumenta, diminui e também se mantém estável. Quando a população era cerca de 20 pardais, o número de indivíduos estava aumentando, porém, a partir de 90 pardais a população tende a diminuir. Roteiro 8 - Crescimento logístico # Elaborando o gráfico (casos confirmados/milhões) plot(Confirmed/1000000 ~ Updated, data=br.covid, type="l") plot(Confirmed/1000000 ~ Updated, data=br.covid, log="y", type="l") Gráfico apresentando os meses x casos confirmados (em milhões). Gráfico apresentando os meses x casos confirmados, em escala logarítmica. No gráfico utilizando o log, é possível ver mais claramente a curva, sendo mais fácil de interpretar quando começou a estabilizar, enquanto que no gráfico normal é mais fácil de ver o número de casos confirmados. # Calculando os lambdas R0s <- br.covid$Confirmed[2:241] / br.covid$Confirmed[1:240] plot(R0s ~ Updated[1:240], data=br.covid, type="br.covid.csv") # Gerando o gráfico O gráfico indica que entre Março e Abril a taxa de infecção estava bastante alta. No entanto, ape- sar dos dados apontarem que o número de infectados está tendendo a permanecer constante, não se pode dizer que a situação está ficando "controlada". O que acontece é que devido ao grande núme- ro de infectados, se torna mais difícil para o vírus infectar pessoas ainda não infectadas, que é dife- rente de dizer que a situação está sob "controle". # Criando objetos K = 500 N0 = 20 r=0.009 t <- c(5, 10, 20, 50, 100) # Calculando o tamanho populacional Nt <- K / (1 +(((K - N0) / N0)*exp(-r*t))) Nt [1] 20.88211 21.80136 23.75694 30.66906 46.47846 # Para a nova população t <- 0:1000 N0_20 <- 20 Nt_20 <- K / (1 +(((K - N0_20) / N0_20)*exp(-r*t)))N0_1000 <- 1000 Nt_1000 <- K / (1 +(((K - N0_1000) / N0_1000)*exp(-r*t))) Nt_1000 # Elaborando o gráfico matplot(t, cbind(Nt_20, Nt_1000), type="l", ylab="Tamanho populacional", xlab="Tempo") abline(h=K, lty=2, col=3) legend("topright", title="Valores de N0", legend=c("N0 = 20", "N0 = 1000", "K = 500"), col=1:3, lty=1:2, cex=0.8) Gráfico mostrando o tamanho populacional no decorrer do tempo, observa-se que ambas as popu- lações chegam à capacidade suporte. A população menor conseguiu gerar descendentes a ponto de chegar ao K e a população maior, devido a falta de recursos, teve a sua população diminuída até K. N0 = 20: O aumento pode ocorrer quando se introduz uma espécie em um outro ambiente, e que o mesmo se adapte ao novo local, conseguindo obter recursos necessários e se reproduzir. Um exem- plo é a introdução de espécies exóticas, como o Pinus sp N0 = 1000: A diminuição pode acontecer quando ocorre a invasão de alguma espécie que acaba competindo por recursos com a espécie nativa, que não consegue obter recurso suficiente e a sua população acaba diminuindo. Um exemplo é a invasão do ser humano, que acaba por competir também pelos recursos ali presente. # Criando a função para calcular o tamanho populacional logis <- function(K = 500, rd = 1, N0 = 2, t = 150) { N <- c(N0, rep(NA, length(t))) for (i in 1:t) { N[i + 1] <- N[i] + rd * N[i] * (1 - (N[i] / K)) } return(N) } # Calculando logis logis(K = 100, rd = 0.95, N0 = 20, t = 10) logis(K = 500, rd = 1, N0 = 2, t = 150) Quanto maior o número de rd, mais oscilações terá a população. No entanto, como ambas possuem um rd pequeno, não se observa muita variação. E ao atingir a capacidade suporte, a população dei- xa de crescer. Além disso, elas apresentam mais de um resultado devido ao rd, que faz a população oscilar até chegar no valor de K. # Criando „logis‟ com diferentes valores para rd logis1 <- logis(K = 100, rd = 0.95, N0 = 20, t = 10) logis2 <- logis(K = 100, rd = 1.2, N0 = 20, t = 10) logis3 <- logis(K = 100, rd = 1.8, N0 = 20, t = 10) logis4 <- logis(K = 100, rd = 2.1, N0 = 20, t = 10) # Juntando em um único objeto logisall <- cbind(logis1, logis2, logis3, logis4) # Gerando o gráfico rd <- c(0.95, 1.2, 1.8, 2.1) # para colocar na legenda matplot (t, logisall, type="l", lty = 1, xlab ="tempo", ylab="Tamanho populacional") legend("bottomright", title ="Valores de rd", legend = rd , lty=1:4, col=1:4) Gráfico mostrando as diferenças no tamanho populacional ao longo do tempo de acordo com dife- rentes valores de rd. Os valores de rd influenciaram no tamanho populacional, causando uma oscilação. Esse tipo de gráfico pode ocorrer em espécies que apresenta um tempo específico para a sua reprodução, como bambus. Roteiro 9 - Crescimento logístico em tempo discreto # Comando para gerar os dados covid <- read.csv("covid_florianopolis.csv", as.is=F) head(covid) str(covid) # Ajustando a data da tabela covid$data_teste <- as.Date(covid$data_teste, format="%Y-%m-%d") floripa <- aggregate(classificacao_final ~ data_teste, data=subset(covid, data_teste >= "2020-01-01" & data_teste <= "2020-10-10"), FUN=table) # Criando uma nova tabela com os dados agrupados por data do teste flo.covid <- data.frame( data=as.Date(floripa$data_teste), confirmacao=floripa$classificacao_final[, "CONFIRMAÇÃO LABORATORIAL"]) # Calculando o número cumulativo de casos flo.covid$confirmadostot <- cumsum(flo.covid$confirmacao) # Gráfico com os novos casos confirmados/dia plot(confirmacao ~ data, data=flo.covid, type="h") Gráfico mostrando os números de casos confirmados por dia, observa-se um pico entre Julho e Se- tembro, diminuindo posteriormente. Porém, com o descuido da população os números de novos casos voltaram a subir. # Gráfico com o total de casos por dia acumulado plot(confirmadostot ~ data, data=flo.covid, type="h") Gráfico mostrando o número de confirmados totais no decorrer dos meses, apontando um cresci- mento acelerado a partir de Julho. # Calculando a taxa cumulativa de casos confirmados cumulativos ndias <- nrow(flo.covid) R0 <- flo.covid$confirmadostot[2:ndias] / flo.covid$confirmadostot[1:(ndias-1)] plot(R0 ~ data[1:(ndias-1)], data=flo.covid, type="b", xlab="data") Observa-se um pico na taxa cumulativa antes de Março, quando estava iniciando os casos de Co- vid-19 em Florianópolis. A partir de Março, começou a ter um R0 mais balanceado devido ao au- mento de casos. Apesar de recentemente estar com o R0 equilibrado, isso não quer dizer que está sob “controle”, apenas indica que o número está alto e que normalmente é difícil dobrar esse nú- mero, que já está alto.
Compartilhar