Cargamos las librerias

library(tidyverse)
library(aweek)
library(lubridate)

Cargamos la base de datos

base_dengue <- read.csv(file = "data_cruda/TablaCasosSE_Datos_completos_data.csv",
                      encoding = "UTF-8")

# Cambiamos de nombre a las variables 
colnames(base_dengue)<-c("departamento","provincia","distrito","ano","evento","semana","semana.actualizacion", "sexo", "dx", "DIS ")

Procedimiento

1) Visualizamos el resumen de la data

glimpse(base_dengue)
## Rows: 309,406
## Columns: 10
## $ departamento         <chr> "PIURA", "PIURA", "PIURA", "PIURA", "PIURA", "PIU~
## $ provincia            <chr> "SULLANA", "TALARA", "SULLANA", "SULLANA", "TALAR~
## $ distrito             <chr> "SULLANA", "PARIÑAS", "SULLANA", "MIGUEL CHECA", ~
## $ ano                  <int> 2014, 2014, 2014, 2016, 2016, 2016, 2016, 2015, 2~
## $ evento               <chr> "Dengue", "Dengue", "Dengue", "Dengue", "Dengue",~
## $ semana               <int> 14, 17, 18, 2, 2, 4, 4, 21, 21, 21, 25, 28, 36, 3~
## $ semana.actualizacion <int> 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 5~
## $ sexo                 <chr> "Masculino", "Masculino", "Masculino", "Femenino"~
## $ dx                   <chr> "Confirmados", "Confirmados", "Confirmados", "Con~
## $ `DIS `               <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1~



2) Manejo de datos - dar estructura a la base

Primero calculamos los casos totales para cada fecha y lugar, para eso usamos el comando count() para crear una columna con los acumulados por fecha y lugar.

base_dengue_acum<-base_dengue %>%
  count(departamento,provincia,distrito,ano,semana)
Esta tabla solo contiene las 500 primeras filas

A la tabla que obtuvimos le agregaremos una columna que contenga las fechas: La fecha epidemiológica en formato character la calculamos con el comando get_week() y la fecha en formato date se calcula con el comando week2date(), ambas funciones pertenecen al paquete aweeek

base_dengue_acum<-base_dengue_acum %>%
  mutate(fechaepi =get_aweek(week=semana,year=ano,week_start = 7))%>%
  mutate(fecha=week2date(fechaepi,week_start = 7))
Esta tabla solo contiene las 500 primeras filas

Ahora que tenemos las fechas en columnas podemos hacer series de tiempo de los casos para identificar la incidencia por departamentos

ggplot(base_dengue_acum, mapping = aes(x=fecha, y=n)) +
  geom_line() +
  scale_x_date(date_labels = "%m-%y",date_breaks = "18 month") + 
  facet_wrap(~departamento, nrow=6, scales = 'free_y')+
  labs(x= 'Semanas epidemiológicas', y= 'N° de casos')+
  theme_bw(base_size = 6)


Del gráfico podemos ver la distribucion espacial de los casos por departamentos, para este caso vamos a trabajar con los datos de Lambayeque pues se observan casos constantes en el tiempo.

Filtramos solo el departamento de LAMBAYEQUE (Notese que esta en mayuscula ya que asi esta en la base)

base_dengue_lamb <- base_dengue %>% 
  filter(departamento == 'LAMBAYEQUE')
Esta tabla solo contiene las 500 primeras filas


A partir de aqui solo trabajaremos con la base llamada base_dengue_lamb


3) Manejo de datos - caracteristicas básicas

A partir de aqui vamos a generar 2 bases, la 1era va a contener casos por provincias, semanas, sexo y tipo de diagnostico, y la 2da va a contener solo casos por provincia y semanas

Casos por provincia con información de sexo y tipo de diagniostico: Con la primera base vamos a obtener las caracteristicas basicas de casos reportados de dengue en el periodo 2010-2020

base_dengue_lamb_caracte <- base_dengue_lamb %>% 
  count(departamento, provincia, ano, semana, sexo, dx)

Procedemos a calcular el número de casos por provincia

