##COVID
Utilizando la información brindada por la Secretaria de Salud Federal sobre los casos de COVID-19 detectados en la República Mexicana, y considerando solamente los casos positivos (verificar que la información que se obtenga de la base de datos sea igual a la reportada diariamente por dicha secretaría), obtener lo siguiente.
Eligiendo un estado de la República de residencia del paciente que tenga más de 20 municipios, obtener (tablas):
El estado seleccionado es Morelos
## Porcentaje de defunciones por municipio en Veracruz
covid<-read.csv("/Users/mac/Downloads/211215COVID19MEXICO.csv")
Para verificar que la información de la base de datos es la misma que se reporta diariamente por la Secretaría, filtramos la columna “CLASIFICACION_FINAL” y encontramos que la cifra de casos confirmados a nivel nacional corresponde al acumulado de tres categorías: 1) caso de covid-19 confirmado por asociación clínica epidemiológica, 2) caso de covid-19 confirmado por comité de dictaminación y 3) caso de sars-cov-2 confirmado con muestra de laboratoio o prueba antigénica.
covid_nac<- which(covid$CLASIFICACION_FINAL<4)
covid_nac_1<- covid[covid_nac,]
dim(covid_nac_1)
## [1] 3924638 40
Ahora, necesitamos identificar en la base solo los casos del estado de Morelos. De acuerdo con los catálogos, el código asignado a este estado es “30”.
mor<- which(covid_nac_1$ENTIDAD_RES==17 )
morelos_posit<- covid_nac_1[mor,]
Para obtener el porcentaje de defunciones necesitamos contar con el número de casos y el número de defunciones por municipio.También resulta útil agregar el nombre de los municipios a la base. Para el número de casos podemos agregar una columna de unos para poder contabilizar y usar la columna “MUNICIPIO_RES” de la forma siguiente:
library(readxl)
nombres<-read_xlsx("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo MUNICIPIOS")
nom_filter<- which(nombres$CLAVE_ENTIDAD== 17)
nom_morelos<-nombres[nom_filter,-3]
nom_morelos$CLAVE_MUNICIPIO<-rep(1:36)
conjunto<- merge (morelos_posit, nom_morelos, by.x = "MUNICIPIO_RES", by.y = "CLAVE_MUNICIPIO")
conjunto$ones<-rep(1,length(conjunto$ENTIDAD_RES))
casos_municipal<-aggregate(ones~ MUNICIPIO,data = conjunto,FUN = sum)
#casos_municipal tiene 35 filas
Para el número de defunciones, ocuparemos la columna “FECHA_DEF” para identificar el número de fallecimientos por municipio.
conjunto$FECHA_DEF<-as.Date(conjunto$FECHA_DEF,format="%Y-%m-%d")
municipio_f<-which(is.na(conjunto$FECHA_DEF)!=TRUE)
def_municipal<-aggregate(ones ~ MUNICIPIO,data =conjunto[municipio_f,],FUN=sum)
Ahora reunimos la información de casos positivos y defunciones por municipio para obtener el porcentaje de estas últimas. Tomaremos como base el data frame que ya cuenta con los municipios identificados, así como la cifra de defunciones.
library(kableExtra)
conj_defunciones <- data.frame (def_municipal$MUNICIPIO,((def_municipal$ones/casos_municipal$ones)*100), def_municipal$ones)
conj_defunciones %>%
kbl(col.names = c("Municipio", "Porcentaje", "Defunciones")) %>%
kable_material_dark(c("striped", "hover", "responsive"))
| Municipio | Porcentaje | Defunciones |
|---|---|---|
| AMACUZAC | 12.738853 | 40 |
| ATLATLAHUCAN | 10.268949 | 42 |
| AXOCHIAPAN | 27.157360 | 107 |
| AYALA | 15.359043 | 231 |
| COATETELCO | 18.181818 | 6 |
| COATLÁN DEL RÍO | 9.045226 | 18 |
| CUAUTLA | 10.411502 | 630 |
| CUERNAVACA | 7.880013 | 1169 |
| EMILIANO ZAPATA | 9.005236 | 172 |
| HUITZILAC | 9.292035 | 42 |
| JANTETELCO | 12.448133 | 30 |
| JIUTEPEC | 7.433683 | 482 |
| JOJUTLA | 9.750297 | 164 |
| JONACATEPEC DE LEANDRO VALLE | 18.120805 | 54 |
| MAZATEPEC | 8.333333 | 16 |
| MIACATLÁN | 12.937063 | 37 |
| OCUITUCO | 16.309013 | 38 |
| PUENTE DE IXTLA | 16.586307 | 172 |
| TEMIXCO | 8.592386 | 246 |
| TEMOAC | 16.875000 | 27 |
| TEPALCINGO | 21.533923 | 73 |
| TEPOZTLÁN | 8.026316 | 61 |
| TETECALA | 7.272727 | 16 |
| TETELA DEL VOLCÁN | 12.549020 | 32 |
| TLALNEPANTLA | 10.447761 | 14 |
| TLALTIZAPÁN DE ZAPATA | 10.500000 | 126 |
| TLAQUILTENANGO | 10.991957 | 82 |
| TLAYACAPAN | 17.692308 | 69 |
| TOTOLAPAN | 17.733990 | 36 |
| XOCHITEPEC | 10.547667 | 156 |
| XOXOCOTLA | 14.634146 | 18 |
| YAUTEPEC | 9.759876 | 252 |
| YECAPIXTLA | 12.837109 | 119 |
| ZACATEPEC | 9.993552 | 155 |
| ZACUALPAN DE AMILPAS | 3.543307 | 9 |
Generamos un objeto que nos permita identificar a los casos con comorbilidades mediante el operador “OR”.
comor<-which(conjunto$TABAQUISMO==1 |conjunto$RENAL_CRONICA==1 |conjunto$OBESIDAD==1 | conjunto$CARDIOVASCULAR==1 |conjunto$HIPERTENSION==1 | conjunto$INMUSUPR==1 | conjunto$ASMA==1 | conjunto$EPOC==1 | conjunto$DIABETES==1 | conjunto$OTRA_COM==1 )
comor_municipal<-aggregate(ones ~ MUNICIPIO,data =conjunto[comor,],FUN=sum)
Ahora reunimos la información de casos positivos y casos de comorbilidad por municipio para obtener el porcentaje de estas últimas. Nuevamente tomaremos como base el data frame que ya cuenta con los municipios identificados, así como la cifra de casos de comorbilidades.
conj_comor<- data.frame (comor_municipal$MUNICIPIO,((comor_municipal$ones/casos_municipal$ones)*100))
conj_comor %>%
kbl(col.names = c("Municipio", "Porcentaje")) %>%
kable_material_dark(c("striped", "hover"))
| Municipio | Porcentaje |
|---|---|
| AMACUZAC | 37.26115 |
| ATLATLAHUCAN | 39.11980 |
| AXOCHIAPAN | 58.88325 |
| AYALA | 43.88298 |
| COATETELCO | 33.33333 |
| COATLÁN DEL RÍO | 37.68844 |
| CUAUTLA | 39.26624 |
| CUERNAVACA | 33.48163 |
| EMILIANO ZAPATA | 35.07853 |
| HUITZILAC | 28.76106 |
| JANTETELCO | 41.49378 |
| JIUTEPEC | 32.37199 |
| JOJUTLA | 36.38526 |
| JONACATEPEC DE LEANDRO VALLE | 40.60403 |
| MAZATEPEC | 33.33333 |
| MIACATLÁN | 39.16084 |
| OCUITUCO | 42.06009 |
| PUENTE DE IXTLA | 39.15140 |
| TEMIXCO | 30.35278 |
| TEMOAC | 36.87500 |
| TEPALCINGO | 43.95280 |
| TEPOZTLÁN | 34.34211 |
| TETECALA | 32.72727 |
| TETELA DEL VOLCÁN | 29.41176 |
| TLALNEPANTLA | 20.89552 |
| TLALTIZAPÁN DE ZAPATA | 36.08333 |
| TLAQUILTENANGO | 31.63539 |
| TLAYACAPAN | 46.92308 |
| TOTOLAPAN | 39.40887 |
| XOCHITEPEC | 38.81001 |
| XOXOCOTLA | 40.65041 |
| YAUTEPEC | 33.46243 |
| YECAPIXTLA | 38.94283 |
| ZACATEPEC | 36.42811 |
| ZACUALPAN DE AMILPAS | 21.25984 |
#3. Total de casos positivos acumulados por día a nivel estatal.
Para el número de casos por dia, ocuparemos la columna “FECHA_INGRESO”.
conjunto$FECHA_INGRESO<-as.Date(conjunto$FECHA_INGRESO,format="%Y-%m-%d")
casos_dia <-aggregate(ones ~ FECHA_INGRESO,data =conjunto,FUN=sum)
casos_dia$Acumulados<- cumsum(casos_dia$ones)
casos_dia1<- casos_dia[625:635,]
casos_dia1 %>%
kbl(col.names = c("Fecha", "Diarios", "Acumulados")) %>%
kable_material_dark(c("striped", "hover"))%>%
kable_styling(full_width = F)
| Fecha | Diarios | Acumulados | |
|---|---|---|---|
| 625 | 2021-12-02 | 23 | 50582 |
| 626 | 2021-12-03 | 25 | 50607 |
| 627 | 2021-12-04 | 2 | 50609 |
| 628 | 2021-12-05 | 6 | 50615 |
| 629 | 2021-12-06 | 25 | 50640 |
| 630 | 2021-12-07 | 21 | 50661 |
| 631 | 2021-12-08 | 9 | 50670 |
| 632 | 2021-12-09 | 17 | 50687 |
| 633 | 2021-12-10 | 17 | 50704 |
| 634 | 2021-12-11 | 2 | 50706 |
| 635 | 2021-12-12 | 5 | 50711 |
Para el número de casos por dia, ocuparemos la columna “FECHA_INGRESO”.
defun_diarias <-aggregate(ones ~ FECHA_DEF,data =conjunto,FUN=sum)
defun_diarias$Acumulados<- cumsum(defun_diarias$ones)
tail_def <-tail(defun_diarias)
tail_def %>%
kbl(col.names = c("Fecha", "Diarios", "Acumulados")) %>%
kable_material_dark(c("striped", "hover"))
| Fecha | Diarios | Acumulados | |
|---|---|---|---|
| 571 | 2021-11-27 | 2 | 4935 |
| 572 | 2021-11-28 | 1 | 4936 |
| 573 | 2021-12-01 | 1 | 4937 |
| 574 | 2021-12-05 | 1 | 4938 |
| 575 | 2021-12-11 | 2 | 4940 |
| 576 | 2021-12-13 | 1 | 4941 |
mujeres <-which(conjunto$SEXO==1 )
mujeres_municipal<-aggregate(ones ~ MUNICIPIO,data =conjunto[mujeres,],FUN=sum)
#Para comprobar
#conj_mujeres_prueba<- data.frame(mujeres_municipal$MUNICIPIO,mujeres_municipal$ones,casos_municipal$ones,((mujeres_municipal$ones/casos_municipal$ones)*100))
conj_mujeres<- data.frame (mujeres_municipal$MUNICIPIO,((mujeres_municipal$ones/casos_municipal$ones)*100))
conj_mujeres %>%
kbl(col.names = c("Municipio", "Porcentaje")) %>%
kable_material_dark()
| Municipio | Porcentaje |
|---|---|
| AMACUZAC | 44.90446 |
| ATLATLAHUCAN | 50.36675 |
| AXOCHIAPAN | 41.37056 |
| AYALA | 46.94149 |
| COATETELCO | 54.54545 |
| COATLÁN DEL RÍO | 58.79397 |
| CUAUTLA | 50.66931 |
| CUERNAVACA | 50.05730 |
| EMILIANO ZAPATA | 48.37696 |
| HUITZILAC | 45.13274 |
| JANTETELCO | 51.86722 |
| JIUTEPEC | 49.93831 |
| JOJUTLA | 50.35672 |
| JONACATEPEC DE LEANDRO VALLE | 42.61745 |
| MAZATEPEC | 51.04167 |
| MIACATLÁN | 50.69930 |
| OCUITUCO | 46.35193 |
| PUENTE DE IXTLA | 46.48023 |
| TEMIXCO | 49.84282 |
| TEMOAC | 47.50000 |
| TEPALCINGO | 47.19764 |
| TEPOZTLÁN | 51.05263 |
| TETECALA | 47.27273 |
| TETELA DEL VOLCÁN | 47.84314 |
| TLALNEPANTLA | 50.74627 |
| TLALTIZAPÁN DE ZAPATA | 51.58333 |
| TLAQUILTENANGO | 54.82574 |
| TLAYACAPAN | 47.69231 |
| TOTOLAPAN | 50.73892 |
| XOCHITEPEC | 49.62813 |
| XOXOCOTLA | 47.96748 |
| YAUTEPEC | 48.91557 |
| YECAPIXTLA | 48.54369 |
| ZACATEPEC | 49.96776 |
| ZACUALPAN DE AMILPAS | 53.54331 |
#2. Gráfico de barras de los 10 municipios con mayor % de defunciones.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
top_def<-conj_defunciones%>%
top_n(n=10,X..def_municipal.ones.casos_municipal.ones....100.)%>%
arrange(desc(X..def_municipal.ones.casos_municipal.ones....100.))
library(plotly)
## Loading required package: ggplot2
##
## 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
fig_def<- plot_ly(top_def , x= top_def$def_municipal.MUNICIPIO, y=top_def$X..def_municipal.ones.casos_municipal.ones....100., type = "bar", color = I("gray")) %>%
layout(title = "Municipios con mayor porcentaje de defunciones")
fig_def
Necesitamos conocer de qué municipios se trata.
top_posit_mun<-casos_municipal%>%
top_n(n=10,ones)%>%
arrange(desc(ones))
top_posit_mun
## MUNICIPIO ones
## 1 CUERNAVACA 14835
## 2 JIUTEPEC 6484
## 3 CUAUTLA 6051
## 4 TEMIXCO 2863
## 5 YAUTEPEC 2582
## 6 EMILIANO ZAPATA 1910
## 7 JOJUTLA 1682
## 8 ZACATEPEC 1551
## 9 AYALA 1504
## 10 XOCHITEPEC 1479
sex_catal<-read_xlsx("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo SEXO")
conj_sex<- merge(conjunto,sex_catal, by.x="SEXO" , by.y="CLAVE", sort=FALSE)
sex_morelos<- aggregate(ones ~ MUNICIPIO_RES+ MUNICIPIO + DESCRIPCIÓN, data= conj_sex, FUN = sum)
sex_morelos1<- sex_morelos %>% arrange(desc(ones)) %>% group_by(DESCRIPCIÓN) %>% top_n(10)
## Selecting by ones
lab_plotsex<- paste(
"Municipio : ", sex_morelos1$MUNICIPIO,
"Casos: ", sex_morelos1$ones, "Descripción:" , sex_morelos1$DESCRIPCIÓN) %>% lapply(htmltools::HTML)
plot_sex<- ggplot(sex_morelos1)+
aes(x=MUNICIPIO, y=ones, fill=DESCRIPCIÓN, text=lab_plotsex)+
geom_bar(stat = "identity", width = .8,
lwd=0.1, position = "dodge")+
scale_fill_manual(values = c("#dce1f3","#454b9a"))+
labs(x="Municipio", y="Número de casos")+
theme_dark(base_size = 7)
ggplotly(plot_sex, tooltip = c("lab_plotsex"))
#4. Gráfico de líneas que representa el número acumulado de defunciones a nivel estatal por día. Al desplazar el cursor sobre la línea, se debe de mostrar la cantidad representada en la línea.
Comunmente, para representar series de tiempo y gráficos de lineas suele usarse la paquetería ” dygraph”, sin embargo, en casos como este, en el que no es posible instalar correctamente esta herramienta ni correr sus funciones principales, puede usarse una alternativa de ggplot que, aunque no tiene la misma apariencia, si proporciona información similar
library(ggplot2)
lab_def<- paste(
"Defunción fecha : ", defun_diarias$FECHA_DEF,
"Acumulados: ", defun_diarias$Acumulados %>% lapply(htmltools::HTML))
q<-ggplot(defun_diarias)+ aes(FECHA_DEF,Acumulados, text=lab_def)+ geom_line ( color="white") +
geom_point() +
labs(title = "Defunciones: casos diarios") +
xlab("") +
theme_dark(base_size = 11) +
theme(axis.text.x=element_text(angle=60, hjust=1)) +
scale_x_date(limit=c(as.Date("2020-04-01"),as.Date("2021-12-14")))
ggplotly(q, dynamicTicks = TRUE, tooltip = c("lab_def")) %>%
rangeslider()