Análisis de datos COVID-19 en México

Integrantes: Luis Moisés González Sarmiento

08/12/2021

Acerca del proyecto

Se tiene como objetivo realizar un análisis de los datos referentes a casos COVID-19 en México obtenidos de la página, Data COVID-19.

El presente proyecto ha sido desarrollado para la materia de Métodos Cuantitativos impartida en la División de Posgrado de la Facultad de Contaduría y Administración, UNAM. Profesor, Carlos Rodríguez. Alumno: Luis Moisés González Sarmiento.

Introducción

El coronavirus SARS-Cov-2 es un virus que apareció en China. Después se extendió a todos los continentes del mundo provocando una pandemia. Actualmente Europa y América son los más afectados.

Este nuevo virus, provoca la enfermedad conocida con el nombre de COVID-19.

Objetivos

Realizar analisis estadísticos para observar el comportamiento de estos aplicando los conocimientos adquiridos durante el curso.

Teoría

COVID-19: Los coronavirus son una familia de virus. En los humanos, el coronavirus causa infecciones respiratorias que pueden ir desde una gripa común hasta enfermedades más graves como neumonía, el Síndrome Respiratorio de Oriente Medio (MERS) o el Síndrome Respiratorio Agudo Severo (SRAS).

Se estima que este virus fue propagado en el mercado de Wuhan, China, donde se comercializan animales salvajes. Se sabe que los coronavirus saltan de los animales a los humanos, por lo que se cree que las primeras personas infectadas lo contrajeron por contacto con animales. Sin embargo esto aún no está confirmado.

Análisis

Se importarán los datos desde el sitio web antes citado, se hará el respectivo procesamiento de estos y se procederá a realizar histogramas para tener un panorama generan de los contagios y las defunciones de inicio de la pandemia a la fecha en que se realiza este proyecto. Asimismo, se empleará el método de regresión lineal para validar si existe una dependencia entre las variables seleccionadas.

Datos

Se recuperan los datos desde el sitio, Data COVID-19, y se procede a generar un dataframe. Asimismo, se descargan los diccionarios para poder interpretar los datos de forma factorial.

#------------------------------------------------------------------------------#
#--------------------------------------- Cargamos las liberías ----------------#
#------------------------------------------------------------------------------#
library("readxl")
library("Hmisc")
library("tidyr")
library("plyr")
library("dplyr")
library("GGally")
library("corrplot")
library("PerformanceAnalytics")
library("ggplot2")
library("showtext")
library("knitr")

#------------------------------------------------------------------------------#
#--------------------------------------- Cargamos el datasetCOVID -------------#
#------------------------------------------------------------------------------#
#Debido al tamaño del archivo, extendemos el tiempo de descarga permitido
options(timeout = max(300, getOption("timeout")))
if (!file.exists("data/projectCOVID/211206COVID19MEXICO.csv")){
  if(!dir.exists("data/projectCOVID")){
    dir.create("data/projectCOVID")
  }
  fileURL <- "https://datosabiertos.salud.gob.mx/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip"
  #Creamos un directorio temporal donde guardaremos el ZIP
  tempDir <- tempfile()
  #Descargamos el archivo desde la URI indicando el directorio temporal
  download.file(fileURL,tempDir)
  unzip(tempDir, overwrite = TRUE, exdir = "data/projectCOVID/")
  unlink(tempDir)
}
dataCovid <- read.csv("data/projectCOVID/211206COVID19MEXICO.csv", header = TRUE, sep = ",", quote = "\"", dec = ".",
                  fill = TRUE, comment.char = "", encoding = "unknown")
message("In memory DataSet Covid Complete")

#------------------------------------------------------------------------------#
#--------------------------------------- Cargamos el diccionario --------------#
#------------------------------------------------------------------------------#
if (!file.exists("data/projectCOVID/201128 Catalogos.xlsx")){
  fileURL <- "https://datosabiertos.salud.gob.mx/gobmx/salud/datos_abiertos/diccionario_datos_covid19.zip"
  #Creamos un directorio temporal donde guardaremos el ZIP
  tempDir <- tempfile()
  #Descargamos el archivo desde la URI indicando el directorio temporal
  download.file(fileURL,tempDir)
  tryCatch(unzip(tempDir, overwrite = TRUE, exdir = "data/projectCOVID/"), 
           error = function(c) 
             message("WARNING: Formato de archivo no reconocido"))
  unlink(tempDir)
}
message("In memory Dictionary Complete")

