library(readr)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(ggplot2)
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
library(ggthemes)
library(pander)
library(ggplotlyExtra)
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.5-18, (SVN revision 1082)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 3.0.4, released 2020/01/28
## Path to GDAL shared files: C:/Users/52492/Documents/R/win-library/4.0/rgdal/gdal
## GDAL binary built with GEOS: TRUE 
## Loaded PROJ runtime: Rel. 6.3.1, February 10th, 2020, [PJ_VERSION: 631]
## Path to PROJ shared files: C:/Users/52492/Documents/R/win-library/4.0/rgdal/proj
## Linking to sp version:1.4-4
## To mute warnings of possible GDAL/OSR exportToProj4() degradation,
## use options("rgdal_show_exportToProj4_warnings"="none") before loading rgdal.
library(leaflet)
library(tidyr)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v tibble  3.0.4     v stringr 1.4.0
## v purrr   0.3.4     v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x lubridate::as.difftime() masks base::as.difftime()
## x lubridate::date()        masks base::date()
## x dplyr::filter()          masks stats::filter()
## x lubridate::intersect()   masks base::intersect()
## x dplyr::lag()             masks stats::lag()
## x lubridate::setdiff()     masks base::setdiff()
## x lubridate::union()       masks base::union()
library(sp)
library(shiny)
## 
## Attaching package: 'shiny'
## The following object is masked from 'package:pander':
## 
##     p
#write.csv(Covid_Zac, "Covid_Zac.csv")
Covid_Zacatecas <- read.csv("Covid_Zac.csv")

Introducción:

La pandemia del COVID-19 se ha exparsido por todo el mundo, en México, el primer caso se registró el 27 de Febrero de 2020, sin embargo, la primer base de datos abiertos se presentó el 12 de abril del mismo año. Dicha base tienen como objetivo mejorar la difusión de la información, mostrar estadística descriptiva y mejorar las proyecciones para prevenir el espacimiento de la enfermedad (curva de contagio)[Fuente:https://coronavirus.gob.mx/covid-19/]

El reporte tiene por objetivo presentar un análisis estadístico de:

  1. La base de datos abiertos que proporciona día a día la Secretaría de Salud sobre casos asociados a COVID-19 con datos acumulados desde el 12 de Abril hasta el 03 de diciembre de 2020

  2. Estadísticas sumarias:

B.1) Total de casos positivos

B.2) Pico de contagios a la fecha

B.3) Total de casos agrabados

B.4) Total de pruebas y su clasificación

B.5) Total de defunciones a la fecha

  1. Índices o frecuencias:

C.1) Índice de tiempo promedio por municipio entre presentar síntomas y ser hospitalizado

C.2) Índice de tiempo promedio por municipio entre ser hospitalizado y fallecer

C.3) Edad promedio de las personas contagiadas por municipio

  1. Gráficos vivos

D.1) Grafico estatal sobre muertes acumuladas a nivel estatal.

D.2) Grafico municipal sobre defunciones a nivel municipal.

Métodología:

Para responder a las preguntas planteadas se presenta el uso de la paqueterías de R y Rstudio mediante codigo fuente tanto para estadística descriptiva como para visualización. Después se presentan los resultados inemdiatos a cada objetivo; por último se presentan conclusiones generales de este ejercicio.

Diccionario

Las siguientes estadísticas se presentan mediante clave intermunicipal declarada por el Instituto Nacional de Geografía y Estadística. Por lo que, entendemos como:

