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")
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:
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
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
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
D.1) Grafico estatal sobre muertes acumuladas a nivel estatal.
D.2) Grafico municipal sobre defunciones a nivel municipal.
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.
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 | 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 |
############### 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:
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.
Agrabados <- Covid_Zacatecas %>%
filter(INTUBADO==1)
Num_agrabados <- dim(Agrabados)
El total de personas que han sido intubadas a la fecha son 474 personas.
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")
| 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.
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.
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"))
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")
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")
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")