Autor/a

Paula Ávila, Marilyn Mateus, Leandro Reyes

Fecha de publicación

2 de septiembre de 2026

1 Información general sobre la base de datos:

1.1 ¿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.

1.2 ¿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

1.3 ¿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.

2 Carga del conjunto de datos:

Código
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().

Código
knitr::kable(
  head(datos),
  caption = "Primeras seis filas del conjunto de datos"
)
Primeras seis filas del conjunto de datos
Country Disease_Category Prevalence_Rate Incidence_Rate Mortality_Rate Age_Group Healthcare_Access Treatment_Type Average_Treatment_Cost Recovery_Rate Per_Capita_Income
Italy Respiratory 0.95 1.55 8.42 0-18 57.74 Medication 21064 91.82 16886
France Parasitic 12.46 8.63 8.75 61+ 89.21 Surgery 47851 76.65 80639
Turkey Genetic 0.91 2.35 6.22 36-60 56.41 Vaccination 27834 98.55 12245
Indonesia Autoimmune 4.68 6.29 3.99 0-18 85.20 Surgery 144 67.35 49336
Italy Genetic 0.83 13.59 7.01 61+ 67.00 Medication 8908 50.06 47701
Saudi Arabia Bacterial 10.99 6.49 4.64 61+ 98.41 Therapy 42671 93.17 29597

3 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:

Código
str(datos)
'data.frame':   1000000 obs. of  11 variables:
 $ Country               : chr  "Italy" "France" "Turkey" "Indonesia" ...
 $ Disease_Category      : chr  "Respiratory" "Parasitic" "Genetic" "Autoimmune" ...
 $ Prevalence_Rate       : num  0.95 12.46 0.91 4.68 0.83 ...
 $ Incidence_Rate        : num  1.55 8.63 2.35 6.29 13.59 ...
 $ Mortality_Rate        : num  8.42 8.75 6.22 3.99 7.01 4.64 9.33 1.21 6.38 6 ...
 $ Age_Group             : chr  "0-18" "61+" "36-60" "0-18" ...
 $ Healthcare_Access     : num  57.7 89.2 56.4 85.2 67 ...
 $ Treatment_Type        : chr  "Medication" "Surgery" "Vaccination" "Surgery" ...
 $ Average_Treatment_Cost: int  21064 47851 27834 144 8908 42671 15579 15744 7669 9468 ...
 $ Recovery_Rate         : num  91.8 76.7 98.5 67.3 50.1 ...
 $ Per_Capita_Income     : int  16886 80639 12245 49336 47701 29597 60027 23222 30849 68856 ...

Para facilitar la visualización de los tipos de datos de cada variable, se presenta adicionalmente la siguiente tabla:

Código
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"
)
Estructura y tipo de dato de las variables
Variable Tipo
Country character
Disease_Category character
Prevalence_Rate numeric
Incidence_Rate numeric
Mortality_Rate numeric
Age_Group character
Healthcare_Access numeric
Treatment_Type character
Average_Treatment_Cost integer
Recovery_Rate numeric
Per_Capita_Income integer

Posteriormente, se utiliza la función summary() para obtener un resumen general del conjunto de datos.

Código
resumen <- summary(datos)

3.0.1 Resumen de las variables cuantitativas

Código
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"
)
Resultados de summary() para las variables cuantitativas
Mínimo 1er cuartil Mediana Media 3er cuartil Máximo
Prevalence_Rate 0.1 5.09 10.04 10.05 15.01 20
Incidence_Rate 0.1 3.84 7.55 7.56 11.28 15
Mortality_Rate 0.1 2.58 5.05 5.05 7.53 10
Healthcare_Access 50.0 62.47 75.00 74.99 87.49 100
Average_Treatment_Cost 100.0 12538.00 24980.00 25010.31 37493.00 50000
Recovery_Rate 50.0 62.22 74.47 74.50 86.78 99
Per_Capita_Income 500.0 25457.00 50372.00 50311.10 75195.00 100000

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.

4 Dimensión del conjunto

Código
dim(datos)
[1] 1000000      11
Código
 nrow(datos)
[1] 1000000
Código
ncol(datos)
[1] 11
Código
class(datos)
[1] "data.frame"

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

5 Clasificación de variables

Código
names(datos)
 [1] "Country"                "Disease_Category"       "Prevalence_Rate"       
 [4] "Incidence_Rate"         "Mortality_Rate"         "Age_Group"             
 [7] "Healthcare_Access"      "Treatment_Type"         "Average_Treatment_Cost"
