Created
February 4, 2016 17:35
-
-
Save marcionicolau/e8d017c5e90f06638faa to your computer and use it in GitHub Desktop.
Aedes Aegypti ABM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DATE | SRAD | TMAX | TMIN | RAIN | |
---|---|---|---|---|---|
15305 | 20.629771 | 23.4 | 15.3 | 0 | |
15306 | 5.823043 | 17.6 | 15 | 17.400000000000002 | |
15307 | 10.213278999999998 | 23.4 | 15.7 | 1.7999999999999998 | |
15308 | 7.467642000000001 | 20.9 | 17.1 | 5.4 | |
15309 | 7.387924 | 17 | 13.45 | 3 | |
15310 | 18.030457 | 19 | 12.25 | 0 | |
15311 | 21.045128000000002 | 25.1 | 12.65 | 0 | |
15312 | 22.245425999999995 | 24.700000000000003 | 15.25 | 5.4 | |
15313 | 26.588191 | 29.4 | 15 | 0 | |
15314 | 1.146897 | 23.2 | 18.799999999999997 | 46.2 | |
15315 | 6.261204 | 22.55 | 18.049999999999997 | 0.8 | |
15316 | 23.815058 | 30.25 | 17.4 | 0.2 | |
15317 | 10.822688 | 25.549999999999997 | 17.3 | 30.000000000000004 | |
15318 | 30.530918000000003 | 23.85 | 14.899999999999999 | 0 | |
15319 | 30.877674 | 28.25 | 12.1 | 0.2 | |
15320 | 12.028276000000002 | 27.15 | 17.85 | 6.800000000000001 | |
15321 | 5.240876999999999 | 20.65 | 18.4 | 11.4 | |
15322 | 14.971422999999998 | 25.1 | 17.2 | 0.2 | |
15323 | 20.883273000000003 | 27.8 | 16.7 | 12.600000000000001 | |
15324 | 17.976589 | 21 | 13.45 | 0.2 | |
15325 | 32.301468 | 25.1 | 9.9 | 0.2 | |
15326 | 27.307784 | 28.25 | 15.35 | 0 | |
15327 | 19.287784 | 26.1 | 15.600000000000001 | 0 | |
15328 | 25.011786 | 26.75 | 16.15 | 44.8 | |
15329 | 23.819771000000003 | 27.4 | 17.1 | 0 | |
15330 | 17.936180000000004 | 27.65 | 18.7 | 1.4 | |
15331 | 6.595795 | 22.450000000000003 | 18.75 | 9.2 | |
15332 | 5.867488000000001 | 20.549999999999997 | 18.200000000000003 | 10.2 | |
15333 | 29.409123 | 24.25 | 15.45 | 0.2 | |
15334 | 24.717307999999996 | 24.1 | 14.6 | 0 | |
15335 | 12.825042 | 23.4 | 14.75 | 0.8 | |
15336 | 1.7816589999999999 | 20.45 | 18 | 50.79999999999999 | |
15337 | 24.461431 | 27.450000000000003 | 16 | 0 | |
15338 | 10.945878999999998 | 23.5 | 17.7 | 22.4 | |
15339 | 23.199831 | 27 | 17.15 | 0 | |
15340 | 27.665117999999996 | 24.1 | 15.75 | 0 | |
15341 | 32.942434999999996 | 25.700000000000003 | 12.350000000000001 | 0 | |
15342 | 30.272779000000003 | 30.25 | 15.55 | 0 | |
15343 | 5.597554000000001 | 24.85 | 17.950000000000003 | 51.6 | |
15344 | 17.700208000000003 | 24.700000000000003 | 18.25 | 4.4 | |
15345 | 29.935158 | 28.7 | 17.2 | 0 | |
15346 | 24.337404999999997 | 28.45 | 20.55 | 0.2 | |
15347 | 9.380098999999998 | 23.1 | 17 | 7.800000000000001 | |
15348 | 0.854049 | 19.85 | 18 | 70 | |
15349 | 17.536960999999998 | 24.8 | 18.35 | 9.2 | |
15350 | 28.978695000000002 | 28.3 | 15.850000000000001 | 0 | |
15351 | 25.37898 | 30.5 | 18.9 | 0 | |
15352 | 12.432657 | 30.3 | 18.4 | 21.6 | |
15353 | 9.152282 | 23.4 | 19.05 | 5 | |
15354 | 19.928999 | 25.75 | 16.65 | 0 | |
15355 | 8.451454 | 23.2 | 17.9 | 38.6 | |
15356 | 23.718295000000005 | 29.75 | 18.8 | 7.4 | |
15357 | 15.038620999999997 | 29.049999999999997 | 20.95 | 3.6 | |
15358 | 5.149186999999999 | 23.35 | 20.6 | 9.8 | |
15359 | 21.957880000000007 | 27 | 20.05 | 0.2 | |
15360 | 26.759228999999998 | 29.2 | 19 | 0 | |
15361 | 8.228648999999999 | 26.2 | 19.9 | 12.599999999999998 | |
15362 | 22.903885000000002 | 28.35 | 19.6 | 0.4 | |
15363 | 19.169083 | 27.75 | 19.9 | 1.2 | |
15364 | 10.258309 | 25.549999999999997 | 20.799999999999997 | 44.199999999999996 | |
15365 | 21.330189 | 28.4 | 21.05 | 0.6 | |
16001 | 18.503366999999997 | 27.2 | 19.85 | 1 | |
16002 | 17.141482999999997 | 26.5 | 19.85 | 0 | |
16003 | 25.419499 | 26.049999999999997 | 18.4 | 0 | |
16004 | 21.024919000000004 | 26.75 | 17.65 | 4 | |
16005 | 12.380832999999999 | 24.65 | 19.049999999999997 | 4.8 | |
16006 | 9.170843 | 25.3 | 20.15 | 8 | |
16007 | 18.082305 | 27.75 | 21.15 | 0.2 | |
16008 | 25.503529999999998 | 30.2 | 19.1 | 0 | |
16009 | 19.981225000000006 | 29.85 | 20.5 | 31.6 | |
16010 | 23.713348 | 24.9 | 20.2 | 0.2 | |
16011 | 26.449035 | 28.95 | 20.049999999999997 | 0 | |
16012 | 23.883274000000007 | 30.95 | 20.15 | 0 | |
16013 | 26.588395999999996 | 30.299999999999997 | 21.45 | 0 | |
16014 | 27.480096999999997 | 28.05 | 18.35 | 0 | |
16015 | 29.286737999999996 | 30.05 | 19.35 | 0 | |
16016 | 28.561139999999995 | 29.6 | 19 | 0 | |
16017 | 29.557946 | 30.049999999999997 | 17.549999999999997 | 0 | |
16018 | 30.165441 | 30.549999999999997 | 18.55 | 0 | |
16019 | 29.969076000000005 | 30.9 | 17.1 | 0 | |
16020 | 29.905825000000004 | 29.799999999999997 | 17.5 | 0 | |
16021 | 27.517217999999996 | 29 | 17.65 | 0 | |
16022 | 28.69168 | 29.55 | 17.75 | 0 | |
16023 | 28.840638000000002 | 30.8 | 16.85 | 0 | |
16024 | 29.661277999999996 | 32.3 | 18.95 | 0 | |
16025 | 22.388451999999997 | 31.5 | 19.25 | 3 | |
16026 | -2.5104719999999996 | 23.5 | 18.450000000000003 | 43.2 | |
16027 | 27.500794999999997 | 23.9 | 16.6 | 0 | |
16028 | 25.180795999999994 | 27.4 | 17.299999999999997 | 0 | |
16029 | 25.381767000000004 | 31.049999999999997 | 19.2 | 0 | |
16030 | 17.13273 | 28.1 | 20 | 17 | |
16031 | 4.400991000000001 | 22.3 | 19.700000000000003 | 86.60000000000002 | |
16032 | 13.246908 | 23.85 | 18.2 | 0 | |
16033 | 18.951787 | 24.200000000000003 | 17.45 | 0 | |
16034 | 6.307362000000001 | 22.5 | 18.65 | 4.8 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
rm() | |
set.seed(1000) | |
setwd("~/Analysis/EmAnalise/Mauricio/Aedes") | |
# setwd("~/Documents/Aedes") | |
#dadosClima <- read.table("dados_clima_v2.txt", sep=",", head = T ) | |
#dadosClima <- read.table("dados_clima_v3.txt", head = T ) | |
dadosClima <- read.table("dados_climaPF2015_2016.csv", head = T, sep = "," ) | |
dadosClima$Temp.Comp.Media <- (dadosClima$TMAX + dadosClima$TMIN) / 2 | |
colnames(dadosClima) <- c('DATE','SRAD','TMAX','TMIN','Precipitacao', 'Temp.Comp.Media') | |
#=============================================== | |
# (1) parametrosGlobais | |
#=============================================== | |
# numero máximo de registros de clima do arquivo de dados | |
#dataFim <- 629 VEJAM MAIS ABAIXO | |
dataFim <- nrow(dadosClima) | |
timeStep <- 1 # d | |
steps <- 60 | |
taxaMortalidadeOvo <- 0.15 | |
taxaMortalidadeLarva <- 0.05 | |
taxaMortalidadePupa <- 0.05 | |
taxaMortalidadeAdulto <- 0.05 | |
taxaCrescimentoOvo <- 1 | |
taxaCrescimentoLarva <- 0.99 | |
taxaCrescimentoPupa <- 0.6 | |
taxaCrescimentoAdulto <- 0 | |
#temperatura <- 27 | |
#morte <- 0.02 | |
#limite de idade para mudança de fase | |
idadeLimiteOvo <- 2 | |
idadeLimiteLarva <- 4 | |
idadeLimitePupa <- 6 | |
idadeAdulto <- 8 | |
idadeMorte <- 38 | |
# quantidade de ovos por dia (newaedes) | |
ovosPorDia <- 10 | |
# quantidade de ovos por dia (newaedes) | |
# quantidade de ovos para temperatura < 18 graus e > 34 (temperaturas extremas) | |
ovos_tempExt <- 10 | |
# quantidade de ovos para temperatura > 18 graus e <= 21 | |
ovos_temp18g <- 20 | |
# quantidade de ovos para temperatura >= 22 graus e <= 25 | |
ovos_temp22g <- 30 | |
# quantidade de ovos para temperatura == 26 | |
ovos_temp26g <- 40 | |
# quantidade de ovos para temperatura > 26 e < 30 | |
ovos_temp30g <- 50 | |
# quantidade de ovos para temperatura > 30 graus e <= 34 | |
ovos_temp34g <- 30 | |
# | |
# template para cada individuo | |
## fase 1 = ovo 2 = larva 3 = pupa 4 = adulto | |
newaedes <- data.frame(idade = 0, | |
fase = 1, | |
procuraHumano = 0) | |
#=============================================== | |
# (2) Trabalhadinha nos Dados do arquivo | |
#=============================================== | |
library(plyr) | |
novosDadosClima <- dadosClima | |
#novosDadosClima <- ddply(dadosClima, .(Data), summarise, Precipitacao = sum(Precipitacao), Temp.Comp.Media = sum(Temp.Comp.Media)) | |
#novosDadosClima$Data <- as.Date(novosDadosClima$Data, "%d/%m/%Y") | |
#novosDadosClima <- novosDadosClima[order(as.Date(novosDadosClima$Data, format="%d/%m/%Y")),] | |
#=============================================== | |
# (3) Nova Soma Chuva | |
#=============================================== | |
#retira 10% de agua do primeiro dia que passou, 20 do segundo, 30 do terceiro e assim por diante.. (10 dias) | |
somaChuva <- function(timestp){ | |
fatorEvap <- seq(0,1,0.1) | |
i <- dataFim-steps | |
sumTotal <- sum( novosDadosClima$Precipitacao[((i+timestp)-10):((i+timestp))] * fatorEvap ) | |
#sumTotal <- sum( dadosClima$Precipitacao[i:(i+(timestp))]) | |
sumTotal | |
} | |
calcTemp <- function(timestp){ | |
# considerando o num de steps estipulados ? verificado | |
# em que passo do arquivo de dados climáticos deve começar os cálculos | |
# obs: é realizado os steps x 2, pois no arquivo há 2 registros de dados por dia | |
dt_atual <- dataFim - steps + timestp | |
# a partir da data inicial de verificação é somado quantos dias já se passou | |
# nos timestemp | |
somaTM <- sum(novosDadosClima$Temp.Comp.Media[(dt_atual - (3)):dt_atual]) | |
TMdia <- somaTM / 3 | |
TMdia | |
} | |
#=============================================== | |
# (3) m?todos do ciclo de vida dos individuos | |
#=============================================== | |
#Soma Chuva | |
#somaChuva <- function(timestp){ | |
# considerando o num de steps estipulados ? verificado | |
# em que passo do arquivo de dados climáticos deve começar os cálculos | |
# obs: ? realizado os steps x 2, pois no arquivo h? 2 registros de dados por dia | |
#i <- dataFim-(steps*2) | |
#dataFim <- dataFim+1 | |
# a partir da data inicial de verifica??o ? somado quantos dias j? se passou | |
# nos timestemp | |
# A soma dos dias anteriores - 10%; | |
# se i esta no dia atual 549 entao soma a 10% da precipitacao do dia | |
#incrementa a porcentagem | |
# quando chegar no decimo dia a porcentagem volta ser 10% | |
#soma da chuva sera sempre incrementada | |
#sumTotal <- sumTotal - sumTotal*0.1 | |
#sumTotal <- sum( dadosClima$Precipitacao[i:(i+(timestp*2))]*0.9 ) | |
#sumTotal | |
#} | |
## funcao crescer envelhece em 1 o individuo e muda a fase conforme as idades limite | |
crescer <- function(inds, numdias){ | |
ninds <- length(inds$idade) | |
inds$idade <- inds$idade + timeStep | |
newinds <- NULL | |
#VERIFICA FASE | |
print(paste(" Numero de Inds",ninds)) | |
for (i in 1: ninds) { | |
# Evolu??o do Ovo | |
if (inds$fase[i] == 1) { | |
#Eclosao do ovo | |
if (inds$idade[i] >= idadeLimiteOvo && somaChuva(numdias) >= 30){ | |
inds$fase[i] = inds$fase[i] + 1; | |
} | |
} | |
# Evolucao da Larva | |
if (inds$fase[i] == 2){ | |
if (inds$idade[i] >= idadeLimiteLarva){ | |
inds$fase[i] = inds$fase[i] + 1; | |
} | |
} | |
# Evolução da Pupa | |
if (inds$fase[i] == 3){ | |
if (inds$idade[i] >= idadeLimitePupa){ | |
inds$fase[i] = inds$fase[i] + 1; | |
} | |
} | |
# Adulto - Mosquito | |
if (inds$fase[i] == 4){ | |
#ProcuraHumano vai verificar se o mosquito se alimentou, considerando | |
# que todos os dias há alimento disponível | |
#assim a cada 3 dias ele ir? colocar ovo | |
if (inds$procuraHumano[i] < 3){ | |
inds$procuraHumano[i] = inds$procuraHumano[i] + 1 | |
} | |
if (inds$procuraHumano[i] == 3){ | |
tempMedia <- calcTemp(numdias) | |
#Analise da temperatura dos últimos dias, referente ao tempo da alimentação | |
if (tempMedia < 18 || tempMedia > 34){ | |
for (j in 1:ovos_tempExt) { | |
## a lista de novos individuos recebe um novo aedes | |
newinds <- rbind(newinds, | |
newaedes) | |
} | |
} | |
if (tempMedia >= 18 && tempMedia <= 21){ | |
for (j in 1:ovos_temp18g) { | |
## a lista de novos individuos recebe um novo aedes | |
newinds <- rbind(newinds, | |
newaedes) | |
} | |
} | |
if (tempMedia >= 22 && tempMedia <= 25){ | |
for (j in 1:ovos_temp22g) { | |
## a lista de novos individuos recebe um novo aedes | |
newinds <- rbind(newinds, | |
newaedes) | |
} | |
} | |
if (tempMedia == 26){ | |
for (j in 1:ovos_temp26g) { | |
## a lista de novos individuos recebe um novo aedes | |
newinds <- rbind(newinds, | |
newaedes) | |
} | |
} | |
if (tempMedia > 26 && tempMedia < 30){ | |
for (j in 1:ovos_temp30g) { | |
## a lista de novos individuos recebe um novo aedes | |
newinds <- rbind(newinds, | |
newaedes) | |
} | |
} | |
if (tempMedia >= 30 && tempMedia <= 34){ | |
for (j in 1:ovos_temp34g ) { | |
## a lista de novos individuos recebe um novo aedes | |
newinds <- rbind(newinds, | |
newaedes) | |
} | |
} | |
inds$procuraHumano[i] <- 0 | |
} | |
} | |
} | |
rbind(inds, newinds) | |
} | |
## | |
## Os métodos de morrer mantem somente os individuos que passam nos teste | |
## Subset receber dois paramentros, o primeiro é a lista de elementos | |
## O segundo é o parametro para saber quais elementos serao mantidos | |
## | |
## os metodos morrer abaixo usam as taxas de mortalidade para saber quem ? mantido | |
## fase 1 = ovo 2 = larva 3 = pupa 4 = adulto | |
## o método abaixo recebe os individuos, a taxa de mortalidade e a fase que será aplicada a mortalidade | |
morrer <- function(inds,taxa,fase) { | |
# captura a taxa de mortalidade assim podemos alterar conforme precipitacao ou temperatura e não perder o valor original | |
taxaMortalidade <- taxa | |
# separa os individuos que não ser testados para morrer | |
indsOutros <- subset(inds, inds$fase != fase) | |
# separa os individuos que devem ser testados para morrer | |
indsTestados <- subset(inds, inds$fase == fase) | |
# aplica a taxa de mortalidade | |
if (fase == 1){ | |
indsTemp <- subset(indsTestados, runif(indsTestados$fase) > taxaMortalidade) | |
} else { | |
indsTemp <- subset(indsTestados, runif(indsTestados$fase) > taxaMortalidade & indsTestados$idade <= idadeMorte) | |
} | |
# agrupa os que não morreram com os que não foram testados para morrer | |
rbind(indsOutros, indsTemp) | |
} | |
#=============================================== | |
# (4) Inicializa 10 individuos | |
#=============================================== | |
inds <- data.frame(idade = c(7, 14, 1, 11, 8, | |
27, 2, 20, 7, 20), | |
fase = c(1, 2, 3, 4, | |
3, 1, 2, 4, | |
2, 3), | |
procuraHumano = c(0, 0, 0, 3, | |
0, 0, 0, 1, | |
0, 0)) | |
#=============================================== | |
# (5) life loop | |
#=============================================== | |
total.ovos <- NULL | |
total.larvas <- NULL | |
total.pupas <- NULL | |
total.adultos <- NULL | |
total.chuva <- NULL | |
for (k in 1:steps) { | |
print(paste("timestep",k)) | |
# var K ? necessário na função crescer para que a função somaChuva | |
# verifique em que timestemp esta para acumular os dias que passaram | |
# Quanto de chuva acumulada o dia? | |
print(paste(" Chuva",somaChuva(k))) | |
#tche.. se nao entrar aqui.. acabou-se a vida. | |
if(dim(inds)[1] > 0){ | |
inds <- crescer(inds, k) | |
## morrer ovos | |
inds <- morrer(inds,taxaMortalidadeOvo,1) | |
## morrer larva | |
inds <- morrer(inds,taxaMortalidadeLarva,2) | |
## morrer pupa | |
inds <- morrer(inds,taxaMortalidadePupa,3) | |
## morrer adulto | |
inds <- morrer(inds,taxaMortalidadeAdulto,4) | |
# guardando os totais da população | |
total.chuva <- c(total.chuva,somaChuva(k)) | |
total.ovos <- c(total.ovos,length(subset(inds,inds$fase == 1)$fase)) | |
total.larvas <- c(total.larvas,length(subset(inds,inds$fase == 2)$fase)) | |
total.pupas <- c(total.pupas,length(subset(inds,inds$fase == 3)$fase)) | |
total.adultos <- c(total.adultos,length(subset(inds,inds$fase == 4)$fase)) | |
} | |
} | |
#=============================================== | |
# (6) results and graphics | |
#=============================================== | |
par(mfrow=c(1,1)) | |
simulation <- data.frame(total.ovos,total.larvas,total.pupas,total.adultos,total.chuva) | |
# Trocado os steps pelo numero de rodadas até que morreram todos. Se sobreviverem ate o numero de steps.. BLZ! | |
#dt <- seq(1,steps,1) | |
dt <- seq(1, nrow(simulation) ,1) | |
colnames(simulation) <- c('Ovos','Larvas','Pupas','Adultos','Chuva') | |
cores <- c('pink','orange','green','red','blue') | |
matplot(dt, simulation, type = "l", xlab = "Tempo", ylab = "Quantidade", | |
main = "População", lwd = 1, lty = 1, bty = "l", col = cores) | |
legend("topleft", c("Ovos", "Larvas", "Pupas","Adultos","Chuva"), bty="n" , col = cores, fill=cores) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment