Resolvi refazer os modelos.Optei em separar por doenças.
data_cases <- read.csv("cases_per_neighborhood.csv")
newdata <- data.frame(bairro = data_cases$bairro,
doenca = data_cases$doenca,
dia = as.numeric(data_cases$dia),
populacao = as.numeric(data_cases$populacao))
Os data sets separados:
zika <- subset(newdata, doenca == "Zika", select = c(bairro, populacao, doenca))
dengue <- subset(newdata, doenca == "Dengue", select = c(bairro, populacao, doenca))
chikungunya <- subset(newdata, doenca == "Chikungunya", select = c(bairro, populacao, doenca))
Aqui tive que fazer uma transformação para poder contar os casos:
zika$doenca <- as.integer(zika$doenca)
dengue$doenca <- as.integer(dengue$doenca)
chikungunya$doenca <- as.integer(chikungunya$doenca)
A contagem em si:
countzika <- aggregate(doenca ~ bairro, data = zika, sum)
countdengue <- aggregate(doenca ~ bairro, data = dengue, sum)
countchikua <- aggregate(doenca ~ bairro, data = chikungunya, sum)
Uma rápida visualizada:
head(countzika)
## bairro doenca
## 1 ABOLICAO 252
## 2 ACARI 558
## 3 AGUA SANTA 198
## 4 ANCHIETA 840
## 5 ANDARAI 390
## 6 ANIL 912
head(countdengue)
## bairro doenca
## 1 ABOLICAO 158
## 2 ACARI 574
## 3 AGUA SANTA 44
## 4 ANCHIETA 484
## 5 ANDARAI 258
## 6 ANIL 436
head(countchikua)
## bairro doenca
## 1 ABOLICAO 53
## 2 ACARI 26
## 3 AGUA SANTA 14
## 4 ANCHIETA 552
## 5 ANDARAI 43
## 6 ANIL 27
Criei data sets temporários para integrar a contagem e depois retornei aos data sets separados.
Para Zika:
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
zika1 <- zika %>%
group_by(bairro) %>%
summarise(averagepop = mean(populacao))
zika <- data.frame(bairro = zika1$bairro, casos_zika = countzika$doenca, populacao = zika1$averagepop)
Para Dengue:
dengue1 <- dengue %>%
group_by(bairro) %>%
summarise(averagepop = mean(populacao))
dengue <- data.frame(bairro = dengue1$bairro, casos_dengue = countdengue$doenca, populacao = dengue1$averagepop)
Para Chikungunya:
chikungunya1 <- chikungunya %>%
group_by(bairro) %>%
summarise(averagepop = mean(populacao))
chikungunya <- data.frame(bairro = chikungunya1$bairro, casos_chikungunya = countchikua$doenca, populacao = chikungunya1$averagepop)
Os modelos:
modelzika <- lm(populacao~casos_zika, data = zika)
modeldengue <- lm(populacao~casos_dengue, data = dengue)
modelchiku <- lm(populacao~casos_chikungunya, data = chikungunya)
Dos 3 a melhor leitura estatística é para a Zika:
summary(modelzika)$r.squared
## [1] 0.6639338
summary(modeldengue)$r.squared
## [1] 0.4533145
summary(modelchiku)$r.squared
## [1] 0.3125306
Bom, vocês devem estar se perguntando porque não juntei os data sets. Está dando um problema por conta da diferença de linhas deles. Verei como resolver isto. De qualquer forma fiquei mais satisfeito com o modelo do zika e tentarei criar um aplicativo na segunda (09/01).
Usei o data set com a informação da população por bairro. Optei por ele porque queria testar os casos, levando em consideração a população total.
data_cases <- read.csv("cases_per_neighborhood.csv")
Uma rápida visão:
head(data_cases)
## bairro doenca dia populacao
## 1 TAQUARA Dengue 2015-09-17 102126
## 2 TAQUARA Dengue 2015-04-06 102126
## 3 TAQUARA Dengue 2015-08-17 102126
## 4 TAQUARA Dengue 2015-08-17 102126
## 5 TAQUARA Dengue 2015-02-28 102126
## 6 TAQUARA Dengue 2015-06-22 102126
Como boa parte dos dados estão na classe string ou date, resolvi transformá-los todos em vetores numéricos.
newdata <- data.frame(bairro = as.numeric(data_cases$bairro),
doenca = as.numeric(data_cases$doenca),
dia = as.numeric(data_cases$dia),
populacao = as.numeric(data_cases$populacao))
Novamente uma rápida visão para efeito comparativo:
head(newdata)
## bairro doenca dia populacao
## 1 135 2 270 102126
## 2 135 2 107 102126
## 3 135 2 240 102126
## 4 135 2 240 102126
## 5 135 2 70 102126
## 6 135 2 184 102126
Fiz uma regressão linear múltipla com os dados (tentei vários modelos, optei em manter aqui o nome original):
model2_4 <- lm(populacao~bairro+doenca+dia, data = newdata)
Como podem observar, temos um R2 pequeno (cerca de 0.03), o que é ruim para um modelo preditivo.
summary(model2_4)$r.squared
## [1] 0.03195293
Testei também só com a Zika.
datazika <- subset(data_cases, doenca == "Zika", select = c(bairro, dia, populacao))
Novamente, vetores numéricos:
newdatazika <- data.frame(bairro = as.numeric(data_cases$bairro),
dia = as.numeric(data_cases$dia),
populacao = as.numeric(data_cases$populacao))
E mais uma vez, regressão linear múltipla. Como da primeira vez, só coloquei o “melhor” modelo.
model.fit.1 <- lm(populacao ~ bairro + dia, data = newdatazika)
Novamente R2 baixo:
summary(model.fit.1)$r.squared
## [1] 0.03056193
Como ficou seu modelo, Cristiano? Apesar da baixa perspectiva preditiva neste, vou tentar construir uma função preditiva para vermos como fica. Optei em seguir em frente porque tenho minhas dúvidas a respeito do modelo dos grupos que ficaram na nossa frente. Penso ser provável que também não tenham encontrado uma estatística boa.