6 de janeiro de 2017

Modelos em regressao linear

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).

***

5 de janeiro de 2017

Modelos em regressao linear

Com todas as 3 doenças: Dengue, Zika e Chikungunya.

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

Só com Zika

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.