clave <- seq(1:58)
municipio <- c("Apozol","Apulco","Atolinga","Benito Juárez","Calera","Cañitas de Felipe Pescador","Concepción del Oro","Cuauhtémoc", "Chalchihuites","Fresnillo","Trinidad García de la Cadena","Genaro Codina","General Enrique Estrada",
"General Francisco R. Murguía","El Plateado de Joaquín Amaro","General Pánfilo Natera","Guadalupe","Huanusco","Jalpa","Jerez","Jiménez del Teul","Juan Aldama","Juchipila","Loreto","Luis Moya","Mazapil","Melchor Ocampo","Mezquital del Oro","Miguel Auza","Momax","Monte Escobedo","Morelos","Moyahua de Estrada","Nochistlán de Mejía",
"Noria de Ángeles","Ojocaliente","Pánuco","Pinos","Río Grande","Sain Alto","El Salvador","Sombrerete","Susticacán","Tabasco","Tepechitlán",
"Tepetongo","Teúl de González Ortega","Tlaltenango de Sánchez Román",
"Valparaíso","Vetagrande","Villa de Cos","Villa García",
"Villa González Ortega","Villa Hidalgo","Villanueva","Zacatecas","Trancoso","Santa María de la Paz")
clave_estado <- data.frame(clave, municipio)

pander(clave_estado, justify="right", caption= "Clave municipal y municipio")
Clave municipal y municipio
clave municipio
1 Apozol
2 Apulco
3 Atolinga
4 Benito Juárez
5 Calera
6 Cañitas de Felipe Pescador
7 Concepción del Oro
8 Cuauhtémoc
9 Chalchihuites
10 Fresnillo
11 Trinidad García de la Cadena
12 Genaro Codina
13 General Enrique Estrada
14 General Francisco R. Murguía
15 El Plateado de Joaquín Amaro
16 General Pánfilo Natera
17 Guadalupe
18 Huanusco
19 Jalpa
20 Jerez
21 Jiménez del Teul
22 Juan Aldama
23 Juchipila
24 Loreto
25 Luis Moya
26 Mazapil
27 Melchor Ocampo
28 Mezquital del Oro
29 Miguel Auza
30 Momax
31 Monte Escobedo
32 Morelos
33 Moyahua de Estrada
34 Nochistlán de Mejía
35 Noria de Ángeles
36 Ojocaliente
37 Pánuco
38 Pinos
39 Río Grande
40 Sain Alto
41 El Salvador
42 Sombrerete
43 Susticacán
44 Tabasco
45 Tepechitlán
46 Tepetongo
47 Teúl de González Ortega
48 Tlaltenango de Sánchez Román
49 Valparaíso
50 Vetagrande
51 Villa de Cos
52 Villa García
53 Villa González Ortega
54 Villa Hidalgo
55 Villanueva
56 Zacatecas
57 Trancoso
58 Santa María de la Paz

Distribución de contagios para el estado de Zacatecas:

############### Estadísticas########################


Covid_Zacatecas$FECHA_INGRESO<-as.Date(Covid_Zacatecas$FECHA_INGRESO) #todos los casos 
Covid_Zacatecas$FECHA_SINTOMAS <-as.Date(Covid_Zacatecas$FECHA_SINTOMAS)

Covid_Zacatecas_falle<-which(Covid_Zacatecas$FECHA_DEF!="9999-99-99")

Covid_Zacatecas_falle2<-Covid_Zacatecas[Covid_Zacatecas_falle,] #solo fallecidos 

Covid_Zacatecas_falle2$FECHA_DEF<-as.Date(Covid_Zacatecas_falle2$FECHA_DEF)


##Distribución de contagios ##
Graf1 <- ggplot(Covid_Zacatecas, aes(x = FECHA_SINTOMAS, colour=FECHA_SINTOMAS)) + geom_bar()+
  ylab("Contagios") +
  xlab("Días desde que comenzó la pandemia") 
 Graf1+theme_economist() + 
  scale_color_economist()+
  ggtitle("Distribución de los contagios para Zacatecas")

Como podemos ver, el incremento de casos en Zacatecas ha sido gradual, sin embargo, tal como se ha venido mostrando con el semaforo rojo que presenta semanalmente la Secretaría de Salud, el incremento de los casos también se ha desarrollado a partir de Octubre y en ascenso, pues hasta la fecha no sabemos con certeza cuándo será el pico de la pandemia. Sin embargo si podemos saber:

El total de casos confirmados a la fecha:

confirmados <- Covid_Zacatecas %>%
  filter(CLASIFICACION_FINAL==3)
Num_confirmados <- dim(confirmados)

El total de contagios a la fecha es 17,396 confirmados a la fecha ### El pico máximo hasta la fecha:

#Filtramos para casos confirmados:
ts_contagios <- data.frame(table(confirmados$FECHA_SINTOMAS))
#Máximo: picos en la curva
fecha_max_contagios <- ts_contagios[which.max(ts_contagios$Freq),1]

El pico de contagios durante la pandemia en Zacatecas ha sido el 20 de Octubre de 2020.

El total de casos agrabados a la fecha:

Agrabados <- Covid_Zacatecas %>%
  filter(INTUBADO==1)
Num_agrabados <- dim(Agrabados)

El total de personas que han sido intubadas a la fecha son 474 personas.

El total de muestras tomadas en Zacatecas y su resultado:

clas_table <- table(Covid_Zacatecas$CLASIFICACION_FINAL)
Clasificacion <- c("Caso de COVID-19 confirmado por la asociacion clinica epideologica","Caso de COVID-19 confirmado por el comite de dictaminacion","Caso de SARS-COV-2 confirmado","Inválidado por laboratorio", "No realizado por laboratorio", "Caso sospechoso",
"Negativo a SARS-COV-2")
Incidencia <- c(93,2,17396,24,122,2890,15251)
clasificacion_final <- data.frame(Clasificacion, Incidencia)


pander(clasificacion_final, justify="right", caption= "Incidencia catalogada para el SARS-COV2 en Zacatecas")
Incidencia catalogada para el SARS-COV2 en Zacatecas
Clasificacion Incidencia
Caso de COVID-19 confirmado por la asociacion clinica epideologica 93
Caso de COVID-19 confirmado por el comite de dictaminacion 2
Caso de SARS-COV-2 confirmado 17396
Inválidado por laboratorio 24
No realizado por laboratorio 122
Caso sospechoso 2890
Negativo a SARS-COV-2 15251

Viéndolo gráficamente:

##Distribución de resultados de pruebas ##
Graf2 <- ggplot(clasificacion_final, aes(x = Clasificacion, y=Incidencia, 
                                         fill=Clasificacion)) + 
  geom_col()+
  ylab("Frecuencia de resulados por pruebas") +
  xlab("Tipos de resultados") 
Graf2+theme_economist() + 
  scale_color_economist()+
  guides(fill = guide_legend(reverse=TRUE))+
  ggtitle("Distribución de tipos de resultados de pruebas en Zacatecas")

### Total de defunciones a la fecha:

Defunciones <- Covid_Zacatecas %>%
  filter(FECHA_DEF!="9999-99-99")
Num_defunciones <- dim(Defunciones)

El número de defunciones a la fecha es 1721.

Índices y frecuencias

El tiempo promedio que pasa una persona entre presentar síntomas y tomar atención en un hospital por municipio es:

#tiempo promedio en llegar al hospital 
Covid_Zacatecas$TIEM_SINT_HOSP <-Covid_Zacatecas$FECHA_INGRESO-Covid_Zacatecas$FECHA_SINTOMAS
mun_prom_hosp <-aggregate(TIEM_SINT_HOSP~MUNICIPIO_RES, data=Covid_Zacatecas,mean)[-463,]