#------------------------------------------------------------------------------#
#---------------------------------------------- Cast a los datos --------------#
#------------------------------------------------------------------------------#
dataCovid$FECHA_ACTUALIZACION <- as.Date(dataCovid$FECHA_ACTUALIZACION, 
                                         tryFormats = c("%d/%m/%Y"))
dataCovid$FECHA_INGRESO <- as.Date(dataCovid$FECHA_INGRESO, 
                                   tryFormats = c("%d/%m/%Y"))
dataCovid$FECHA_SINTOMAS <- as.Date(dataCovid$FECHA_SINTOMAS, 
                                    tryFormats = c("%d/%m/%Y"))

#------------------------------------------------------------------------------#
#--------------------------------------- Leemos los diccionarios --------------#
#------------------------------------------------------------------------------#
catalogoEntidades <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                         sheet = "Catálogo de ENTIDADES",
                         range = "A1:C37",
                         col_names = TRUE)
catalogoEntidades$CLAVE_ENTIDAD <- as.integer(catalogoEntidades$CLAVE_ENTIDAD)

catalogoSexo <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                   sheet = "Catálogo SEXO",
                   range = "A1:B4",
                   col_names = TRUE)
resultadoAntigeno <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                                 sheet = "Catálogo RESULTADO_ANTIGENO",
                                 range = "A2:B5",
                                 col_names = TRUE)
resultadoLab <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                             sheet = "Catálogo RESULTADO_ANTIGENO",
                             range = "A2:B5",
                             col_names = TRUE)
catalogoSector <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                             sheet = "Catálogo SECTOR",
                             range = "A1:B15",
                             col_names = TRUE)
catalogoOrigen <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                             sheet = "Catálogo ORIGEN",
                             range = "A1:B4",
                             col_names = TRUE)
catalogoResultAntigeno <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                                     sheet = "Catálogo RESULTADO_ANTIGENO",
                                     range = "A2:B5",
                                     col_names = TRUE)
catalogoClasificacionFinal <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                                         sheet = "Catálogo CLASIFICACION_FINAL",
                                         range = "A3:B10",
                                         col_names = TRUE)
catalogoResulLab <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                                         sheet = "Catálogo RESULTADO_LAB",
                                         range = "A2:B7",
                                         col_names = TRUE)
catalogoSN <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                          sheet = "Catálogo SI_NO",
                          range = "A1:B6",
                          col_names = TRUE)
catalogoNacionalidad <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                                   sheet = "Catálogo NACIONALIDAD",
                                   range = "A1:B4",
                                   col_names = TRUE)
catalogoTipoPaciente <- read_excel("data/projectCOVID/201128 Catalogos.xlsx", 
                                   sheet = "Catálogo TIPO_PACIENTE",
                                   range = "A1:B4",
                                   col_names = TRUE)
#------------------------------------------------------------------------------#
#--------------------------------------- Reemplazamos los valores -------------#
#------------------------------------------------------------------------------#
dataCovid$ENTIDAD_NAC <- catalogoEntidades$ENTIDAD_FEDERATIVA[match(dataCovid$ENTIDAD_NAC,catalogoEntidades$CLAVE_ENTIDAD)]
dataCovid$ENTIDAD_RES <- catalogoEntidades$ENTIDAD_FEDERATIVA[match(dataCovid$ENTIDAD_RES,catalogoEntidades$CLAVE_ENTIDAD)]
dataCovid$SECTOR <- catalogoSector$DESCRIPCIÓN[match(dataCovid$SECTOR,catalogoSector$CLAVE)]
dataCovid$ENTIDAD_UM <- catalogoEntidades$ENTIDAD_FEDERATIVA[match(dataCovid$ENTIDAD_UM,catalogoEntidades$CLAVE_ENTIDAD)]
dataCovid$SEXO <- catalogoSexo$DESCRIPCIÓN[match(dataCovid$SEXO,catalogoSexo$CLAVE)]
dataCovid$ORIGEN <- catalogoOrigen$DESCRIPCIÓN[match(dataCovid$ORIGEN,catalogoOrigen$CLAVE)]
dataCovid$RESULTADO_ANTIGENO <- catalogoResultAntigeno$DESCRIPCIÓN[match(dataCovid$RESULTADO_ANTIGENO,catalogoResultAntigeno$CLAVE)]
dataCovid$UCI <- catalogoSN$DESCRIPCIÓN[match(dataCovid$UCI,catalogoSN$CLAVE)]
dataCovid$MIGRANTE <- catalogoSN$DESCRIPCIÓN[match(dataCovid$MIGRANTE,catalogoSN$CLAVE)] 
dataCovid$CLASIFICACION_FINAL <- catalogoClasificacionFinal$CLASIFICACIÓN[match(dataCovid$CLASIFICACION_FINAL,catalogoClasificacionFinal$CLAVE)]
dataCovid$TOMA_MUESTRA_ANTIGENO <- catalogoSN$DESCRIPCIÓN[match(dataCovid$TOMA_MUESTRA_ANTIGENO,catalogoSN$CLAVE)]
dataCovid$TOMA_MUESTRA_LAB <- catalogoSN$DESCRIPCIÓN[match(dataCovid$TOMA_MUESTRA_LAB,catalogoSN$CLAVE)]
dataCovid$RESULTADO_LAB <- catalogoResulLab$DESCRIPCIÓN[match(dataCovid$RESULTADO_LAB,catalogoResulLab$CLAVE)]
dataCovid$OTRO_CASO <- catalogoSN$DESCRIPCIÓN[match(dataCovid$OTRO_CASO,catalogoSN$CLAVE)]
dataCovid$TABAQUISMO <- catalogoSN$DESCRIPCIÓN[match(dataCovid$TABAQUISMO,catalogoSN$CLAVE)]
dataCovid$RENAL_CRONICA <- catalogoSN$DESCRIPCIÓN[match(dataCovid$RENAL_CRONICA,catalogoSN$CLAVE)]
dataCovid$OBESIDAD <- catalogoSN$DESCRIPCIÓN[match(dataCovid$OBESIDAD,catalogoSN$CLAVE)]
dataCovid$CARDIOVASCULAR <- catalogoSN$DESCRIPCIÓN[match(dataCovid$CARDIOVASCULAR,catalogoSN$CLAVE)]
dataCovid$OTRA_COM <- catalogoSN$DESCRIPCIÓN[match(dataCovid$OTRA_COM,catalogoSN$CLAVE)]
dataCovid$HIPERTENSION <- catalogoSN$DESCRIPCIÓN[match(dataCovid$HIPERTENSION,catalogoSN$CLAVE)]
dataCovid$INMUSUPR <- catalogoSN$DESCRIPCIÓN[match(dataCovid$INMUSUPR,catalogoSN$CLAVE)]
dataCovid$ASMA <- catalogoSN$DESCRIPCIÓN[match(dataCovid$ASMA,catalogoSN$CLAVE)]
dataCovid$EPOC <- catalogoSN$DESCRIPCIÓN[match(dataCovid$EPOC,catalogoSN$CLAVE)]
dataCovid$DIABETES <- catalogoSN$DESCRIPCIÓN[match(dataCovid$DIABETES,catalogoSN$CLAVE)]
dataCovid$INDIGENA <- catalogoSN$DESCRIPCIÓN[match(dataCovid$INDIGENA,catalogoSN$CLAVE)]
dataCovid$HABLA_LENGUA_INDIG <- catalogoSN$DESCRIPCIÓN[match(dataCovid$HABLA_LENGUA_INDIG,catalogoSN$CLAVE)]
dataCovid$EMBARAZO <- catalogoSN$DESCRIPCIÓN[match(dataCovid$EMBARAZO,catalogoSN$CLAVE)]
dataCovid$NACIONALIDAD <- catalogoNacionalidad$DESCRIPCIÓN[match(dataCovid$NACIONALIDAD,catalogoNacionalidad$CLAVE)]
dataCovid$NEUMONIA <- catalogoSN$DESCRIPCIÓN[match(dataCovid$NEUMONIA,catalogoSN$CLAVE)]
dataCovid$INTUBADO <- catalogoSN$DESCRIPCIÓN[match(dataCovid$INTUBADO,catalogoSN$CLAVE)]
dataCovid$TIPO_PACIENTE <- catalogoTipoPaciente$DESCRIPCIÓN[match(dataCovid$TIPO_PACIENTE,catalogoTipoPaciente$CLAVE)]

Histogramas Defunciones

#------------------------------------------------------------------------------#
#------------------------------------------------------- Analisis -------------#
#------------------------------------------------------------------------------#
#HISTOGRAMAS SIMPLES
#----------DEFUNCIONES
defunciones <- filter(select(dataCovid, FECHA_DEF), FECHA_DEF != "9999-99-99")
defunciones <- na.omit(defunciones, FECHA_DEF)
defunciones$FECHA_DEF <- as.Date(defunciones$FECHA_DEF, tryFormats = c("%d/%m/%Y"))
defunciones <- ddply(defunciones, .(FECHA_DEF), nrow)
colnames(defunciones) <- c("Fecha","Defunciones")

