Luis Camargo (3101369)
Alejandro González (3101363)
Resumen
El presente trabajo aplica herramientas de Big Data y análisis
descriptivo en R para examinar una base de datos de casos de
COVID-19.
A través de procedimientos de limpieza, transformación y visualización
de datos, se exploran aspectos demográficos, clínicos y epidemiológicos
de los registros, incluyendo la distribución de edad y género, la
prevalencia de síntomas, y los indicadores de hospitalización y
letalidad (CFR) por grupo etario.
El estudio también incorpora representaciones gráficas que permiten
identificar tendencias temporales y patrones en la evolución de la
enfermedad.
Los resultados evidencian que la severidad del COVID-19 aumenta con la
edad y que los síntomas más comunes fueron la tos, el dolor de cabeza y
la pérdida del gusto u olfato.
install.packages("xfun", repos = "https://cran.r-project.org", dependencies = TRUE)
## Installing package into 'C:/Users/LUIS/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
##
## There is a binary version available but the source version is later:
## binary source needs_compilation
## xfun 0.53 0.54 TRUE
##
## Binaries will be installed
## package 'xfun' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'xfun'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\LUIS\AppData\Local\R\win-library\4.5\00LOCK\xfun\libs\x64\xfun.dll a
## C:\Users\LUIS\AppData\Local\R\win-library\4.5\xfun\libs\x64\xfun.dll:
## Permission denied
## Warning: restored 'xfun'
##
## The downloaded binary packages are in
## C:\Users\LUIS\AppData\Local\Temp\Rtmpmevimn\downloaded_packages
library(readxl)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(tidyr)
library(corrplot)
## corrplot 0.95 loaded
library(lubridate)
##
## Adjuntando el paquete: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
# Establecer directorio de trabajo
setwd("C:/Users/LUIS/Downloads/parte 2")
# Cargar la librería
library(readxl)
# Leer el archivo Excel
datos <- read_excel("2. covid_example_data (1).xlsx")
# Ahora sí puedes revisar la estructura
str(datos)
## tibble [82,101 × 31] (S3: tbl_df/tbl/data.frame)
## $ PID : chr [1:82101] "3a85e6992a5ac52f" "c6b5281d5fc50b96" "53495ad0dca4e22c" "2948a265da0d081b" ...
## $ reprt_creationdt_FALSE: POSIXct[1:82101], format: "2020-03-22" "2020-02-01" ...
## $ case_dob_FALSE : POSIXct[1:82101], format: "2004-11-08" "1964-06-07" ...
## $ case_age : num [1:82101] 16 57 77 57 56 65 47 61 36 42 ...
## $ case_gender : chr [1:82101] "Male" "Male" "Female" "Female" ...
## $ case_race : chr [1:82101] "WHITE" "WHITE" "BLACK" "BLACK" ...
## $ case_eth : chr [1:82101] "NON-HISPANIC/LATINO" "NON-HISPANIC/LATINO" "NON-HISPANIC/LATINO" "NON-HISPANIC/LATINO" ...
## $ case_zip : num [1:82101] 30308 30308 30315 30213 30004 ...
## $ Contact_id : chr [1:82101] "Yes-Symptomatic" "Yes-Symptomatic" "Yes-Symptomatic" "Yes-Symptomatic" ...
## $ sym_startdt_FALSE : POSIXct[1:82101], format: "2020-03-20" "2020-01-28" ...
## $ sym_fever : chr [1:82101] "Yes" "No" "Yes" "No" ...
## $ sym_subjfever : chr [1:82101] "Yes" "No" NA "Yes" ...
## $ sym_myalgia : chr [1:82101] "No" "Yes" "Yes" "Yes" ...
## $ sym_losstastesmell : chr [1:82101] NA NA NA NA ...
## $ sym_sorethroat : chr [1:82101] "Yes" "No" "Yes" "Yes" ...
## $ sym_cough : chr [1:82101] "Yes" "Yes" "Yes" "Yes" ...
## $ sym_headache : chr [1:82101] "Yes" "No" NA "Yes" ...
## $ sym_resolved : chr [1:82101] "No, still symptomatic" "No, still symptomatic" "No, still symptomatic" "No, still symptomatic" ...
## $ sym_resolveddt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ contact_household : chr [1:82101] "Yes" "No" NA "No" ...
## $ hospitalized : chr [1:82101] "No" "No" "Yes" NA ...
## $ hosp_admidt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ hosp_dischdt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ died : chr [1:82101] "No" "No" "No" "No" ...
## $ died_covid : chr [1:82101] "No" "No" "No" "No" ...
## $ died_dt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ confirmed_case : chr [1:82101] "Yes" "Yes" "Yes" "Yes" ...
## $ covid_dx : chr [1:82101] "Confirmed" "Confirmed" "Confirmed" "Confirmed" ...
## $ pos_sampledt_FALSE : POSIXct[1:82101], format: "2020-03-22" "2020-02-01" ...
## $ latitude_JITT : num [1:82101] 33.8 33.8 33.7 33.6 34.1 ...
## $ longitude_JITT : num [1:82101] -84.4 -84.4 -84.4 -84.6 -84.3 ...
head(datos)
La base de datos analizada corresponde a un conjunto de registros de
casos de COVID-19 que contienen información demográfica, clínica y
epidemiológica de cada paciente.
En total, el conjunto de datos incluye variables de identificación,
fechas de reporte, características personales, síntomas, hospitalización
y desenlaces clínicos.
Entre las principales variables se destacan:
case_age (edad del paciente),case_gender (género: Male/Female),case_race (raza),case_eth (etnia).reprt_creationdt_FALSE (fecha de reporte del
caso),case_dob_FALSE (fecha de nacimiento),sym_startdt_FALSE (fecha de inicio de síntomas),hosp_admidt_FALSE, hosp_dischdt_FALSE,
died_dt_FALSE (fechas de hospitalización, alta y
fallecimiento).sym_fever, sym_cough,
sym_headache, sym_myalgia,
sym_losstastesmell, sym_sorethroat, entre
otras, que indican la presencia o ausencia de síntomas.hospitalized (estado de hospitalización),died y died_covid (estado de fallecimiento
y causa de muerte),confirmed_case (confirmación del diagnóstico).case_zip (código postal del caso) y las coordenadas
latitude_JITT y longitude_JITT, que permiten
una localización espacial aproximada de los pacientes.En conjunto, la base proporciona una estructura completa para
realizar análisis descriptivos, temporales y espaciales del
COVID-19.
La combinación de información demográfica, clínica y temporal permite
identificar patrones de contagio, grupos de riesgo y tendencias
epidemiológicas, lo que la convierte en un recurso ideal para la
aplicación de herramientas de Big Data y análisis
estadístico.
# Ver estructura general
str(datos)
## tibble [82,101 × 31] (S3: tbl_df/tbl/data.frame)
## $ PID : chr [1:82101] "3a85e6992a5ac52f" "c6b5281d5fc50b96" "53495ad0dca4e22c" "2948a265da0d081b" ...
## $ reprt_creationdt_FALSE: POSIXct[1:82101], format: "2020-03-22" "2020-02-01" ...
## $ case_dob_FALSE : POSIXct[1:82101], format: "2004-11-08" "1964-06-07" ...
## $ case_age : num [1:82101] 16 57 77 57 56 65 47 61 36 42 ...
## $ case_gender : chr [1:82101] "Male" "Male" "Female" "Female" ...
## $ case_race : chr [1:82101] "WHITE" "WHITE" "BLACK" "BLACK" ...
## $ case_eth : chr [1:82101] "NON-HISPANIC/LATINO" "NON-HISPANIC/LATINO" "NON-HISPANIC/LATINO" "NON-HISPANIC/LATINO" ...
## $ case_zip : num [1:82101] 30308 30308 30315 30213 30004 ...
## $ Contact_id : chr [1:82101] "Yes-Symptomatic" "Yes-Symptomatic" "Yes-Symptomatic" "Yes-Symptomatic" ...
## $ sym_startdt_FALSE : POSIXct[1:82101], format: "2020-03-20" "2020-01-28" ...
## $ sym_fever : chr [1:82101] "Yes" "No" "Yes" "No" ...
## $ sym_subjfever : chr [1:82101] "Yes" "No" NA "Yes" ...
## $ sym_myalgia : chr [1:82101] "No" "Yes" "Yes" "Yes" ...
## $ sym_losstastesmell : chr [1:82101] NA NA NA NA ...
## $ sym_sorethroat : chr [1:82101] "Yes" "No" "Yes" "Yes" ...
## $ sym_cough : chr [1:82101] "Yes" "Yes" "Yes" "Yes" ...
## $ sym_headache : chr [1:82101] "Yes" "No" NA "Yes" ...
## $ sym_resolved : chr [1:82101] "No, still symptomatic" "No, still symptomatic" "No, still symptomatic" "No, still symptomatic" ...
## $ sym_resolveddt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ contact_household : chr [1:82101] "Yes" "No" NA "No" ...
## $ hospitalized : chr [1:82101] "No" "No" "Yes" NA ...
## $ hosp_admidt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ hosp_dischdt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ died : chr [1:82101] "No" "No" "No" "No" ...
## $ died_covid : chr [1:82101] "No" "No" "No" "No" ...
## $ died_dt_FALSE : POSIXct[1:82101], format: NA NA ...
## $ confirmed_case : chr [1:82101] "Yes" "Yes" "Yes" "Yes" ...
## $ covid_dx : chr [1:82101] "Confirmed" "Confirmed" "Confirmed" "Confirmed" ...
## $ pos_sampledt_FALSE : POSIXct[1:82101], format: "2020-03-22" "2020-02-01" ...
## $ latitude_JITT : num [1:82101] 33.8 33.8 33.7 33.6 34.1 ...
## $ longitude_JITT : num [1:82101] -84.4 -84.4 -84.4 -84.6 -84.3 ...
# Número de filas y columnas
dim(datos)
## [1] 82101 31
# Nombres de las variables
colnames(datos)
## [1] "PID" "reprt_creationdt_FALSE" "case_dob_FALSE"
## [4] "case_age" "case_gender" "case_race"
## [7] "case_eth" "case_zip" "Contact_id"
## [10] "sym_startdt_FALSE" "sym_fever" "sym_subjfever"
## [13] "sym_myalgia" "sym_losstastesmell" "sym_sorethroat"
## [16] "sym_cough" "sym_headache" "sym_resolved"
## [19] "sym_resolveddt_FALSE" "contact_household" "hospitalized"
## [22] "hosp_admidt_FALSE" "hosp_dischdt_FALSE" "died"
## [25] "died_covid" "died_dt_FALSE" "confirmed_case"
## [28] "covid_dx" "pos_sampledt_FALSE" "latitude_JITT"
## [31] "longitude_JITT"
# Rango de fechas (inicio y fin del registro)
range(datos$reprt_creationdt_FALSE, na.rm = TRUE)
## [1] "2019-12-27 UTC" "2021-07-27 UTC"
# Contar valores faltantes por variable
colSums(is.na(datos))
## PID reprt_creationdt_FALSE case_dob_FALSE
## 0 0 48
## case_age case_gender case_race
## 48 63 2630
## case_eth case_zip Contact_id
## 2574 13 32205
## sym_startdt_FALSE sym_fever sym_subjfever
## 37480 31577 37908
## sym_myalgia sym_losstastesmell sym_sorethroat
## 32137 50724 32241
## sym_cough sym_headache sym_resolved
## 31630 32018 42294
## sym_resolveddt_FALSE contact_household hospitalized
## 65799 36737 32482
## hosp_admidt_FALSE hosp_dischdt_FALSE died
## 77115 78600 36832
## died_covid died_dt_FALSE confirmed_case
## 42302 80394 9
## covid_dx pos_sampledt_FALSE latitude_JITT
## 0 122 94
## longitude_JITT
## 200
# Mostrar las primeras filas para identificar variables
head(datos)
La base de datos utilizada contiene información detallada sobre casos
confirmados de COVID-19, incluyendo variables demográficas, clínicas y
temporales.
Cuenta con registros individuales identificados por un código
(PID) y variables como edad (case_age), género
(case_gender), raza (case_race), etnia
(case_eth) y ubicación (case_zip).
También incluye fechas clave como el reporte del caso
(reprt_creationdt_FALSE), inicio de síntomas
(sym_startdt_FALSE), hospitalización y fallecimiento.
Además, incorpora variables clínicas relacionadas con la presencia de
síntomas (sym_fever, sym_cough,
sym_headache, etc.), el estado de hospitalización
(hospitalized) y el desenlace clínico (died,
confirmed_case).
En conjunto, esta base permite analizar el perfil epidemiológico de los
casos y comprender la evolución y severidad del COVID-19 según grupo de
edad y género.
La base de datos del COVID-19 contiene distintos tipos de información relevante para comprender el comportamiento del virus y las características de las personas registradas:
Información demográfica: incluye variables como
la edad (case_age), el género (case_gender) y
la raza (case_race).
Estas variables permiten describir el perfil poblacional de los casos
reportados y analizar si existen diferencias en el impacto del COVID-19
según grupo de edad, sexo o condición étnica.
Información temporal: las variables de fecha
(reprt_creationdt_FALSE y case_dob_FALSE)
permiten establecer líneas de tiempo para analizar la evolución de los
casos, identificar periodos con mayor número de contagios y observar
tendencias a lo largo del tiempo.
Información identificativa: la variable
PID actúa como un identificador único por individuo,
garantizando que cada registro sea distinto y evitando duplicaciones en
el análisis.
Información epidemiológica o clínica (parcial): aunque esta base no incluye síntomas o hospitalización, su estructura puede integrarse con otras fuentes que contengan variables clínicas (por ejemplo, hospitalización, gravedad o recuperación), lo que permitiría estudiar la relación entre características demográficas y desenlaces médicos.
Relevancia para un análisis descriptivo:
Estos tipos de información son fundamentales para elaborar un
análisis descriptivo porque permiten: - Caracterizar a
la población afectada según variables demográficas.
- Analizar la evolución temporal del virus y sus posibles
patrones.
- Comparar el comportamiento de la pandemia entre diferentes grupos de
edad, género o raza.
- Identificar tendencias y preparar los datos para futuros análisis
predictivos o de correlación.
En conjunto, estos datos proporcionan una visión clara y detallada del contexto poblacional y temporal del COVID-19, lo que los convierte en una base sólida para el estudio exploratorio y visualización de tendencias.
## 1. Perfil demográfico
### Distribución por género, raza y etnia
# Distribución por género
tabla_genero <- datos %>%
count(case_gender) %>%
mutate(prop = round(100 * n / sum(n), 2))
tabla_genero
# Distribución por raza
tabla_raza <- datos %>%
count(case_race) %>%
mutate(prop = round(100 * n / sum(n), 2))
tabla_raza
# Distribución por etnia
tabla_etnia <- datos %>%
count(case_eth) %>%
mutate(prop = round(100 * n / sum(n), 2))
tabla_etnia
El perfil demográfico revela disparidades significativas en la distribución de casos por género, raza y etnia, lo que podría indicar diferencias en la exposición, acceso a pruebas, o vulnerabilidad biológica entre estos grupos poblacionales.
datos <- datos %>%
mutate(age_group = cut(case_age,
breaks = c(0, 17, 29, 44, 64, Inf),
labels = c("0–17", "18–29", "30–44", "45–64", "65+"),
right = TRUE))
# Ver las primeras filas de la nueva variable
head(datos$age_group)
## [1] 0–17 45–64 65+ 45–64 45–64 65+
## Levels: 0–17 18–29 30–44 45–64 65+
# O mirar un resumen de los grupos de edad
table(datos$age_group)
##
## 0–17 18–29 30–44 45–64 65+
## 7871 20656 22685 21495 9207
La distribución etaria muestra que el COVID-19 afectó predominantemente a la población económicamente activa, con los grupos de 18-44 años concentrando la mayor carga de casos, mientras que los extremos de edad presentaron menores proporciones de contagio reportado.
tabla_edad_genero <- datos %>%
count(age_group, case_gender) %>%
group_by(age_group) %>%
mutate(prop = round(100 * n / sum(n), 2))
tabla_edad_genero
Grupo 0-17 años: - Distribución casi equitativa entre mujeres (50.13%) y hombres (49.28%) - Proporciones mínimas de género desconocido (0.47%) y sin información (0.11%) - Indica una afectación similar por género en la población infantil y adolescente
Grupo 18-29 años: - Predominio claro de mujeres (54.35%) sobre hombres (45.18%) - Las mujeres representan casi 10 puntos porcentuales más que los hombres en este grupo - Podría reflejar mayor exposición laboral o social en mujeres jóvenes
Grupo 30-44 años: - Continúa el predominio de mujeres (52.61%) sobre hombres (46.90%) - Patrón similar al grupo anterior, aunque con diferencia menos marcada - Este grupo presenta la segunda mayor proporción de casos femeninos
Existe un patrón consistente de mayor afectación en mujeres, especialmente en los grupos de edad productiva (18-44 años), lo que podría relacionarse con roles sociales, ocupacionales o diferencias en la búsqueda de atención médica entre géneros.
# Seleccionar solo las columnas que comienzan con "sym_"
sintomas <- datos %>%
select(starts_with("sym_")) %>%
select(where(is.character))
# Calcular el porcentaje de respuestas "Yes"
prop_sintomas <- sapply(sintomas, function(x) {
sum(x == "Yes", na.rm = TRUE) / sum(!is.na(x)) * 100
})
# Ordenar de mayor a menor frecuencia
prop_sintomas <- sort(prop_sintomas, decreasing = TRUE)
prop_sintomas
## sym_cough sym_headache sym_losstastesmell sym_myalgia
## 43.47645 43.27816 40.58387 39.09415
## sym_fever sym_subjfever sym_sorethroat sym_resolved
## 29.94023 28.76474 25.10229 0.00000
Interpretación:
Los resultados muestran que los síntomas más frecuentes entre los casos
reportados son la tos (43.5%), el dolor de
cabeza (43.3%) y la pérdida del gusto u olfato
(40.6%).
También se observan porcentajes importantes de dolor muscular
(39.1%) y fiebre (29.9%), los cuales son
característicos del cuadro clínico del COVID-19.
Estos hallazgos reflejan que la mayoría de los pacientes presentó
manifestaciones respiratorias y neurosensoriales típicas de la
enfermedad.
Por su parte, síntomas como dolor de garganta aparecen
con menor frecuencia, mientras que el indicador
sym_resolved muestra 0% debido a que la base no
contiene registros confirmados de recuperación.
En conjunto, esta información permite identificar los síntomas
predominantes y su relevancia en el análisis descriptivo.
# Mostrar los 7 síntomas más frecuentes
top_sintomas <- head(prop_sintomas, 7)
top_sintomas
## sym_cough sym_headache sym_losstastesmell sym_myalgia
## 43.47645 43.27816 40.58387 39.09415
## sym_fever sym_subjfever sym_sorethroat
## 29.94023 28.76474 25.10229
Interpretación:
El análisis muestra que los síntomas más frecuentes entre los casos
registrados son la tos (43.5%), el dolor de
cabeza (43.3%), la pérdida del gusto u olfato
(40.6%) y el dolor muscular (39.1%).
Estos resultados coinciden con las manifestaciones clínicas más comunes
del COVID-19 descritas por la OMS.
La fiebre y la sensación subjetiva de
fiebre aparecen en alrededor del 30% de los casos, mientras que
el dolor de garganta se presenta en una proporción
menor (25.1%).
En conjunto, estos resultados confirman que la mayoría de los pacientes presentaron síntomas respiratorios y neurológicos, lo que refuerza la validez clínica de la base de datos para realizar análisis descriptivos posteriores.
# Crear data frame con los resultados
df_sintomas <- data.frame(
Sintoma = names(top_sintomas),
Porcentaje = top_sintomas
)
# Gráfico de barras con los nombres originales de la base
ggplot(df_sintomas, aes(x = reorder(Sintoma, Porcentaje), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(
title = "Síntomas más frecuentes en los casos de COVID-19",
x = "Síntoma ",
y = "Porcentaje de respuestas 'Yes'"
) +
theme_minimal(base_size = 13)
Interpretación:
El análisis descriptivo de las variables relacionadas con síntomas
(sym_) revela que los más reportados fueron:
- sym_cough (tos) con un 43.5%,
- sym_headache (dolor de cabeza) con un
43.3%,
- sym_losstastesmell (pérdida del gusto u
olfato) con un 40.6%,
- sym_myalgia (dolor muscular) con un
39.1%,
- sym_fever (fiebre) con un 29.9%,
- sym_subjfever (sensación de fiebre) con
un 28.8%,
- y sym_sorethroat (dolor de garganta) con
un 25.1%.
Estos resultados muestran que la mayoría de los casos presentaron
síntomas respiratorios y neuromusculares, lo que concuerda con la
sintomatología típica del COVID-19 reportada por la Organización Mundial
de la Salud.
La prevalencia elevada de tos y dolor de cabeza sugiere que estos
indicadores son clave para la detección temprana, mientras que la
pérdida del gusto u olfato refuerza su valor como síntoma distintivo de
la enfermedad.
colnames(datos)
## [1] "PID" "reprt_creationdt_FALSE" "case_dob_FALSE"
## [4] "case_age" "case_gender" "case_race"
## [7] "case_eth" "case_zip" "Contact_id"
## [10] "sym_startdt_FALSE" "sym_fever" "sym_subjfever"
## [13] "sym_myalgia" "sym_losstastesmell" "sym_sorethroat"
## [16] "sym_cough" "sym_headache" "sym_resolved"
## [19] "sym_resolveddt_FALSE" "contact_household" "hospitalized"
## [22] "hosp_admidt_FALSE" "hosp_dischdt_FALSE" "died"
## [25] "died_covid" "died_dt_FALSE" "confirmed_case"
## [28] "covid_dx" "pos_sampledt_FALSE" "latitude_JITT"
## [31] "longitude_JITT" "age_group"
## Tasa general de hospitalización
tasa_hosp <- datos %>%
filter(!is.na(hospitalized)) %>%
summarise(
tasa_hosp = round(mean(hospitalized == "Yes") * 100, 2)
)
tasa_hosp
Interpretación:
El análisis muestra que aproximadamente el 10.68% de
los casos de COVID-19 incluidos en la base de datos requirieron
hospitalización (hospitalized = Yes).
Esto sugiere que la mayoría de los pacientes (alrededor del 89%)
presentaron cuadros leves o moderados que no necesitaron ingreso
hospitalario.
Este resultado es consistente con la literatura médica, donde solo una
proporción reducida de casos presenta complicaciones graves que
requieren atención hospitalaria.
## Tasa general de letalidad (CFR)
tasa_cfr <- datos %>%
filter(confirmed_case == "Yes", !is.na(died)) %>%
summarise(
tasa_cfr = round(mean(died == "Yes") * 100, 2)
)
tasa_cfr
Interpretación:
La tasa de letalidad (CFR) obtenida fue de 3.76%, lo
que indica que aproximadamente 4 de cada 100 personas con
COVID-19 confirmadas fallecieron.
Este valor se encuentra dentro del rango esperado para la pandemia en su
fase inicial, cuando los sistemas de salud enfrentaban alta demanda y
limitaciones de tratamiento.
El resultado refleja que, aunque la mayoría de los casos confirmados
logró recuperarse, el virus tuvo un impacto considerable en la
mortalidad, especialmente entre los grupos de edad avanzada o con
condiciones de riesgo preexistentes.
##. Hospitalización por grupo de edad
tasa_hosp_edad <- datos %>%
filter(!is.na(hospitalized)) %>%
group_by(age_group) %>%
summarise(tasa_hosp = round(mean(hospitalized == "Yes") * 100, 2))
tasa_hosp_edad
Interpretación:
La tasa de hospitalización varía significativamente según el grupo de
edad.
Los resultados muestran que los pacientes jóvenes (0–17
años) presentaron la menor proporción de hospitalizaciones
(1.76%), seguidos por el grupo de 18–29 años (3.08%) y
30–44 años (6.30%).
A partir de los 45 años, la proporción de hospitalizaciones aumenta de forma notable: el grupo de 45–64 años registra una tasa de 13.66%, mientras que los mayores de 65 años alcanzan un 38.47%, lo que indica una clara relación entre la edad y la severidad clínica del COVID-19.
Estos resultados son coherentes con la evidencia epidemiológica
mundial, donde las personas mayores presentan un mayor riesgo de
complicaciones y hospitalización.
El valor observado en el grupo “NA” (12.73%) corresponde a registros sin
información de edad, que podrían incluir casos atípicos o datos
incompletos.
##. Letalidad (CFR) por grupo de edad
tasa_cfr_edad <- datos %>%
filter(confirmed_case == "Yes", !is.na(died)) %>%
group_by(age_group) %>%
summarise(tasa_cfr = round(mean(died == "Yes") * 100, 2))
tasa_cfr_edad
Interpretación:
La tasa de letalidad (CFR) presenta un incremento pronunciado con la
edad.
Los grupos jóvenes (0–17 y 18–29 años) muestran una
mortalidad prácticamente nula, con tasas de 0.04% y
0.12%, respectivamente.
En los adultos de 30–44 años, la letalidad se mantiene
baja (0.43%), pero a partir del grupo de 45–64
años aumenta de forma considerable
(2.58%).
El cambio más notable se observa en los mayores de 65
años, donde la tasa de letalidad alcanza el
25.24%, indicando que aproximadamente uno de
cada cuatro pacientes en este grupo etario falleció tras el
contagio.
Este patrón confirma que la edad es un factor determinante en la
gravedad y el desenlace clínico del COVID-19, tal como han documentado
múltiples estudios epidemiológicos.
El grupo “NA” presenta una tasa de 0.00%, lo cual se debe a registros
sin información de edad o con datos incompletos.
## 5. Gráficos
# Gráfico de hospitalización
ggplot(tasa_hosp_edad, aes(x = age_group, y = tasa_hosp)) +
geom_col(fill = "steelblue") +
labs(
title = "Tasa de hospitalización por grupo de edad",
x = "Grupo de edad",
y = "Porcentaje hospitalizado ('Yes')"
) +
theme_minimal(base_size = 13)
Interpretación:
El gráfico muestra una relación directa entre la edad y la probabilidad
de hospitalización por COVID-19.
Se observa que los grupos jóvenes (0–17 y 18–29 años)
presentan tasas muy bajas, menores al 5%, mientras que la proporción
aumenta progresivamente en los grupos de mayor edad.
El grupo de 65 años o más presenta la tasa más alta
(38.47%), evidenciando una clara vulnerabilidad clínica
frente al virus.
Esta tendencia confirma que la edad es un factor determinante en la
severidad de los casos y la necesidad de atención hospitalaria.
# Gráfico de letalidad
ggplot(tasa_cfr_edad, aes(x = age_group, y = tasa_cfr)) +
geom_col(fill = "firebrick") +
labs(
title = "Tasa de letalidad (CFR) por grupo de edad",
x = "Grupo de edad",
y = "Porcentaje de fallecidos ('Yes')"
) +
theme_minimal(base_size = 13)
Interpretación:
El gráfico evidencia una relación directa entre la edad y la tasa de
letalidad por COVID-19.
Los grupos jóvenes (0–17, 18–29 y 30–44 años) presentan
tasas de mortalidad prácticamente nulas (menores al 0.5%), lo que
sugiere una alta capacidad de recuperación.
En cambio, los grupos de 45–64 años comienzan a mostrar
un incremento en la letalidad (2.58%), y los
mayores de 65 años alcanzan un valor alarmante del
25.24%, es decir, aproximadamente uno de cada
cuatro pacientes fallece.
Este comportamiento confirma que la edad es el principal factor de
riesgo asociado a la mortalidad por COVID-19, en concordancia con los
hallazgos epidemiológicos internacionales.
El grupo “NA” no presenta fallecimientos, lo que se debe a la ausencia
de datos de edad en esos registros.
## 1. Casos diarios y tendencia
# Convertir la fecha al formato correcto (si no lo está)
datos$reprt_creationdt_FALSE <- as.Date(datos$reprt_creationdt_FALSE)
# Contar casos por día
casos_diarios <- datos %>%
group_by(reprt_creationdt_FALSE) %>%
summarise(casos = n()) %>%
arrange(reprt_creationdt_FALSE)
# Calcular media móvil de 7 días
casos_diarios <- casos_diarios %>%
mutate(media_movil_7d = zoo::rollmean(casos, 7, fill = NA, align = "right"))
# Gráfico de barras con línea de tendencia
ggplot(casos_diarios, aes(x = reprt_creationdt_FALSE, y = casos)) +
geom_col(fill = "steelblue") +
geom_line(aes(y = media_movil_7d), color = "red", size = 1) +
labs(
title = "Casos diarios de COVID-19 y tendencia (media móvil de 7 días)",
x = "Fecha de reporte",
y = "Número de casos diarios"
) +
theme_minimal(base_size = 13)
## 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.
## Warning: Removed 6 rows containing missing values or values outside the scale range
## (`geom_line()`).
Interpretación:
El gráfico muestra la evolución de los casos diarios de COVID-19 según
la fecha de reporte (reprt_creationdt_FALSE).
Se observa una tendencia con fluctuaciones periódicas,
donde la línea roja (media móvil de 7 días) suaviza el
comportamiento diario, permitiendo identificar periodos de
aumento y disminución en el número de casos.
Durante los picos más altos, se evidencia un incremento sostenido de
contagios, seguido de etapas de descenso, lo que refleja la dinámica
típica de las olas epidémicas.
## 2. Distribución demográfica: casos por edad y género
# Eliminar registros sin género o grupo de edad
datos_filtrados <- datos %>%
filter(!is.na(age_group), !is.na(case_gender))
# Gráfico de barras apiladas
ggplot(datos_filtrados, aes(x = age_group, fill = case_gender)) +
geom_bar(position = "dodge") +
labs(
title = "Distribución de casos de COVID-19 por grupo de edad y género",
x = "Grupo de edad",
y = "Número de casos",
fill = "Género"
) +
theme_minimal(base_size = 13)
Interpretación:
El gráfico muestra la distribución de los casos de COVID-19 por grupo de
edad y género.
Se observa que los grupos de 30–44 años y 45–64 años
concentran la mayor cantidad de casos registrados, mientras que los
jóvenes (0–17 y 18–29 años) presentan una participación
menor.
En cuanto al género, los casos masculinos
(case_gender = Male) son ligeramente más numerosos
que los femeninos, aunque la diferencia no es tan marcada en todos los
grupos etarios.
Esto sugiere que la población adulta en edad laboral fue la más afectada
durante el periodo analizado.
# Unir las dos tablas (hospitalización y letalidad)
tasa_total <- merge(tasa_hosp_edad, tasa_cfr_edad, by = "age_group", all = TRUE)
# Convertir a formato largo para graficar con ggplot
tasa_long <- tasa_total %>%
pivot_longer(cols = c("tasa_hosp", "tasa_cfr"),
names_to = "Indicador",
values_to = "Porcentaje")
# Gráfico de líneas comparativo
ggplot(tasa_long, aes(x = age_group, y = Porcentaje, color = Indicador, group = Indicador)) +
geom_line(size = 1.2) +
geom_point(size = 3) +
labs(
title = "Tasa de hospitalización y letalidad (CFR) por grupo etario",
x = "Grupo de edad",
y = "Porcentaje (%)",
color = "Indicador"
) +
scale_color_manual(values = c("tasa_hosp" = "steelblue", "tasa_cfr" = "firebrick"),
labels = c("Hospitalización", "Letalidad (CFR)")) +
theme_minimal(base_size = 13)
Interpretación:
El gráfico compara las tasas de hospitalización y letalidad (CFR) por
grupo de edad.
Se observa un incremento progresivo en ambas variables conforme
aumenta la edad, destacando una diferencia marcada en el grupo
de 65 años o más, donde la tasa de hospitalización
supera el 38% y la de letalidad alcanza el 25%.
Esto evidencia que la edad es un factor crítico en la gravedad y
desenlace clínico del COVID-19, ya que los adultos mayores
presentan una mayor probabilidad tanto de ser hospitalizados como de
fallecer.
En contraste, los grupos más jóvenes presentan tasas bajas en ambos
indicadores, reflejando una menor vulnerabilidad ante el virus.
## 4. Síntomas principales por grupo etario (versión corregida)
# 1. Asegurar que existe la variable age_group
if (!"age_group" %in% names(datos)) {
datos <- datos %>%
mutate(age_group = cut(case_age,
breaks = c(0, 17, 29, 44, 64, Inf),
labels = c("0–17", "18–29", "30–44", "45–64", "65+"),
right = TRUE))
}
# 2. Seleccionar columnas de síntomas (solo tipo texto)
sintomas_cols <- datos %>%
select(age_group, starts_with("sym_")) %>%
mutate(across(starts_with("sym_"), as.character)) %>%
filter(!is.na(age_group))
# 3. Calcular prevalencia (% "Yes") por grupo etario
sintomas_group <- sintomas_cols %>%
group_by(age_group) %>%
summarise(across(starts_with("sym_"),
~ round(mean(.x == "Yes", na.rm = TRUE) * 100, 2)))
# 4. Convertir a formato largo
sintomas_long <- sintomas_group %>%
pivot_longer(cols = -age_group,
names_to = "Sintoma",
values_to = "Porcentaje")
# 5. Crear heatmap
ggplot(sintomas_long, aes(x = Sintoma, y = age_group, fill = Porcentaje)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "lightblue", high = "firebrick") +
labs(
title = "Prevalencia de síntomas por grupo etario",
x = "Síntoma (nombre original de la base)",
y = "Grupo de edad",
fill = "% de 'Yes'"
) +
theme_minimal(base_size = 13) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Interpretación:
El mapa de calor muestra la prevalencia de síntomas por grupo
etario.
Los síntomas más comunes en casi todos los grupos son la tos
(sym_cough), el dolor de cabeza
(sym_headache) y la pérdida del
gusto/olfato (sym_losstastesmell).
En los grupos de mayor edad se observan mayores porcentajes de
fiebre (sym_fever) y dolor
muscular (sym_myalgia), mientras que los jóvenes
presentan una menor intensidad general de síntomas.
Esto sugiere que los adultos y adultos mayores experimentaron los
cuadros más severos durante el periodo analizado.