graf3 <- plotly::plot_ly(data = mun_prom_hosp) %>%
  plotly::add_trace(x = ~ MUNICIPIO_RES,
                    y = ~ TIEM_SINT_HOSP,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Promedio municipal") %>%
  
  plotly::layout(title="Promedio de tiempo sintomas-hospitalización por municipios",
                 yaxis=list(range = c(0, 10)),
                 xaxis=list(title = 'Municipio'), 
                 yaxis=list(title="Promedio"),
                 colorway=c('pink'))
graf3

El tiempo promedio por municipio que pasa una persona en morir después de ser recibir atención hospitalaria (siempre que haya muerto):

#Tiempo promedio de fallecimiento después de ser ingresado
Covid_Zacatecas_falle2$TIEM_FALLE_HOSP <-Covid_Zacatecas_falle2$FECHA_DEF-Covid_Zacatecas_falle2$FECHA_INGRESO
mun_prom_falle <-aggregate(TIEM_FALLE_HOSP~MUNICIPIO_RES, data=Covid_Zacatecas_falle2,mean)

#Unir dos bases de datos
lista_num <- seq(1:58)
falso <- data.frame("Muni"=lista_num, falso=rep(NA,58))
full_sint_hosp <- base::merge(x=falso, y=mun_prom_hosp, by.x="Muni", by.y="MUNICIPIO_RES", all.x=TRUE)
full_sin_hosp2 <- full_sint_hosp[,-2]


#Unir dos bases de datos para fallecidos

full_hosp_falle <- base::merge(x=falso, y=mun_prom_falle, by.x="Muni", by.y="MUNICIPIO_RES", all.x=TRUE)
full_hosp_falle2 <- full_hosp_falle[,-2]

graf4 <- plotly::plot_ly(data = mun_prom_falle) %>%
  plotly::add_trace(x = ~ MUNICIPIO_RES,
                    y = ~ TIEM_FALLE_HOSP,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Promedio municipal") %>%
  
  plotly::layout(title="Promedio de tiempo hospitalización-muerte por municipios",
                 yaxis=list(range = c(0, 20)),
                 xaxis=list(title = 'Municipio'), 
                 yaxis=list(title="Promedio"),
                 colorway=c('pink'))
graf4

Ahora bien, la edad promedio de las personas por municipio que dieron positivo a COVID-19 es:

#Edad promedio por municipio

mun_prom_edad <-aggregate(EDAD~MUNICIPIO_RES, data=Covid_Zacatecas,mean)

graf5 <- plotly::plot_ly(data = mun_prom_edad) %>%
  plotly::add_trace(x = ~ MUNICIPIO_RES,
                    y = ~ EDAD,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Promedio municipal") %>%
  
  plotly::layout(title="Promedio de edad para casos confirmados por municipio",
                 yaxis=list(range = c(30, 60)),
                 xaxis=list(title = 'Municipio'), 
                 yaxis=list(title="Promedio"),
                 colorway=c('pink'))
graf5

Un dato interesante es que el promedio de la edad de las personas contagiadas en todos los municipios de Zacatecas sean mayores a 30 años y menores a 60 años.

Viendo la comparación de muertes acumuladas:

ts_muertos <- data.frame(table(Covid_Zacatecas_falle2$FECHA_DEF))
ts_muertos$Var1 <- as.Date(ts_muertos$Var1)
ts_muertos$Sum_acu <- cumsum(ts_muertos$Freq)
is.Date(ts_muertos$Var1)
## [1] TRUE
is.numeric(ts_muertos$Freq)
## [1] TRUE
plot(Sum_acu~Var1, type="l", data=ts_muertos[1:50,])
lines(Freq~Var1, type="l",col="red", data=ts_muertos[1:100,])

#Graficando muertes
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(dplyr)
plotly::plot_ly(data = ts_muertos) %>%
  plotly::add_trace(x = ~ Var1,
                    y = ~ Freq,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Nivel estatal")
#Graficando la suma acumulada
plotly::plot_ly(data = ts_muertos) %>%
  plotly::add_trace(x = ~ Var1,
                    y = ~ Sum_acu,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Nivel estatal")
#Graficando juntas 
  plotly::plot_ly(data = ts_muertos) %>%
  plotly::add_trace(x = ~ Var1,
                    y = ~ Freq,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Nivel Estatal") %>%#Shift+Ctrl+m
    plotly::add_trace(x = ~ Var1,
                      y = ~ Sum_acu,
                      type = "scatter",
                      mode = "lines+markers",
                      name = "Nivel Estatal") %>% 
#Distribución
    plotly::layout(tittle="Gráfico estatal", hovermode="compare",
                    colorway=c('pink', "purple"))

Gráficos vivos

Fallecimientos por municipio

Mapa_zac <- readOGR(".","zacatecas", encoding="ISO-8859-1")
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\52492\Documents\proyecto_zac\proyecto_zac", layer: "zacatecas"
## with 58 features
## It has 4 fields
#writeOGR(Mapa_zac, dsn=".",layer = "Mapa_zac", driver="ESRI Shapefile")

#Fallecidos por municipio
muertes_acumuladas <- as.data.frame(table(Covid_Zacatecas_falle2$MUNICIPIO_RES))

#Metemos información al mapa 
Mapa_zac$Muertes_Acumuladas <-as.numeric(muertes_acumuladas[as.numeric(Mapa_zac@data$CVE_MUN),2])


#Graficamos
fallecidos_zac <- paste(
  "Municipio: ",Mapa_zac$NOMGEO,"<br/>",
  "Fallecidos: ",Mapa_zac$Muertes_Acumuladas,2) %>%
  lapply(htmltools::HTML)

estratificacion <- c(0,10 ,50,100,150,200,300,500)

color<-  colorBin(palette = "viridis", domain=Mapa_zac$Muertes_Acumuladas, na.color="transparent",bins=estratificacion)

leaflet(data=Mapa_zac) %>%  addTiles()%>% 
  addPolygons(label = ~fallecidos_zac,
              weight = 2,
              opacity = 1,
              color = "pink",
              dashArray = "3",
  fillColor = color(Mapa_zac$Muertes_Acumuladas),
              fillOpacity=0.7) %>%
 addLegend(pal = color, values = ~Mapa_zac$Muertes_Acumuladas, opacity = 0.7,
           title = "Fallecidos acumulados por municipio",
          position = "topright") %>% 
addProviderTiles("Stamen.Watercolor")

Promedio de tiempo que pasa una persona entre ser hospitalizado y fallecer, por municipio:

Mapa_zac$hosp_falle <-as.numeric(full_hosp_falle2[as.numeric(Mapa_zac@data$CVE_MUN), 2])


#Graficamos
falle_hospi_zac <- paste(
  "Municipio: ",Mapa_zac$NOMGEO,"<br/>",
  "Fallecidos: ",Mapa_zac$hosp_falle,2) %>%
  lapply(htmltools::HTML)

estratificacion2 <- c(0,5,10,15,20,25,30,35,40)

color<-  colorBin(palette = "viridis", domain=Mapa_zac$hosp_falle, na.color="transparent",bins=estratificacion2)

leaflet(data=Mapa_zac) %>%  addTiles()%>% 
  addPolygons(label = ~falle_hospi_zac,
              weight = 2,
              opacity = 1,
              color = "pink",
              dashArray = "3",
  fillColor = color(Mapa_zac$hosp_falle),
              fillOpacity=0.7) %>%
 addLegend(pal = color, values = ~Mapa_zac$hosp_falle, opacity = 0.7,
           title = "Tiempo promedio que pasa una persona en fallecer dado que fue hospitalizada, por municipio",
          position = "topright") %>% 
addProviderTiles("Stamen.Watercolor")

Tiempo promedio que pasa una persona en ser hospitalizada dado que presentó síntomas:

Mapa_zac$full_sint_hosp <-as.numeric(full_sin_hosp2[as.numeric(Mapa_zac@data$CVE_MUN),2])

#Graficamos
sint_hospi_zac <- paste(
  "Municipio: ",Mapa_zac$NOMGEO,"<br/>",
  "Fallecidos: ",Mapa_zac$full_sint_hosp,2) %>%
  lapply(htmltools::HTML)

estratificacion3 <- c(0,5,10,15,20)

color<-  colorBin(palette = "viridis", domain=Mapa_zac$hosp_falle, na.color="transparent",bins=estratificacion3)

leaflet(data=Mapa_zac) %>%  addTiles()%>% 
  addPolygons(label = ~sint_hospi_zac,
              weight = 2,
              opacity = 1,
              color = "pink",
              dashArray = "3",
              fillColor = color(Mapa_zac$full_sint_hosp),
              fillOpacity=0.7) %>%
              addLegend(pal = color, 
                        values = ~Mapa_zac$full_sint_hosp, 
                        opacity = 0.7,
              title = "Tiempo promedio que pasa una persona en ser  hospitalizada luego de presentar síntomas, por municipio",
          position = "topright") %>% 
addProviderTiles("Stamen.Watercolor")