ggplot(defunciones, aes(x = Fecha, y = Defunciones)) + 
  geom_bar(stat = "identity") +
  theme_bw() +
  labs(title="Histograma de Defunciones por COVID-19 en México", x = "Mes", y = "Defunciones")

Gráfico 1.1. Defunciones por COVID-19 en México

ggplot(data=defunciones, aes(Fecha)) + 
  geom_histogram(aes(y = ..density..), 
                 col="red", 
                 fill="blue", 
                 alpha=.2) + 
  geom_density(col=2) + 
  labs(title="Histograma de Defunciones por COVID-19 en México", x="Mes", y="Defunciones")

Gráfico 1.2. Densidad de defunciones por COVID-19 en México

En los gráficos 1.1 y 1.2 se puede observar el aumento constante de los casos de defunciones, se observa que todas estas lineas han tenido un crecimiento relativamente normal ya que no ha habido cambios bruscos, se observa como decrementa la cantidad de casos a finales de 2020 lo cual podríamos relacionarlo con el alza en la aplicación de las vacunas.

Histogramas Contagios

#----------CONTAGIOS
contagios <- filter(select(dataCovid, FECHA_SINTOMAS, CLASIFICACION_FINAL), 
                    CLASIFICACION_FINAL == "CASO DE SARS-COV-2  CONFIRMADO")
contagios <- na.omit(contagios, FECHA_SINTOMAS)
contagios$FECHA_SINTOMAS <- as.Date(contagios$FECHA_SINTOMAS, tryFormats = c("%d/%m/%Y"))
contagios <- ddply(contagios, .(FECHA_SINTOMAS), nrow)
colnames(contagios) <- c("Fecha","Contagios")

ggplot(contagios, aes(x = Fecha, y = Contagios)) + 
  geom_bar(stat = "identity") +
  theme_bw() +
  labs(title="Histograma de Contagios por COVID-19 en México", x = "Mes", y = "Contagios")

Gráfico 2.1. Contagios de COVID-19 en México

ggplot(data=contagios, aes(x = Fecha)) + 
  geom_histogram(aes(y = ..density..), 
                 col="red", 
                 fill="yellow", 
                 alpha=.2) + 
  geom_density(col=2) + 
  theme(legend.background = element_rect(fill = "lightblue", colour = 1)) +
  labs(title="Histograma de Contagios por COVID-19 en México", x="Mes", y="Contagios")

Gráfico 2.2. Densidad de contagios de COVID-19 en México

En los gráficos 2.1 y 2.2 cabe destacar que la densidad para principios y mediados del año 2021, es extremadamente baja en comparación a otros periodos, no obstante, es de tener en observación ese pequeño repunte que se observa a partir del mes de agosto de dicho año.

Regresión Lineal

Analizar la asociación entre las variables de insumo. Crear diagrama de dispersión y correlación bivariada.

dataAnalisys <- filter(select(dataCovid, EDAD, INTUBADO, FECHA_DEF, TABAQUISMO,
                              CLASIFICACION_FINAL),EDAD < 66)
dataAnalisys <- na.omit(dataAnalisys, edad)
dataEdadIntu <- filter(dataAnalisys, INTUBADO == "SI")
dataEdadDefun <- filter(select(dataAnalisys, EDAD, FECHA_DEF), FECHA_DEF != "9999-99-99")
dataIntuTaba <- filter(select(dataAnalisys,INTUBADO, TABAQUISMO), TABAQUISMO == "SI")
dataEdadIntu <- ddply(dataEdadIntu, .(EDAD), nrow)
dataEdadDefun <- ddply(dataEdadDefun, .(EDAD), nrow)
dataIntuTaba <- ddply(dataIntuTaba, .(INTUBADO), nrow)
colnames(dataEdadIntu) <- c("edad","intubado")
colnames(dataEdadDefun) <- c("edad","defuncion")
dataAnalisys <- full_join(dataEdadDefun, dataEdadIntu, by="edad")
round(cor(dataAnalisys),4)
##             edad defuncion intubado
## edad      1.0000    0.9210   0.8975
## defuncion 0.9210    1.0000   0.9898
## intubado  0.8975    0.9898   1.0000
rcorr(as.matrix(dataAnalisys))
##           edad defuncion intubado
## edad      1.00      0.92     0.90
## defuncion 0.92      1.00     0.99
## intubado  0.90      0.99     1.00
## 
## n= 66 
## 
## 
## P
##           edad defuncion intubado
## edad            0         0      
## defuncion  0              0      
## intubado   0    0
correlacion <- round(cor(dataAnalisys), 4)

