---
title: "Estadísticas de Salud"
author: "Paula Ávila, Marilyn Mateus, Leandro Reyes"
date: 2026-09-2
format:
html:
theme:
light: flatly
dark: darkly
toc: true
number-sections: true
code-fold: true
code-tools: true
code-copy: true
lang: es
editor_options:
chunk_output_type: console
---
<style>
h1, h2, h3, h4, h5, h6 {
color: #17365D;
}
</style>
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Información general sobre la base de datos:
## ¿De dónde provienen?
Fuente de los datos: Kaggle, conjunto de datos Estadísticas de Salud Global, publicado/atribuido a MALAIARASUGRAJ, Recuperado del 10 de agosto de 2026.
## ¿A qué población o fenómeno corresponden?
La población de referencia corresponde a los registros de indicadores de salud de personas pertenecientes a diferentes países y grupos de edad, relacionados con diversas enfermedades y sus características epidemiológicas, económicas, de atención de salud.
El fenómeno de estudio corresponde al comportamiento de las enfermedades y de sus principales indicadores de salud, como las tasas de prevalencia, incidencia, mortalidad y recuperación, así como su posible relación con factores demográficos, socioeconómicos
## ¿Por qué nos interesa?
El análisis de este conjunto de datos resulta de interés porque permite explorar el comportamiento de diferentes indicadores de salud y observar posibles asociaciones entre factores demográficos, epidemiológicos, socioeconómicos y relacionados con la atención en salud. A partir de esta información, se plantean los siguientes objetivos:
- Evaluar la relación entre la tasa de mortalidad y el grupo de edad afectado, con el propósito de identificar las poblaciones con mayor riesgo frente a las distintas enfermedades.
- Analizar la relación entre el ingreso per cápita y el acceso a la atención médica, para determinar si existen asociaciones entre el nivel económico de los países y la disponibilidad de los servicios de salud.
- Analizar la relación entre la tasa de incidencia y la tasa de mortalidad, con el propósito de determinar si una mayor incidencia de las enfermedades se asocia con mayores tasas de mortalidad.
- Analizar la relación entre el costo promedio del tratamiento y la tasa de recuperación, con el propósito de determinar si el costo de los tratamientos se asocia con mejores resultados de recuperación.
# Carga del conjunto de datos:
```{r}
datos <- read.csv(
"Global_Salud.csv",
sep = ";"
)
datos <- datos[, 1:11]
names(datos) <- c(
"Country",
"Disease_Category",
"Prevalence_Rate",
"Incidence_Rate",
"Mortality_Rate",
"Age_Group",
"Healthcare_Access",
"Treatment_Type",
"Average_Treatment_Cost",
"Recovery_Rate",
"Per_Capita_Income"
)
```
Para comprobar que la lectura del conjunto de datos se realizó correctamente, se
visualizaron sus primeras filas mediante la función `head()`.
```{r}
knitr::kable(
head(datos),
caption = "Primeras seis filas del conjunto de datos"
)
```
# Exploración inicial del conjunto de datos:
Usamos la funcion "str()" para dar un vistazo inicial a la estructura de los datos. Esta función permite identificar el
número de observaciones y variables, los nombres de las columnas y el tipo de dato de cada variable:
```{r}
str(datos)
```
Para facilitar la visualización de los tipos de datos de cada variable, se
presenta adicionalmente la siguiente tabla:
```{r}
estructura <- data.frame(
Variable = names(datos),
Tipo = sapply(datos, class),
row.names = NULL
)
knitr::kable(
estructura,
caption = "Estructura y tipo de dato de las variables"
)
```
Posteriormente, se utiliza la función `summary()` para obtener un resumen general del conjunto de datos.
```{r}
resumen <- summary(datos)
```
### Resumen de las variables cuantitativas
```{r}
variables_numericas <- sapply(datos, is.numeric)
resumen_numerico <- do.call(
rbind,
lapply(datos[, variables_numericas, drop = FALSE], summary)
)
knitr::kable(
resumen_numerico,
digits = 2,
col.names = c(
"Mínimo",
"1er cuartil",
"Mediana",
"Media",
"3er cuartil",
"Máximo"
),
caption = "Resultados de summary() para las variables cuantitativas"
)
```
En la tabla se pueden observar los resultados de diferentes medidas descriptivas, como el mínimo, el primer cuartil, la mediana, la media, el tercer cuartil y el máximo. En conjunto, estos valores permiten obtener un resumen general de las principales características estadísticas de las variables cuantitativas del conjunto de datos.
A primera vista, llama especialmente la atención la variable correspondiente al costo promedio del tratamiento, debido a la diferencia entre su valor mínimo de 100 USD y su valor máximo de 50.000 USD. Esta amplitud muestra que existe una variación considerable en los costos registrados.
# Dimensión del conjunto
```{r}
dim(datos)
```
```{r}
nrow(datos)
```
```{r}
ncol(datos)
```
```{r}
class(datos)
```
Se determinó que el conjunto está compuesto por 1.000.000 de registros (filas) y 11 variables (columnas). Podemos afirmar que es un data.frame, encontramos que la mayoría de variables fueron leídas por R como character, cuando esperabamos tener más de tipo numeric
# Clasificación de variables
```{r}
names(datos)
```
*"Country"*
Cualitativa nominal - Nombre del país. Es cualitativa porque es una cualidad y nominal porque no tiene orden.
*"Disease_Category"*
Cualitativa nominal - La categoría de la enfermedad (ej: infecciosa)Es cualitativa nominal porque es una cualidad sin orden jerárquico.
*"Prevalence_Rate"*
Cuantitativa continua - Porcentaje de la población afectada. Es cuantitativa continua porque es una cantidad medible con decimales.
*"Incidence_Rate"*
Cuantitativa continua - Porcentaje de casos nuevos. Es cuantitativa continua porque es una tasa con decimales.
*"Mortality_Rate"*
Cuantitativa continua - Porcentaje que fallece. Es cuantitativa continua porque es una tasa medible con decimales.
*"Age_Group"*
Cualitativa ordinal - El rango de edad más afectado. Es cualitativa ordinal porque es categoría pero sí tiene orden natural de menor a mayor.
*"Healthcare_Access"*
Cuantitativa continua - Porcentaje con acceso a atención. Es cuantitativa continua porque es un porcentaje con decimales.
*"Treatment_Type"*
Cualitativa nominal - El método principal (medicamentos, cirugía). Es cualitativa nominal porque es una cualidad sin orden.
*"Average_Treatment_Cost"*
Cuantitativa continua - Costo promedio en USD. Es cuantitativa continua porque es dinero que toma decimales.
*"Recovery_Rate"*
Cuantitativa continua - Porcentaje que se recupera. Es cuantitativa continua porque es una tasa con decimales.
*"Per_Capita_Income"*
Cuantitativa continua - Ingreso promedio por persona. Es cuantitativa continua porque es un promedio monetario con decimales.
# Ajuste de variables
## 6. Ajuste de tipos de variables
```{r}
nums <- c("Prevalence_Rate","Incidence_Rate","Mortality_Rate","Healthcare_Access","Average_Treatment_Cost","Recovery_Rate","Per_Capita_Income")
for(v in nums){
if(v %in% names(datos)) datos[[v]] <- as.numeric(datos[[v]])
}
for(v in nums){
if(v %in% names(datos)) datos[[v]][is.na(datos[[v]])] <- median(datos[[v]], na.rm=TRUE)
}
datos$Country <- as.factor(datos$Country)
datos$Disease_Category <- as.factor(datos$Disease_Category)
datos$Treatment_Type <- as.factor(datos$Treatment_Type)
datos$Age_Group <- factor(datos$Age_Group, ordered = TRUE)
```
Verificamos las variables cambiadas.
```{r}
sapply(datos, class)
summary(datos)
```
Inicialmente las variables **`Country`**, **`Disease_Category`**, **`Age_Group`** y **`Treatment_Type`** estaban como **`character`**. Tras la conversión, se confirmaron como **`factor`** y **`ordered factor`** DEBIDO A QUE SON CATEGORÍAS en el caso de **`Age_Group`**. Las variables cuantitativas como **`Prevalence_Rate`**, **`Incidence_Rate`**, **`Mortality_Rate`**, **`Healthcare_Access`**, **`Average_Treatment_Cost`**, **`Recovery_Rate`** y **`Per_Capita_Income`** quedaron como **`numeric`**.
# Análisis univariado
## 7. Análisis univariado
### Variables cualitativas
Para las variables cualitativas (`Country`, `Disease_Category`, `Age_Group` y `Treatment_Type`) se construyen tablas de frecuencia absoluta con `table()` y de frecuencia relativa con `prop.table()`, acompañadas de gráficos de barras y de torta.
```{r}
tabla_country <- table(datos$Country)
prop_country <- round(prop.table(tabla_country) * 100, 2)
knitr::kable(
data.frame(
Pais = names(tabla_country),
Frecuencia = as.vector(tabla_country),
Porcentaje = as.vector(prop_country)
),
caption = "Distribución de frecuencias de Country"
)
```
```{r, fig.width=9, fig.height=5}
par(mar = c(8, 4, 3, 1))
barplot(
sort(tabla_country, decreasing = TRUE),
las = 2,
col = "#4F81BD",
main = "Frecuencia de registros por país",
ylab = "Frecuencia"
)
```
```{r}
tabla_disease <- table(datos$Disease_Category)
prop_disease <- round(prop.table(tabla_disease) * 100, 2)
knitr::kable(
data.frame(
Categoria = names(tabla_disease),
Frecuencia = as.vector(tabla_disease),
Porcentaje = as.vector(prop_disease)
),
caption = "Distribución de frecuencias de Disease_Category"
)
```
```{r, fig.width=8, fig.height=5}
par(mar = c(8, 4, 3, 1))
barplot(
sort(tabla_disease, decreasing = TRUE),
las = 2,
col = "#C0504D",
main = "Frecuencia por categoría de enfermedad",
ylab = "Frecuencia"
)
```
```{r}
tabla_age <- table(datos$Age_Group)
prop_age <- round(prop.table(tabla_age) * 100, 2)
knitr::kable(
data.frame(
Grupo_Edad = names(tabla_age),
Frecuencia = as.vector(tabla_age),
Porcentaje = as.vector(prop_age)
),
caption = "Distribución de frecuencias de Age_Group"
)
```
```{r, fig.width=5, fig.height=5}
pie(
tabla_age,
main = "Distribución por grupo de edad",
col = c("#9BBB59", "#8064A2", "#4BACC6", "#F79646")
)
```
```{r}
tabla_treat <- table(datos$Treatment_Type)
prop_treat <- round(prop.table(tabla_treat) * 100, 2)
knitr::kable(
data.frame(
Tratamiento = names(tabla_treat),
Frecuencia = as.vector(tabla_treat),
Porcentaje = as.vector(prop_treat)
),
caption = "Distribución de frecuencias de Treatment_Type"
)
```
```{r, fig.width=5, fig.height=5}
pie(
tabla_treat,
main = "Distribución por tipo de tratamiento",
col = c("#4F81BD", "#C0504D", "#9BBB59", "#8064A2")
)
```
**Interpretación de las variables cualitativas.** `Country` está compuesta por 20 países, cada uno con aproximadamente 50.000 registros (cerca del 5 % del total cada uno), por lo que la muestra está perfectamente balanceada entre países y ningún país domina el conjunto de datos. `Disease_Category` agrupa 11 categorías de enfermedad, todas con una participación muy cercana al 9-9,1 % del total; no hay una categoría de enfermedad claramente predominante. `Age_Group` y `Treatment_Type` presentan cada una 4 categorías con una distribución prácticamente uniforme (cerca del 25 % cada una). En conjunto, las cuatro variables cualitativas muestran una distribución equilibrada y sin categorías dominantes, lo cual sugiere que el conjunto de datos fue construido (o muestreado) de forma balanceada por diseño, y no refleja necesariamente la distribución real de estas categorías en el mundo.
### Variables cuantitativas
```{r}
medidas <- data.frame(
Variable = nums,
Media = sapply(datos[nums], mean),
Mediana = sapply(datos[nums], median),
Desv_Estandar = sapply(datos[nums], sd),
Varianza = sapply(datos[nums], var),
Minimo = sapply(datos[nums], min),
Maximo = sapply(datos[nums], max)
)
knitr::kable(
medidas,
digits = 2,
row.names = FALSE,
caption = "Medidas de tendencia central y de dispersión - variables cuantitativas"
)
```
```{r, fig.width=10, fig.height=8}
par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (v in nums) {
hist(
datos[[v]],
main = paste("Histograma de", v),
xlab = v,
col = "#4F81BD",
border = "white"
)
}
```
```{r, fig.width=10, fig.height=8}
par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (v in nums) {
boxplot(
datos[[v]],
main = paste("Diagrama de caja de", v),
col = "#F79646",
horizontal = TRUE
)
}
```
**Interpretación de las variables cuantitativas.** Al comparar la media con la mediana de cada variable se observa que ambas son prácticamente idénticas en los siete casos (por ejemplo, `Prevalence_Rate` tiene media 10,05 y mediana 10,04; `Average_Treatment_Cost` tiene media 25.010,31 y mediana 24.980), lo cual, junto con la forma de los histogramas, indica que ninguna variable cuantitativa presenta asimetría relevante: todas se distribuyen de manera aproximadamente uniforme entre su mínimo y su máximo (por ejemplo, `Prevalence_Rate` entre 0,1 % y 20 %, `Healthcare_Access` y `Recovery_Rate` entre 50 % y 100 %, `Per_Capita_Income` entre 500 y 100.000 USD). Los diagramas de caja son consistentes con esta lectura: las cajas son simétricas, la mediana queda centrada y prácticamente no se observan valores atípicos, ya que los datos no se concentran alrededor de un valor central sino que están repartidos de forma pareja en todo su rango. El coeficiente de variación es moderado en las tasas de prevalencia, incidencia, mortalidad, costo de tratamiento e ingreso per cápita (entre 19 % y 58 % aproximadamente), lo que confirma una dispersión considerable, coherente con distribuciones uniformes y no con datos concentrados alrededor de la media.
# Análisis bivariado
## 8. Análisis bivariado
### Dos variables cualitativas: Disease_Category vs. Age_Group
```{r}
tabla_cont <- table(datos$Disease_Category, datos$Age_Group)
knitr::kable(
tabla_cont,
caption = "Tabla de contingencia: Disease_Category x Age_Group (frecuencias)"
)
```
```{r}
tabla_cont_prop <- round(prop.table(tabla_cont, margin = 1) * 100, 1)
knitr::kable(
tabla_cont_prop,
caption = "Tabla de contingencia: Disease_Category x Age_Group (% por fila)"
)
```
```{r, fig.width=9, fig.height=5}
par(mar = c(8, 4, 3, 1))
barplot(
t(tabla_cont_prop),
beside = TRUE,
las = 2,
col = c("#4F81BD", "#C0504D", "#9BBB59", "#8064A2"),
legend.text = TRUE,
args.legend = list(x = "top", ncol = 4, cex = 0.7),
main = "Distribución de grupo de edad dentro de cada categoría de enfermedad (%)"
)
```
### Variable cuantitativa vs. categórica: Mortality_Rate y Recovery_Rate según grupo/tratamiento
```{r, fig.width=7, fig.height=5}
boxplot(
Mortality_Rate ~ Age_Group,
data = datos,
col = "#F79646",
main = "Tasa de mortalidad según grupo de edad",
xlab = "Grupo de edad",
ylab = "Mortality Rate (%)"
)
```
```{r, fig.width=7, fig.height=5}
boxplot(
Recovery_Rate ~ Treatment_Type,
data = datos,
col = "#9BBB59",
main = "Tasa de recuperación según tipo de tratamiento",
xlab = "Tipo de tratamiento",
ylab = "Recovery Rate (%)"
)
```
### Dos variables cuantitativas
Dado que el conjunto de datos tiene 1.000.000 de registros, graficar todos los puntos generaría un exceso de sobreposición (*overplotting*) que dificultaría la lectura visual. Por esto, para los diagramas de dispersión se toma una muestra aleatoria de 5.000 observaciones, la cual conserva la estructura general de la relación entre las variables.
```{r}
set.seed(123)
muestra <- datos[sample(nrow(datos), 5000), ]
```
```{r, fig.width=6, fig.height=5}
plot(
muestra$Incidence_Rate, muestra$Mortality_Rate,
pch = 20, col = rgb(0.31, 0.51, 0.74, 0.4),
main = "Incidence Rate vs. Mortality Rate",
xlab = "Incidence Rate (%)", ylab = "Mortality Rate (%)"
)
abline(lm(Mortality_Rate ~ Incidence_Rate, data = muestra), col = "red", lwd = 2)
```
```{r, fig.width=6, fig.height=5}
plot(
muestra$Average_Treatment_Cost, muestra$Recovery_Rate,
pch = 20, col = rgb(0.75, 0.31, 0.30, 0.4),
main = "Average Treatment Cost vs. Recovery Rate",
xlab = "Average Treatment Cost (USD)", ylab = "Recovery Rate (%)"
)
abline(lm(Recovery_Rate ~ Average_Treatment_Cost, data = muestra), col = "red", lwd = 2)
```
```{r, fig.width=6, fig.height=5}
plot(
muestra$Per_Capita_Income, muestra$Healthcare_Access,
pch = 20, col = rgb(0.61, 0.35, 0.64, 0.4),
main = "Per Capita Income vs. Healthcare Access",
xlab = "Per Capita Income (USD)", ylab = "Healthcare Access (%)"
)
abline(lm(Healthcare_Access ~ Per_Capita_Income, data = muestra), col = "red", lwd = 2)
```
**Interpretación del análisis bivariado.** En la tabla de contingencia, el porcentaje de cada grupo de edad dentro de cada categoría de enfermedad se mantiene siempre muy cerca del 25 %, sin importar la enfermedad que se observe; es decir, no hay ninguna categoría de enfermedad que esté asociada de forma particular a un grupo de edad específico. De igual manera, la tasa de mortalidad promedio es prácticamente idéntica entre los cuatro grupos de edad (alrededor de 5,05 % en todos los casos, con desviaciones estándar muy similares), por lo que **no se observa evidencia, en estos datos, de que el grupo de edad esté relacionado con un mayor riesgo de mortalidad** (lo cual contradice la hipótesis planteada en el primer objetivo). La tasa de recuperación tampoco varía de forma relevante entre tipos de tratamiento (los cuatro promedios rondan 74,5 %). En los diagramas de dispersión, las nubes de puntos se ven completamente dispersas y sin ninguna tendencia visible, y las rectas de regresión son prácticamente horizontales: no hay una relación apreciable entre incidencia y mortalidad, entre el costo del tratamiento y la recuperación, ni entre el ingreso per cápita y el acceso a la atención médica. En conjunto, el análisis bivariado sugiere que las variables del conjunto de datos se comportan como si fueran independientes entre sí.
# Análisis cuantitativo
## 9. Correlaciones entre variables numéricas
```{r}
matriz_cor <- cor(datos[, nums])
knitr::kable(
round(matriz_cor, 3),
caption = "Matriz de correlación de Pearson entre las variables cuantitativas"
)
```
```{r, fig.width=7, fig.height=6}
colores <- colorRampPalette(c("#C0504D", "white", "#4F81BD"))(200)
image(
1:ncol(matriz_cor), 1:ncol(matriz_cor), matriz_cor[, ncol(matriz_cor):1],
col = colores, axes = FALSE, xlab = "", ylab = "",
main = "Mapa de calor de correlaciones"
)
axis(1, at = 1:ncol(matriz_cor), labels = colnames(matriz_cor), las = 2, cex.axis = 0.7)
axis(2, at = 1:ncol(matriz_cor), labels = rev(colnames(matriz_cor)), las = 2, cex.axis = 0.7)
```
**Interpretación de las correlaciones.** La totalidad de los coeficientes de correlación de Pearson entre las siete variables cuantitativas se encuentra entre -0,002 y 0,002, es decir, prácticamente cero en todos los casos. Retomando puntualmente las preguntas planteadas al inicio del proyecto:
- **Incidencia vs. mortalidad (objetivo 3):** la correlación entre `Incidence_Rate` y `Mortality_Rate` es de apenas 0,0003, por lo que **no hay evidencia de que una mayor incidencia de las enfermedades se asocie con mayores tasas de mortalidad** en este conjunto de datos.
- **Costo del tratamiento vs. recuperación (objetivo 4):** la correlación entre `Average_Treatment_Cost` y `Recovery_Rate` es de 0,0005, prácticamente nula, por lo que **el costo promedio del tratamiento no está relacionado con mejores resultados de recuperación**.
- **Ingreso per cápita vs. acceso a la salud (objetivo 2):** la correlación entre `Per_Capita_Income` y `Healthcare_Access` es de -0,0013, también nula, indicando que **el nivel de ingreso de un país no está asociado, en estos datos, con el acceso a servicios de salud**.
En general, la fuerza de todas las relaciones evaluadas es nula (valores absolutos de r muy por debajo de 0,1), lo que confirma lo observado en el análisis bivariado: las variables numéricas del conjunto de datos se comportan de manera estadísticamente independiente entre sí.
# Conclusiones
## 10. Conclusiones del análisis
Este proyecto partió de cuatro preguntas: si la mortalidad varía según el grupo de edad, si el ingreso per cápita se asocia con el acceso a la atención médica, si la incidencia se relaciona con la mortalidad, y si el costo del tratamiento se asocia con la recuperación de los pacientes.
Los principales hallazgos del análisis descriptivo, bivariado y de correlaciones fueron:
- El conjunto de datos es de gran tamaño (1.000.000 de registros, 11 variables) y está **balanceado por diseño**: los 20 países, las 11 categorías de enfermedad, los 4 grupos de edad y los 4 tipos de tratamiento tienen frecuencias casi idénticas entre sí.
- Las siete variables cuantitativas (`Prevalence_Rate`, `Incidence_Rate`, `Mortality_Rate`, `Healthcare_Access`, `Average_Treatment_Cost`, `Recovery_Rate` y `Per_Capita_Income`) se distribuyen de forma **aproximadamente uniforme** dentro de su rango, con medias y medianas prácticamente iguales y sin valores atípicos relevantes.
- **No se encontró evidencia de asociación** entre ninguna de las variables analizadas: ni entre grupo de edad y mortalidad, ni entre categoría de enfermedad y grupo de edad, ni entre tipo de tratamiento y tasa de recuperación, ni en ninguno de los pares de variables cuantitativas evaluados con `cor()` (todas las correlaciones estuvieron entre -0,002 y 0,002).
**¿Qué permiten afirmar los datos?** Los datos permiten afirmar, con bastante certeza, que dentro de este conjunto de datos las cuatro variables categóricas y las siete variables numéricas se comportan como si fueran generadas de manera independiente unas de otras: no hay señales de asociación entre grupo de edad y mortalidad, entre ingreso y acceso a salud, entre incidencia y mortalidad, ni entre costo de tratamiento y recuperación. Es decir, **las cuatro hipótesis planteadas al inicio del proyecto no encuentran respaldo en estos datos**.