library(rio)
data=import("datos_abiertos_vigilancia_dengue.csv")
summary(data$edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   15.00   26.00   28.97   41.00  106.00
str(data)
## 'data.frame':    501680 obs. of  7 variables:
##  $ departamento: chr  "SAN MARTIN" "CUSCO" "ICA" "LORETO" ...
##  $ provincia   : chr  "RIOJA" "LA CONVENCION" "ICA" "MAYNAS" ...
##  $ distrito    : chr  "PARDO MIGUEL" "SANTA ANA" "PARCONA" "IQUITOS" ...
##  $ enfermedad  : chr  "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" ...
##  $ year        : int  2022 2021 2020 2021 2021 2022 2020 2022 2017 2017 ...
##  $ ubigeo      : int  220805 80901 110106 160101 250101 200401 160101 200105 200104 130702 ...
##  $ edad        : int  106 105 104 104 103 103 102 101 100 100 ...
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
table(data$enfermedad)
## 
##                              DENGUE CON SEÑALES DE ALARMA 
##                            8                        55058 
##                 DENGUE GRAVE DENGUE SIN SEÑALES DE ALARMA 
##                         2262                       444352
data$enfermedad <- gsub("DENGUE CON SEÑALES DE ALARMA", "con", data$enfermedad)
data$enfermedad <- gsub("DENGUE SIN SEÑALES DE ALARMA", "sin", data$enfermedad)
data$enfermedad <- gsub("DENGUE GRAVE", "grave", data$enfermedad)
table(data$enfermedad)
## 
##           con  grave    sin 
##      8  55058   2262 444352
data=filter(data, enfermedad=="con" | enfermedad=="sin" | enfermedad=="grave")
data$enfermedad=as.factor(data$enfermedad)
table(data$enfermedad)
## 
##    con  grave    sin 
##  55058   2262 444352
summary(data$edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   15.00   26.00   28.97   41.00  106.00

Pregunta 1

library(lsr)
EdadxYear = data |>
  group_by(year) |>
  summarise(media = mean(edad, na.rm=T))
EdadxYear
## # A tibble: 23 × 2
##     year media
##    <int> <dbl>
##  1  2000  28.4
##  2  2001  28.9
##  3  2002  26.0
##  4  2003  28.6
##  5  2004  28.1
##  6  2005  26.3
##  7  2006  26.8
##  8  2007  28.0
##  9  2008  27.8
## 10  2009  29.6
## # ℹ 13 more rows

Gráfico

library(ggplot2)
library(ggthemes)
## Warning: package 'ggthemes' was built under R version 4.3.3
# Crear el gráfico de líneas
ggplot(EdadxYear, aes(x = year, y = media)) +
  geom_line(color = "blue", size = 1.5) +
  geom_point(color = "red", size = 3) +  # Añadir puntos para resaltar los valores
  labs(title = "Edad promedio de personas contagiadas de dengue por año",
       x = "Año",
       y = "Edad") +
 theme_economist()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

theme(legend.key.size = unit(1, "lines"))
## List of 1
##  $ legend.key.size: 'simpleUnit' num 1lines
##   ..- attr(*, "unit")= int 3
##  - attr(*, "class")= chr [1:2] "theme" "gg"
##  - attr(*, "complete")= logi FALSE
##  - attr(*, "validate")= logi TRUE

Pregunta 2

pregunta2 <- data %>%
  group_by(year) %>%
  summarise(
    total_casos = n(),
    graves = sum(enfermedad == "grave"),
    sin_señales = sum(enfermedad == "sin"),
    con_señales = sum(enfermedad == "con")
  ) 

Grafico

library(ggplot2)

# Suponiendo que tus datos están en un dataframe llamado "datos" con las columnas "año", "total", "con_alarma", "sin_alarma" y "graves"

# Crear gráficos de líneas individuales para cada variable
grafico_total <- ggplot(pregunta2, aes(x = year, y = total_casos)) +
  geom_line() +
  labs(title = "Total de casos de Dengue a lo largo de los años",
       x = "Año",
       y = "Total de casos") +
  theme_minimal()

grafico_con_alarma <- ggplot(pregunta2, aes(x = year, y = con_señales)) +
  geom_line() +
  labs(title = "Casos de Dengue con Alarma a lo largo de los años",
       x = "Año",
       y = "Casos con Alarma") +
  theme_minimal()

grafico_sin_alarma <- ggplot(pregunta2, aes(x = year, y = sin_señales)) +
  geom_line() +
  labs(title = "Casos de Dengue sin Alarma a lo largo de los años",
       x = "Año",
       y = "Casos sin Alarma") +
  theme_minimal()

grafico_graves <- ggplot(pregunta2, aes(x = year, y = graves)) +
  geom_line() +
  labs(title = "Casos de Dengue Graves a lo largo de los años",
       x = "Año",
       y = "Casos Graves") +
  theme_minimal()

# Mostrar los gráficos por separado
print(grafico_total)

print(grafico_con_alarma)

print(grafico_sin_alarma)

print(grafico_graves)

Pregunta 4

pregunta4 <- data %>%
  group_by(departamento, provincia, year) %>%
  summarize(
    con_alarma = sum(enfermedad == "con"),
    sin_alarma = sum(enfermedad == "sin"),
    graves = sum(enfermedad == "graves")
  )
## `summarise()` has grouped output by 'departamento', 'provincia'. You can
## override using the `.groups` argument.
# Mostrar los primeros registros de la base de datos resumida
head(pregunta4)
## # A tibble: 6 × 6
## # Groups:   departamento, provincia [1]
##   departamento provincia  year con_alarma sin_alarma graves
##   <chr>        <chr>     <int>      <int>      <int>  <int>
## 1 AMAZONAS     BAGUA      2000          0        280      0
## 2 AMAZONAS     BAGUA      2001          0        420      0
## 3 AMAZONAS     BAGUA      2002          0         20      0
## 4 AMAZONAS     BAGUA      2003          0         83      0
## 5 AMAZONAS     BAGUA      2004          0        126      0
## 6 AMAZONAS     BAGUA      2005          0         51      0

Ahora añadiré el total

pregunta4 <- pregunta4 %>%
  mutate(total_contagios = con_alarma + sin_alarma + graves)
head(pregunta4)
## # A tibble: 6 × 7
## # Groups:   departamento, provincia [1]
##   departamento provincia  year con_alarma sin_alarma graves total_contagios
##   <chr>        <chr>     <int>      <int>      <int>  <int>           <int>
## 1 AMAZONAS     BAGUA      2000          0        280      0             280
## 2 AMAZONAS     BAGUA      2001          0        420      0             420
## 3 AMAZONAS     BAGUA      2002          0         20      0              20
## 4 AMAZONAS     BAGUA      2003          0         83      0              83
## 5 AMAZONAS     BAGUA      2004          0        126      0             126
## 6 AMAZONAS     BAGUA      2005          0         51      0              51

Data nueva completa ahora sí todo

provyear <- pregunta4 %>%
  group_by(departamento, provincia) %>%
  summarise(total_historico = sum(total_contagios))
## `summarise()` has grouped output by 'departamento'. You can override using the
## `.groups` argument.
summary(provyear$total_historico)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     1.0    10.5  1138.0  4499.2  3530.5 66674.0

Puesto que la media es 1138, los datos que estén por encima de dicha media serán consideradas muy altas

provyear=filter(provyear, total_historico>4499.2)

Gráfico de puntos

library(ggplot2)

# Crear el gráfico de puntos
grafico <- ggplot(provyear, aes(x = departamento, y = total_historico, label = provincia)) +
  geom_point(color = "red", size = 3) +  # Puntos azules
  geom_text(size = 4, vjust = -0.5) +  # Etiquetas con un tamaño y alineación vertical adecuados
  labs(title = "Provincias con mayor número de casos de dengue",  # Título del gráfico
       x = "Departamentos", y = "Total de casos") +  # Etiquetas de los ejes
  theme_solarized() +  # Estilo minimalista
  theme(plot.title = element_text(hjust = 0.5),  # Alinear título al centro
        plot.margin = unit(c(0.8, 0.8, 0.8, 0.8), "cm"))  # Márgenes del gráfico

# Mostrar el gráfico
print(grafico)

Pregunta 5

Ahora bien, para analizar la relación primero haremos una suma de cada dato por departamento y después realizaremos un mapa de calor (primera vez que hago uno)

Vamos a explorar primero

table(data$departamento)
## 
##           \\N      AMAZONAS        ANCASH      AREQUIPA      AYACUCHO 
##           444         12017          7214             7          8889 
##     CAJAMARCA        CALLAO         CUSCO       HUANUCO           ICA 
##         19409            26         10475          9046         21324 
##         JUNIN   LA LIBERTAD    LAMBAYEQUE          LIMA        LORETO 
##         19199         24377         15618          4255         92496 
## MADRE DE DIOS      MOQUEGUA         PASCO         PIURA          PUNO 
##         30562             1          1963        126392           179 
##    SAN MARTIN        TUMBES       UCAYALI 
##         26759         27313         43707

Según lo registra la base de datos, solo se tiene información de 22 departamentos y NN

Procederemos a limpiar para después crear

pregunta5 <- data %>% filter_all(all_vars(. != "\\N"))
table(pregunta5$departamento)
## 
##      AMAZONAS        ANCASH      AREQUIPA      AYACUCHO     CAJAMARCA 
##         12017          7214             7          8889         19409 
##        CALLAO         CUSCO       HUANUCO           ICA         JUNIN 
##            26         10475          9046         21324         19199 
##   LA LIBERTAD    LAMBAYEQUE          LIMA        LORETO MADRE DE DIOS 
##         24377         15618          4255         92496         30562 
##      MOQUEGUA         PASCO         PIURA          PUNO    SAN MARTIN 
##             1          1963        126392           179         26759 
##        TUMBES       UCAYALI 
##         27313         43707

Creacion de la data

pregunta5 <- pregunta5 %>%
  group_by(departamento) %>%
  summarise(
    total_casos = n(),
    graves = sum(enfermedad == "grave"),
    sin_señales = sum(enfermedad == "sin"),
    con_señales = sum(enfermedad == "con")
  ) 
head(pregunta5)
## # A tibble: 6 × 5
##   departamento total_casos graves sin_señales con_señales
##   <chr>              <int>  <int>       <int>       <int>
## 1 AMAZONAS           12017     39       11476         502
## 2 ANCASH              7214     19        6899         296
## 3 AREQUIPA               7      0           6           1
## 4 AYACUCHO            8889     20        8600         269
## 5 CAJAMARCA          19409     37       17503        1869
## 6 CALLAO                26      0          23           3

La pregunta me pide analizar la relación entre casos alarmantes no graves y los asintomaticos. En ese sentido, en la base de datos significa que es la relación entre los “con” entre los “sin”

pregunta5 <- pregunta5 %>%
  mutate(relacion = con_señales/sin_señales)
pregunta5=select(pregunta5, c(1,6))
head(pregunta5)
## # A tibble: 6 × 2
##   departamento relacion
##   <chr>           <dbl>
## 1 AMAZONAS       0.0437
## 2 ANCASH         0.0429
## 3 AREQUIPA       0.167 
## 4 AYACUCHO       0.0313
## 5 CAJAMARCA      0.107 
## 6 CALLAO         0.130

Intentaremos importar la data de los mapas

library(ggplot2)
library(rgdax)
## Warning: package 'rgdax' was built under R version 4.3.3
## Loading required package: digest
## Loading required package: jsonlite
## Loading required package: RCurl
## Loading required package: httr
## Loading required package: plyr
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
library(sp)
library(ggplot2)
mapDIS=sf::read_sf("DEPARTAMENTO.shp")
ggplot(mapDIS) + geom_sf()

Exploremos un poco más a fondo esta base de datos del mapa

names(mapDIS)
## [1] "DEPARTAMEN" "CAPITAL"    "INSTITUCIO" "geometry"
#cambiaremos el nombre
names(mapDIS)=c("departamento","capital","institucion","geometry")

Toca unir la data para intentar que salga

mapa=merge(mapDIS, pregunta5)
ggplot(mapa) +
    geom_sf(aes(fill = relacion))

# Transformar los datos espaciales a otro sistema de coordenadas (3857)
  nc_3857 <- sf::st_transform(mapa, 3857)
  
  # Crear un gráfico con dos capas de datos, una con los datos originales y otra con los datos transformados, coloreando los polígonos en rojo y mostrando los bordes en blanco
  ggplot() +
    geom_sf(data = mapa) +
    geom_sf(data = nc_3857, colour = "red", fill = NA)

  # Agregar un punto central a cada polígono y ajustar el tamaño del punto según la variable 'AREA', mostrando el punto en la leyenda
  nc_3857$mid <- sf::st_centroid(nc_3857$geometry)
  ggplot(nc_3857) +
    geom_sf(colour = "white") +
    geom_sf(aes(geometry = mid, size = relacion), show.legend = "point")

  # Crear un gráfico con capas que utilizan las coordenadas x e y, estableciendo el sistema de coordenadas predeterminado
  ggplot(nc_3857) +
    geom_sf() +
    annotate("point", x = -80, y = 35, colour = "red", size = 4) +
    coord_sf(default_crs = sf::st_crs(4326))

  # Agregar etiquetas a los polígonos
  ggplot(nc_3857[1:3, ]) +
    geom_sf(aes(fill = relacion)) +
    geom_sf_label(aes(label = departamento))