n_casos <- base_dengue_lamb_caracte %>% 
  group_by(provincia) %>%                 #La base de datos de Lambayeque lo agrupamos por provincia
  summarise(casos = sum(n)) %>%           #creamos la columna casos y sumamos los casos totales
  mutate(porc = round(casos/sum(casos)*100, 1),         # creamos una columna que se llame porc que tenga el porcentaje de casos
         casos = paste0(casos, ' (', porc, ')') ) %>%   #' y reescibimos la columna de casos
  select(-porc)                            #como ya tenemos el porcentaje en casos, deselecionamos esa columna   


Procedemos a calcular el número de casos según el tipo de diagnostico por provincia

n_casos_dx <- base_dengue_lamb_caracte %>% 
  group_by(provincia, dx) %>%         #agrupamos por provincia y por DX
  summarise(casos = sum(n)) %>%       #sumamos los casos totales por provincias y DX
  spread(key = dx, value = casos)     #pasamos de tener DX en filas a columnas 


Procedemos a calcular el número de casos según el sexo por provincia

n_casos_sexo <- base_dengue_lamb_caracte %>% 
  group_by(provincia, sexo) %>%       #agrupamos por provincias y sexo
  summarise(casos = sum(n)) %>%       #sumamos los casos totales para provincias y DX
  spread(key = sexo, value = casos)   #pasamos de tener sexo en filas a columnas


Procedemos a calcular el número de casos según el año por provincia

n_casos_ano <- base_dengue_lamb_caracte %>% 
  group_by(provincia, ano) %>%        #agrupamos por provincias y Año
  summarise(casos = sum(n)) %>%       #sumamos los casos totales para provincias y DX
  spread(key = ano, value = casos)    #pasamos de tener Año en filas a columnas


Finalmente unimos todas las tablas con el comando left_join()

tab_dengue <- n_casos %>%       #unimos todas las tablas por la columna de provincia
  left_join(n_casos_dx) %>% 
  left_join(n_casos_sexo) %>% 
  left_join(n_casos_ano) 

4) Manejo de datos - base de salud lista

En este punto obtendremos la data procesada de salud, que usaremos de aqui en adelante para analizarla con data climatica

base_dengue_lamb_prov <- base_dengue_lamb %>% 
  filter(departamento=="LAMBAYEQUE") %>%
  count(departamento, provincia, ano, semana,name="casos")

Para tener lista nuestra base, vamos a completar con ceros las semanas que no tienen datos

  1. Primero, creamos un dataframe con las mismas variables con todas las filas de semanas
# Aqui calcularemos el vector con todas las semanas epidemiológicas del periodo de estudio
vec_se <- data.frame(fechaepi = seq(as.Date("2010-01-03"), as.Date("2020-12-31"), by = "7 day")) %>% 
  mutate(SE = date2week(fechaepi, floor_day = T,week_start = 7)) %>%
  pull()
# Aqui es donde creamos una replica de nuestra base de datos, pero ya con las semanas completas
df_relleno <- data.frame(
  departamento = rep('LAMBAYEQUE', length(vec_se)*3),
  provincia = rep(c('CHICLAYO','FERREÑAFE','LAMBAYEQUE'), each=length(vec_se)),
  fechaepi = rep(vec_se, 3)) %>% 
  mutate(ano = as.numeric(substring(fechaepi, 1, 4)),
         semana = as.numeric(substring(fechaepi, 7, 8)))
  1. Seguido, unimos nuestra base con el df_relleno y reemplazamos los NA con ceros
base_dengue_lamb_final <- base_dengue_lamb_prov %>% 
  right_join(df_relleno, by=c('departamento', 'provincia', 'ano', 'semana')) %>% 
  replace(is.na(.), 0)

Convertimos nuestra fecha por semana epidemiológica que se encuentra en formato character a formato Date con la función week2date()

base_dengue_lamb_final<-base_dengue_lamb_final %>%
  mutate(fecha=week2date(fechaepi,week_start = 7))

Ahora que tenemos las fechas en columnas podemos hacer gráficas de series de tiempo





Elaboración:

SENAMHI - Ministerio del Ambiente / CDC - Ministerio de Salud