[10] "Recovery_Rate"          "Per_Capita_Income"     

“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

5.1 6. Ajuste de tipos de variables

Código
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.

Código
sapply(datos, class)
$Country
[1] "factor"

$Disease_Category
[1] "factor"

$Prevalence_Rate
[1] "numeric"

$Incidence_Rate
[1] "numeric"

$Mortality_Rate
[1] "numeric"

$Age_Group
[1] "ordered" "factor" 

$Healthcare_Access
[1] "numeric"

$Treatment_Type
[1] "factor"

$Average_Treatment_Cost
[1] "numeric"

$Recovery_Rate
[1] "numeric"

$Per_Capita_Income
[1] "numeric"
Código
summary(datos)
         Country             Disease_Category  Prevalence_Rate Incidence_Rate  
 Russia      : 50532   Metabolic     : 91332   Min.   : 0.10   Min.   : 0.100  
 South Africa: 50408   Parasitic     : 91178   1st Qu.: 5.09   1st Qu.: 3.840  
 South Korea : 50181   Autoimmune    : 91153   Median :10.04   Median : 7.550  
 Germany     : 50176   Genetic       : 91153   Mean   :10.05   Mean   : 7.555  
 UK          : 50125   Neurological  : 91000   3rd Qu.:15.01   3rd Qu.:11.280  
 Canada      : 50114   Cardiovascular: 90968   Max.   :20.00   Max.   :15.000  
 (Other)     :698464   (Other)       :453216                                   
 Mortality_Rate  Age_Group      Healthcare_Access     Treatment_Type  
 Min.   : 0.10   0-18 :249605   Min.   : 50.00    Medication :249456  
 1st Qu.: 2.58   19-35:251201   1st Qu.: 62.47    Surgery    :250528  
 Median : 5.05   36-60:249205   Median : 75.00    Therapy    :250263  
 Mean   : 5.05   61+  :249989   Mean   : 74.99    Vaccination:249753  
 3rd Qu.: 7.53                  3rd Qu.: 87.49                        
 Max.   :10.00                  Max.   :100.00                        
                                                                      
 Average_Treatment_Cost Recovery_Rate   Per_Capita_Income
 Min.   :  100          Min.   :50.00   Min.   :   500   
 1st Qu.:12538          1st Qu.:62.22   1st Qu.: 25457   
 Median :24980          Median :74.47   Median : 50372   
 Mean   :25010          Mean   :74.50   Mean   : 50311   
 3rd Qu.:37493          3rd Qu.:86.78   3rd Qu.: 75195   
 Max.   :50000          Max.   :99.00   Max.   :100000   
                                                         

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.

6 Análisis univariado

6.1 7. Análisis univariado

6.1.1 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.

Código
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"
)
Distribución de frecuencias de Country
Pais Frecuencia Porcentaje
Argentina 49798 4.98
Australia 49953 5.00
Brazil 49687 4.97
Canada 50114 5.01
China 50066 5.01
France 49943 4.99
Germany 50176 5.02
India 49760 4.98
Indonesia 49756 4.98
Italy 49839 4.98
Japan 49764 4.98
Mexico 50080 5.01
Nigeria 50046 5.00
Russia 50532 5.05
Saudi Arabia 49958 5.00
South Africa 50408 5.04
South Korea 50181 5.02
Turkey 49901 4.99
UK 50125 5.01
USA 49913 4.99
Código
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"
)

Código
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"
)
Distribución de frecuencias de Disease_Category
Categoria Frecuencia Porcentaje
Autoimmune 91153 9.12
Bacterial 90509 9.05
Cardiovascular 90968 9.10
Chronic 90445 9.04
Genetic 91153 9.12
Infectious 90764 9.08
Metabolic 91332 9.13
Neurological 91000 9.10
Parasitic 91178 9.12
Respiratory 90588 9.06
Viral 90910 9.09
Código
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"
)

Código
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"
)
Distribución de frecuencias de Age_Group
Grupo_Edad Frecuencia Porcentaje
0-18 249605 24.96
19-35 251201 25.12
36-60 249205 24.92
61+ 249989 25.00
Código
pie(
  tabla_age,
  main = "Distribución por grupo de edad",
  col = c("#9BBB59", "#8064A2", "#4BACC6", "#F79646")
)