Las graficas de correlación nos permiten visualizar la correlación que existe en nuestra variables

corrplot(correlacion, method="number", type="upper")

chart.Correlation(dataAnalisys, histogram = F, pch = 19)

anova.one.way <- aov(edad ~ intubado, data= dataAnalisys)

Generamos el factor ANOVA para rectificar la relación que existe entre nuestras variables.

summary(anova.one.way)
##             Df Sum Sq Mean Sq F value Pr(>F)    
## intubado     1  19295   19295   265.2 <2e-16 ***
## Residuals   64   4657      73                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Chi-Cuadrada

Nuestras Hipótesis serán: H0: no existe relación entre el sexo y los casos confirmados de SARS-COV-2 H1: si existe relación entre el sexo y los casos confirmados de SARS-COV-2

#Recuperamos los datos que nos interesan
dataAnalisys <- filter(select(dataCovid, SEXO, CLASIFICACION_FINAL), 
                       CLASIFICACION_FINAL == "CASO DE SARS-COV-2  CONFIRMADO"
                       | CLASIFICACION_FINAL == "NEGATIVO A SARS-COV-2")
dataAnalisys <- na.omit(dataAnalisys, SEXO)

#La siguiente tabla muestra  el porcentaje con respecto al Sexo de la persona
table(dataAnalisys$SEXO)%>%
  prop.table()%>%
  round(2)
## 
## HOMBRE  MUJER 
##   0.51   0.49
#La siguiente tabla muestra  el porcentaje con respecto a la Clasificacion Final de la persona
table(dataAnalisys$CLASIFICACION_FINAL)%>%
  prop.table()%>%
  round(2)
## 
## CASO DE SARS-COV-2  CONFIRMADO          NEGATIVO A SARS-COV-2 
##                           0.41                           0.59
#Observaciones respecto a la relación entre las variables
table(dataAnalisys$SEXO, dataAnalisys$CLASIFICACION_FINAL)%>%
  prop.table()%>%
  round(2)
##         
##          CASO DE SARS-COV-2  CONFIRMADO NEGATIVO A SARS-COV-2
##   HOMBRE                           0.23                  0.28
##   MUJER                            0.18                  0.31
#Relacion de interes entre nuestras variables independientes
dataAnalisys%>%
  group_by(SEXO,CLASIFICACION_FINAL)%>%
  summarize(n=n()) %>%
  mutate(percent=n/sum(n))
## # A tibble: 4 × 4
## # Groups:   SEXO [2]
##   SEXO   CLASIFICACION_FINAL                 n percent
##   <chr>  <chr>                           <int>   <dbl>
## 1 HOMBRE CASO DE SARS-COV-2  CONFIRMADO  91217   0.450
## 2 HOMBRE NEGATIVO A SARS-COV-2          111277   0.550
## 3 MUJER  CASO DE SARS-COV-2  CONFIRMADO  73658   0.375
## 4 MUJER  NEGATIVO A SARS-COV-2          122696   0.625
table(dataAnalisys$SEXO,dataAnalisys$CLASIFICACION_FINAL)%>%
  prop.table(1)%>%
  round(2)
##         
##          CASO DE SARS-COV-2  CONFIRMADO NEGATIVO A SARS-COV-2
##   HOMBRE                           0.45                  0.55
##   MUJER                            0.38                  0.62
dataAnalisys%>%
  group_by(SEXO,CLASIFICACION_FINAL)%>%
  summarize(n=n()) %>%
  mutate(percent=n/sum(n))%>%
  ggplot()+
  geom_col(aes(x=SEXO, y=percent, fill=CLASIFICACION_FINAL))

#Realizamos la prueba Chi-Square
chisq.test(dataAnalisys$SEXO, dataAnalisys$CLASIFICACION_FINAL)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  dataAnalisys$SEXO and dataAnalisys$CLASIFICACION_FINAL
## X-squared = 2333, df = 1, p-value < 2.2e-16

Chi-Cuadrada nos indica que existe un relación significativa entre las variables, SEXO y CLASIFICACION_FINAL, esto debido a que p-value es menor a 0.05.