Código
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"
)
Distribución de frecuencias de Treatment_Type
Tratamiento Frecuencia Porcentaje
Medication 249456 24.95
Surgery 250528 25.05
Therapy 250263 25.03
Vaccination 249753 24.98
Código
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.

6.1.2 Variables cuantitativas

Código
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"
)
Medidas de tendencia central y de dispersión - variables cuantitativas
Variable Media Mediana Desv_Estandar Varianza Minimo Maximo
Prevalence_Rate 10.05 10.04 5.74 32.95 0.1 20
Incidence_Rate 7.56 7.55 4.30 18.48 0.1 15
Mortality_Rate 5.05 5.05 2.86 8.18 0.1 10
Healthcare_Access 74.99 75.00 14.44 208.41 50.0 100
Average_Treatment_Cost 25010.31 24980.00 14402.28 207425646.94 100.0 50000
Recovery_Rate 74.50 74.47 14.16 200.37 50.0 99
Per_Capita_Income 50311.10 50372.00 28726.96 825238194.01 500.0 100000
Código
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"
  )
}

Código
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.

7 Análisis bivariado

7.1 8. Análisis bivariado

7.1.1 Dos variables cualitativas: Disease_Category vs. Age_Group

Código
tabla_cont <- table(datos$Disease_Category, datos$Age_Group)
knitr::kable(
  tabla_cont,
  caption = "Tabla de contingencia: Disease_Category x Age_Group (frecuencias)"
)
Tabla de contingencia: Disease_Category x Age_Group (frecuencias)
0-18 19-35 36-60 61+
Autoimmune 22838 22731 22694 22890
Bacterial 22515 22596 22575 22823
Cardiovascular 22733 22822 22484 22929
Chronic 22684 22661 22514 22586
Genetic 22983 22564 22616 22990
Infectious 22675 22846 22638 22605
Metabolic 22479 23008 23030 22815
Neurological 22730 22907 22691 22672
Parasitic 22790 22944 22794 22650
Respiratory 22567 22941 22557 22523
Viral 22611 23181 22612 22506
Código
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)"
)
Tabla de contingencia: Disease_Category x Age_Group (% por fila)
0-18 19-35 36-60 61+
Autoimmune 25.1 24.9 24.9 25.1
Bacterial 24.9 25.0 24.9 25.2
Cardiovascular 25.0 25.1 24.7 25.2
Chronic 25.1 25.1 24.9 25.0
Genetic 25.2 24.8 24.8 25.2
Infectious 25.0 25.2 24.9 24.9
Metabolic 24.6 25.2 25.2 25.0
Neurological 25.0 25.2 24.9 24.9
Parasitic 25.0 25.2 25.0 24.8
Respiratory 24.9 25.3 24.9 24.9
Viral 24.9 25.5 24.9 24.8
Código
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 (%)"
)

7.1.2 Variable cuantitativa vs. categórica: Mortality_Rate y Recovery_Rate según grupo/tratamiento

Código
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 (%)"
)

Código
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 (%)"
)

7.1.3 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.

Código
set.seed(123)
muestra <- datos[sample(nrow(datos), 5000), ]
Código
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)

Código
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)

Código
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í.

8 Análisis cuantitativo

8.1 9. Correlaciones entre variables numéricas

Código
matriz_cor <- cor(datos[, nums])
knitr::kable(
  round(matriz_cor, 3),
  caption = "Matriz de correlación de Pearson entre las variables cuantitativas"
)
Matriz de correlación de Pearson entre las variables cuantitativas
Prevalence_Rate Incidence_Rate Mortality_Rate Healthcare_Access Average_Treatment_Cost Recovery_Rate Per_Capita_Income
Prevalence_Rate 1.000 0.000 0.001 0.000 -0.001 0.000 0.001
Incidence_Rate 0.000 1.000 0.000 0.001 0.000 0.000 0.001
Mortality_Rate 0.001 0.000 1.000 0.000 -0.002 0.001 -0.002
Healthcare_Access 0.000 0.001 0.000 1.000 0.000 0.002 -0.001
Average_Treatment_Cost -0.001 0.000 -0.002 0.000 1.000 0.000 -0.002
Recovery_Rate 0.000 0.000 0.001 0.002 0.000 1.000 0.000
Per_Capita_Income 0.001 0.001 -0.002 -0.001 -0.002 0.000 1.000
Código
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í.

9 Conclusiones

9.1 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.