Objetivo 3

To analyze the relationship between life expectancy, dietary patterns, and cardiovascular health across countries. Analizar la relación entre la esperanza de vida, los patrones alimentarios y la salud cardiovascular entre países”

En primer lugar, se lleva a cabo la carga de datos y librerías para poder estudiar cómo son las variables:

library(factoextra)
## Cargando paquete requerido: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)
library(tidyr)
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(ggcorrplot)
library(corrplot)
## corrplot 0.95 loaded
library(rnaturalearth)
library(rnaturalearthdata)
## 
## Adjuntando el paquete: 'rnaturalearthdata'
## The following object is masked from 'package:rnaturalearth':
## 
##     countries110
library(sf)
## Linking to GEOS 3.13.1, GDAL 3.10.2, PROJ 9.5.1; sf_use_s2() is TRUE
library(grid)
library(gridExtra)
## 
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ lubridate 1.9.4     ✔ stringr   1.5.1
## ✔ purrr     1.0.4     ✔ tibble    3.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ gridExtra::combine() masks dplyr::combine()
## ✖ dplyr::filter()      masks stats::filter()
## ✖ dplyr::lag()         masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rnaturalearth)
library(NbClust)
datos=read.csv('comcardesp1.csv')
#colnames(datos)
str(datos)
## 'data.frame':    200 obs. of  23 variables:
##  $ Pais               : chr  "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ Año                : int  2010 2010 2012 2012 2012 2013 2013 2014 2014 2014 ...
##  $ Sexo               : chr  "Men" "Women" "Women" "Women" ...
##  $ Prev.cardiac       : num  238 235 232 223 232 ...
##  $ Prev.diab          : num  9.40e-18 9.72e-18 1.01e-17 1.01e-17 9.68e-18 ...
##  $ Prev.hiper         : num  29.2 19.5 18.7 18.7 28.6 28.2 18.4 27.9 18 27.9 ...
##  $ Region             : chr  "Americas" "Americas" "Americas" "Americas" ...
##  $ Media.obes         : num  24.1 25.2 26.9 26.9 25.5 ...
##  $ Estatus            : chr  "Developing" "Developing" "Developing" "Developing" ...
##  $ Esperanza.de.vida  : num  75.5 75.5 75.9 75.9 75.9 76 76 76.2 76.2 76.2 ...
##  $ Mortalidad.adulta  : int  121 121 12 12 12 119 119 118 118 118 ...
##  $ Alcohol..L.año.    : num  8.15 8.15 8.35 8.35 8.35 8.28 8.28 7.93 7.93 7.93 ...
##  $ Porcentaje.gastos  : num  188 188 1134 1134 1134 ...
##  $ IMC                : num  59.8 59.8 61 61 61 61.6 61.6 62.2 62.2 62.2 ...
##  $ Gasto.total        : num  6.55 6.55 5.2 5.2 5.2 4.99 4.99 4.79 4.79 4.79 ...
##  $ Delgadez.1.19.años.: num  1 1 1 1 1 1 1 1 1 1 ...
##  $ IDH                : num  0.802 0.802 0.822 0.822 0.822 0.823 0.823 0.825 0.825 0.825 ...
##  $ Azucares           : num  403 403 405 405 405 ...
##  $ Fruta              : num  18 18 27.1 27.1 27.1 ...
##  $ Grasas_animales    : num  33.1 33.1 34 34 34 ...
##  $ Cereales           : num  4.86 4.86 6.78 6.78 6.78 ...
##  $ Verduras           : num  31.4 31.4 31.9 31.9 31.9 ...
##  $ Aceite_de_Palma    : num  0 0 0 0 0 0 0 0 0 0 ...

Se observan 23 variables y 200 observaciones.

unique(datos$Pais)
##  [1] "Argentina"   "Bahamas"     "Barbados"    "Canada"      "Colombia"   
##  [6] "Costa Rica"  "Cuba"        "Ecuador"     "El Salvador" "Guatemala"  
## [11] "Guyana"      "Honduras"    "Jamaica"     "Mexico"      "Nicaragua"  
## [16] "Panama"      "Paraguay"    "Peru"        "Uruguay"
unique(datos$Region)
## [1] "Americas"
unique(datos$Estatus)
## [1] "Developing"

Además, las variables Estatus y Region solo cuentan con países de la región Américas y con un estatus social-económico en ‘desarrollo’. Por ello, se eliminan teniendo en cuenta cúal es su valor, ya que no aportan variabilidad al estudio. Asimismo se eliminan también otras variables, por su poca relevancia en el estudio de este objetivo ya que tratan aspectos como el económico.

A continuación, se crea un nuevo dataframe objetivo con las variables que si que son útiles para responder a nuestro objetivo. También se comprueba la existencia de datos faltantes en algunas de las variables.

Limpieza

objetivo = datos[, c("Pais","Año","Esperanza.de.vida", "Fruta", "Verduras", "Azucares","Grasas_animales", "Cereales", "Prev.cardiac", "Prev.hiper", "Mortalidad.adulta", "Sexo")]
str(objetivo)
## 'data.frame':    200 obs. of  12 variables:
##  $ Pais             : chr  "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ Año              : int  2010 2010 2012 2012 2012 2013 2013 2014 2014 2014 ...
##  $ Esperanza.de.vida: num  75.5 75.5 75.9 75.9 75.9 76 76 76.2 76.2 76.2 ...
##  $ Fruta            : num  18 18 27.1 27.1 27.1 ...
##  $ Verduras         : num  31.4 31.4 31.9 31.9 31.9 ...
##  $ Azucares         : num  403 403 405 405 405 ...
##  $ Grasas_animales  : num  33.1 33.1 34 34 34 ...
##  $ Cereales         : num  4.86 4.86 6.78 6.78 6.78 ...
##  $ Prev.cardiac     : num  238 235 232 223 232 ...
##  $ Prev.hiper       : num  29.2 19.5 18.7 18.7 28.6 28.2 18.4 27.9 18 27.9 ...
##  $ Mortalidad.adulta: int  121 121 12 12 12 119 119 118 118 118 ...
##  $ Sexo             : chr  "Men" "Women" "Women" "Women" ...
vars= c("Pais","Año","Esperanza.de.vida", "Fruta", "Verduras", "Azucares","Grasas_animales", "Cereales", "Prev.cardiac", "Prev.hiper", "Mortalidad.adulta")

colSums(is.na(objetivo))
##              Pais               Año Esperanza.de.vida             Fruta 
##                 0                 0                 0                 0 
##          Verduras          Azucares   Grasas_animales          Cereales 
##                 0                 0                 0                 0 
##      Prev.cardiac        Prev.hiper Mortalidad.adulta              Sexo 
##                 0                 0                 0                 0

Se observa como no existen datos faltantes en ninguna variable.

Transformaciones A continuación, se crean nuevas variables para poder resumir mejor los patrones alimentarios y los cardiovasculares. En la nueva variable Indice de riesgo cardiaco se convierte cada variable a una escala comparable para poder sumar o hacer cálculos ya que tienen escalas de medida diferentes.

#Variable de consumo total diario (kcal) de alimentos por persona al dia (kcal/cap/d)

objetivo$Calorias.totales = objetivo$Cereales + objetivo$Azucares + objetivo$Verduras + objetivo$Fruta+ objetivo$Grasas_animales 

# Índice compuesto de riesgo cardiovascular (estandarizado)
objetivo$Indice.riesgo.cardio = scale(objetivo$Prev.cardiac) +
scale(objetivo$Prev.hiper)

#Resumen:
str(objetivo)
## 'data.frame':    200 obs. of  14 variables:
##  $ Pais                : chr  "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ Año                 : int  2010 2010 2012 2012 2012 2013 2013 2014 2014 2014 ...
##  $ Esperanza.de.vida   : num  75.5 75.5 75.9 75.9 75.9 76 76 76.2 76.2 76.2 ...
##  $ Fruta               : num  18 18 27.1 27.1 27.1 ...
##  $ Verduras            : num  31.4 31.4 31.9 31.9 31.9 ...
##  $ Azucares            : num  403 403 405 405 405 ...
##  $ Grasas_animales     : num  33.1 33.1 34 34 34 ...
##  $ Cereales            : num  4.86 4.86 6.78 6.78 6.78 ...
##  $ Prev.cardiac        : num  238 235 232 223 232 ...
##  $ Prev.hiper          : num  29.2 19.5 18.7 18.7 28.6 28.2 18.4 27.9 18 27.9 ...
##  $ Mortalidad.adulta   : int  121 121 12 12 12 119 119 118 118 118 ...
##  $ Sexo                : chr  "Men" "Women" "Women" "Women" ...
##  $ Calorias.totales    : num  490 490 505 505 505 ...
##  $ Indice.riesgo.cardio: num [1:200, 1] 3.069 0.511 0.266 0.145 2.828 ...
##   ..- attr(*, "scaled:center")= num 172
##   ..- attr(*, "scaled:scale")= num 75.1

Para poder estudiar qué variables son las que están más relacionadas con la Esperanza de Vida se evaluan las correlaciones entre estas. Pero antes de ello, se estudian las distribuciones de cada variable para saber que método de correlación es el más adecuado.

vars_num = c("Esperanza.de.vida", "Fruta", "Verduras", "Azucares", "Grasas_animales", "Cereales",
         "Prev.cardiac", "Prev.hiper","Mortalidad.adulta","Indice.riesgo.cardio","Calorias.totales")

datos_graficos = objetivo[, vars_num]
datos_largos = pivot_longer(datos_graficos, cols = everything(), names_to = "variable", values_to = "valor")
# Histograma 
ggplot(datos_largos, aes(x = valor)) +
  geom_histogram(bins = 30, fill = "blue", color = "black") +
  facet_wrap(~variable, scales = "free", ncol = 4) +
  labs(title = "Distribuciones de variables", x = NULL, y = "Frecuencia") +
  theme_minimal()

#Bigotes
ggplot(datos_largos, aes(x = variable, y = valor)) +
  geom_boxplot(fill = "yellow", outlier.color = "black") +
  facet_wrap(~variable, scales = "free", ncol = 4) +
  labs(title = "Boxplots de variables", x = NULL, y = "Valor") +
  theme_minimal() +
  theme(axis.text.x = element_blank())

Tras estudiar las distribuciones de cada variable, se observa que la gran mayoría de variables presentan asimetría (Azúcares, Cereales, Prev.Cardiac), outliers (Esperanza de vida, Verduras o Azúcares) o no tienen una distribución normal. Por eso, se escoge el método de correlación Spearman que es más robusto y mide relaciones que no tienen porque ser lineales. Además, la matrix de correlaciones de Spearman usa los rangos de las variables, por lo que no hace falta estandarizar.

cor_matrix = cor(datos_graficos, method = "spearman", use = "complete.obs")
#Matriz:
corrplot(cor_matrix, method = "color", type = "full", tl.col = "black", addCoef.col = "black", number.cex = 0.6)

#kable(round(cor_matrix, 3), caption = "Tabla de Correlaciones (Spearman) entre variables seleccionadas")

Gracias a la matriz de correlaciones podemos ver que hay varias variables relacionadas positivamente con la Esperanza de Vida, como las grasas animales y en menor medida con las calorias totales y la fruta. Los cereales o verduras (aunque estos últimos tienen una relación muy débil). Esto puede indicar que el acceso a una dieta alta en calorías puede estar relacionado con la longevidad. Entre indicadores de salud encontramos una débil relación negativa con la prevalencia hipertensión . Aunque existe una débil relación positiva con la prevalencia cardiaca. Y la relación mas fuerte negativa es con Mortalidad adulta Son resultados que llaman la atención sobre todo por la relación entre grasas animales, prevalencia cardiaca y la esperanza de vida.

Como se ha visto antes todos los países del dataset son de América, aunque solo Canadá es un país desarrollado según los estándares de OCDE. Esto puede provocar resultados confusos. Para analizarlo en mayor profundidad se realiza un modelo de regresión lineal. Usaremos como varibales dependiente la esperanza de vida y como varibales explicativas las demás.

modelo = lm(Esperanza.de.vida ~ Fruta + Verduras + Azucares +  Grasas_animales  + Cereales + 
             Prev.hiper + Prev.cardiac + Mortalidad.adulta + Indice.riesgo.cardio + Calorias.totales + factor(Año), data = objetivo)
summary(modelo)
## 
## Call:
## lm(formula = Esperanza.de.vida ~ Fruta + Verduras + Azucares + 
##     Grasas_animales + Cereales + Prev.hiper + Prev.cardiac + 
##     Mortalidad.adulta + Indice.riesgo.cardio + Calorias.totales + 
##     factor(Año), data = objetivo)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.4865 -1.5521  0.3312  1.7064  3.6317 
## 
## Coefficients: (2 not defined because of singularities)
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          70.7137815  1.4474805  48.853  < 2e-16 ***
## Fruta                 0.0585262  0.0121864   4.803 3.20e-06 ***
## Verduras             -0.0304777  0.0097696  -3.120 0.002098 ** 
## Azucares              0.0109821  0.0018894   5.812 2.61e-08 ***
## Grasas_animales       0.0583301  0.0050149  11.631  < 2e-16 ***
## Cereales              0.1081662  0.0252648   4.281 2.97e-05 ***
## Prev.hiper           -0.1617912  0.0435486  -3.715 0.000268 ***
## Prev.cardiac         -0.0004612  0.0030897  -0.149 0.881496    
## Mortalidad.adulta    -0.0081779  0.0032167  -2.542 0.011823 *  
## Indice.riesgo.cardio         NA         NA      NA       NA    
## Calorias.totales             NA         NA      NA       NA    
## factor(Año)2011       0.0532524  0.5314412   0.100 0.920290    
## factor(Año)2012      -0.0112911  0.4653892  -0.024 0.980670    
## factor(Año)2013       0.3537927  0.4816204   0.735 0.463510    
## factor(Año)2014       0.7883178  0.4724478   1.669 0.096874 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.13 on 187 degrees of freedom
## Multiple R-squared:  0.631,  Adjusted R-squared:  0.6074 
## F-statistic: 26.65 on 12 and 187 DF,  p-value: < 2.2e-16

En cuanto a este modelo de regresión múltiple podemos ver como el modelo explicar el 60% de la variabilidad en la esperanza de vida. Se puede ver como el modelo elimina automáticamente las variables creadas Indice.riesgo.cardio y Calorias.totales por su colinealidad con otras variables. Interpretando los p-valor podemos ver qué variables son altamente significativas para la Esperanza de vida, que fueron: el consumo de grasas animales, frutas, azucares y cereales. Las variables de grasas animales y azucares sorprenden, ya que a mayor consumo de azúcares o grasas animales no se piensa en mayor esperanza de vida.Esto puede deberse a varios motivos como falta información sobre el acceso a salud, actividad física o educación. Ya que puede que en países con alto consumo de azúcar y grasas también tengan mejor acceso a sanidad y mejore la esperanza de vida. En cuanto a las relaciones negativas, se encuentran la prevalencia de hipertensión y la mortaldiad adulta.Por otra parte, se observa que ningún año fue signficativo.

variables_interes = c("Prev.cardiac", "Prev.hiper", "Calorias.totales", "Fruta", "Mortalidad.adulta", "Grasas_animales")
objetivo_largo = objetivo %>%pivot_longer(cols = all_of(variables_interes), 
               names_to = "Variable", values_to = "Valor")
ggplot(objetivo_largo, aes(x = Valor, y = Esperanza.de.vida)) +
  geom_point(color = "steelblue", alpha = 0.6) +
  geom_smooth(method = "lm", color = "darkred", se = TRUE) +
  facet_wrap(~ Variable, scales = "free_x") +
  labs(title = "Esperanza de vida y Variables relacionadas",
       x = "Valor de la variable",y = "Esperanza de vida") + theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

ggplot(objetivo, aes(x = Grasas_animales, y = Esperanza.de.vida)) +
  geom_point(color = "steelblue", alpha = 0.6) +
  geom_smooth(method = "lm", color = "darkred", se = TRUE) +labs(title = "Esperanza de vida y Grasas animales",x = "Grasas animales",y = "Esperanza de vida") + theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

modelo_limpio = lm(Esperanza.de.vida ~ Fruta  + Azucares +  Grasas_animales  + Cereales + Prev.hiper, data = objetivo)
summary(modelo_limpio)
## 
## Call:
## lm(formula = Esperanza.de.vida ~ Fruta + Azucares + Grasas_animales + 
##     Cereales + Prev.hiper, data = objetivo)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.2791 -1.1459  0.4809  1.6298  3.5848 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     69.009433   1.198231  57.593  < 2e-16 ***
## Fruta            0.053706   0.011944   4.497 1.19e-05 ***
## Azucares         0.011168   0.001696   6.584 4.19e-10 ***
## Grasas_animales  0.062740   0.004861  12.907  < 2e-16 ***
## Cereales         0.086280   0.021765   3.964 0.000104 ***
## Prev.hiper      -0.169427   0.043682  -3.879 0.000144 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.236 on 194 degrees of freedom
## Multiple R-squared:  0.5784, Adjusted R-squared:  0.5675 
## F-statistic: 53.23 on 5 and 194 DF,  p-value: < 2.2e-16
ggplot(objetivo, aes(x = reorder(Pais, Grasas_animales, median), y = Grasas_animales)) +
  geom_boxplot(fill = "skyblue") +
  coord_flip() +
  labs(title = "Consumo de grasas animales por país",
       x = "País", y = "Grasas animales (kcal/cap/d)") +
  theme_minimal()

Se puede ver como Canadá presenta valores altos en el consumo de grasas animales en comparación con los demás países. No obstante, es crucial para poder analizar en conjunto el dataset y no perder infromación.

Como existen resultados contradictorios (sobre todo en grasas animales) y bastante variabilidad entre los países, estudiaremos si existen similitudes o patrones entre países según sus patrones alimentarios y cardiovasculares, para poder explicar mejor esos sucesos. Mediante clustering y escalado. El objetivo es verificar si hay clusters con alto consumo en grasa, azúcar u otros alimentos tienen mayor o menor esperanza de vida. Por lo que se utilizan las variables relacionadas con la alimentación y salud.Para ello, se escalan todas las variables ya que están medidas en diferentes unidades y magnitudes, asi se evita que esto interfiera en la agrupación.

#Variables nutricionales y cardiovasculares
vars_clustering = c("Fruta", "Verduras", "Azucares", "Grasas_animales", "Cereales","Prev.cardiac", "Prev.hiper")
data_cluster = datos[, vars_clustering]
data_cluster=scale(data_cluster, center = TRUE, scale = TRUE) #Escalamos
#Codo
set.seed(100)
wss = sapply(1:10, function(k){
  kmeans(data_cluster, centers = k, nstart = 25)$tot.withinss})
plot(1:10, wss, type = "b", pch = 19, frame = FALSE,
     xlab = "Número de clusters K",
     ylab = "Suma de cuadrados intra-cluster",
     main = "Método del codo para elegir K")

#EL otro método: NbCLust
midist <- get_dist(data_cluster, stand = FALSE, method = "euclidean")
res.nbclust <- NbClust(data = data_cluster,
                       diss = midist,       # matriz de distancias (ya escalada)
                       distance = NULL, min.nc = 3,max.nc = 7,          
                       method = "kmeans", index = "all")       

## *** : The Hubert index is a graphical method of determining the number of clusters.
##                 In the plot of Hubert index, we seek a significant knee that corresponds to a 
##                 significant increase of the value of the measure i.e the significant peak in Hubert
##                 index second differences plot. 
## 

## *** : The D index is a graphical method of determining the number of clusters. 
##                 In the plot of D index, we seek a significant knee (the significant peak in Dindex
##                 second differences plot) that corresponds to a significant increase of the value of
##                 the measure. 
##  
## ******************************************************************* 
## * Among all indices:                                                
## * 6 proposed 3 as the best number of clusters 
## * 3 proposed 4 as the best number of clusters 
## * 2 proposed 5 as the best number of clusters 
## * 6 proposed 6 as the best number of clusters 
## * 6 proposed 7 as the best number of clusters 
## 
##                    ***** Conclusion *****                            
##  
## * According to the majority rule, the best number of clusters is  3 
##  
##  
## *******************************************************************

Gracias al gráfico del método del codo observamos como el codo se encuentra entre una k de 3 o 4. En cuanto al paquete NbClust, que estudia diferentes criterios estadísticos, se establece k=3

set.seed(100)
clust = kmeans(data_cluster, centers = 3, nstart = 25)
#table(clust$cluster)
objetivo$cluster = as.factor(clust$cluster)
aggregate(objetivo[, vars_clustering], by = list(Cluster = objetivo$cluster), FUN = mean)
##   Cluster    Fruta Verduras Azucares Grasas_animales  Cereales Prev.cardiac
## 1       1 38.99686 59.69400 302.1603        73.38943 17.246286     151.9020
## 2       2 31.78371 51.39935 451.1910        36.60468  7.892097     265.7945
## 3       3 30.21301 21.32786 366.2441        57.04165  4.171456     122.4679
##   Prev.hiper
## 1   16.85714
## 2   23.05161
## 3   20.72039
#Cuantos paises hay por caad cluster aprox
aggregate(Pais ~ cluster, data = objetivo, FUN = function(x) length(unique(x)))
##   cluster Pais
## 1       1    4
## 2       2    8
## 3       3   12
unique(objetivo[objetivo$cluster == 1, "Pais"])
## [1] "Bahamas" "Canada"  "Mexico"  "Peru"
unique(objetivo[objetivo$cluster == 2, "Pais"])
## [1] "Argentina" "Bahamas"   "Barbados"  "Canada"    "Cuba"      "Guyana"   
## [7] "Jamaica"   "Uruguay"
unique(objetivo[objetivo$cluster == 3, "Pais"])
##  [1] "Argentina"   "Colombia"    "Costa Rica"  "Ecuador"     "El Salvador"
##  [6] "Guatemala"   "Honduras"    "Jamaica"     "Mexico"      "Nicaragua"  
## [11] "Panama"      "Paraguay"
datos_mapa = objetivo %>%
  group_by(Pais, cluster) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(Pais) %>%
  slice_max(n, n = 1, with_ties = FALSE)
# 3 países más comunes por cluster
paises_top = datos_mapa %>%
  count(cluster, Pais, sort = TRUE) %>% group_by(cluster) %>%
  slice_max(n, n = 3, with_ties = FALSE) %>%
  summarise(paises = paste(Pais, collapse = ", "))
etiquetas_cluster = paises_top %>%
  mutate(etiqueta = paste0("Cluster ", cluster, "\n(", paises, ")"))
mapa_america = ne_countries(scale = "medium", returnclass = "sf") %>% filter(region_un == "Americas")
mapa_america = mapa_america %>%
  left_join(datos_mapa, by = c("name" = "Pais"))
mapa_america = mapa_america %>%
  left_join(etiquetas_cluster, by = "cluster") %>%
  mutate(cluster_etiqueta = factor(etiqueta))  # Esto crea las etiquetas como factor
# Mapa
ggplot(mapa_america) +
  geom_sf(aes(fill = cluster_etiqueta), color = "white") +
  scale_fill_brewer(palette = "Set2", na.value = "grey90") +
  coord_sf(xlim = c(-120, -30), ylim = c(-60, 70), expand = FALSE) +
  labs(title = "Clusters más frecuentes por país",
       fill = "Clusters") + theme_minimal() + theme(
    panel.grid = element_blank(),
    panel.background = element_rect(fill = "white", color = NA),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5))

vars_clustering_con_cluster = c("cluster", vars_clustering,'Esperanza.de.vida')
datos_box = pivot_longer(objetivo[, vars_clustering_con_cluster], 
                         cols = -cluster, names_to = "Variable", values_to = "Valor")
ggplot(datos_box, aes(x = cluster, y = Valor, fill = cluster)) +
  geom_boxplot() +
  facet_wrap(~Variable, scales = "free", ncol = 4) +
  labs(title = "Distribución de variables por cluster",
       x = "Cluster", y = "Valor") + theme_minimal()

ggplot(objetivo, aes(x = cluster, y = Esperanza.de.vida, fill = cluster)) +
  geom_boxplot() +
  labs(title = "Esperanza de vida por cluster", x = "Cluster", y = "Esperanza de vida") +
  theme_minimal()

¿Qué variables destacan en cada grupo?

¿Qué valores tiene Esperanza.de.vida en cada uno?

¿Qué grupos parecen saludables, mixtos, o de riesgo?

CLUSTER 1: En este cluster destaca el alto consumo de grasas animales y cereales en comparación con los demás. También se observa lo mismo en Frutas y Verduras. En cuanto a los indicadores de salud, este cluster cuenta con los valores más bajos en prevalencia cardíaca y de hipertensión. Lo mismo con Azucares, donde se observa un consumo moderado y más bajo que los demás. Por lo que este cluster puede representar un perfil más sano en cuanto alimentación y salud cardiovascular, encontrando también que es el cluster con mayor esperanza de vida.

CLUSTER 2: Destaca por su alto consumo en Azucares y moderado en Cereales (aunque con mucha dispersión). Cuenta con los valores de prevalencia cardiaca y de hipertensión más altos. En cuanto a Fruta y Verdura no se diferencia en gran medida del cluster 3 y el consumo de grasas animales es más bajo. Este cluster contaba con un nivel de esperanza de vida medio lo que puede tener sentido por su mal perfil en cuanto a azúcares e hipertensión.

CLUSTER 3: Cuenta con el consumo más bajo de Cereales, Verduras y Prevalencia cardiaca. En cuanto a las demás variables presenta niveles intermedios. Es el que presenta menor esperanza de vida. Aunque su perfil alimentario no es el peor y su esperanza de vida es la más baja, esto nos indica que puede deberse a otras causas no recogidas en este análisis. Además, este cluster presenta bastante variabilidad, lo que puede distorsionar los resultados.

# Ver los países del cluster 2 ordenados por esperanza de vida
objetivo %>%
  filter(cluster == 1) %>%
  arrange(Esperanza.de.vida) %>%
  select(Pais, Año, Esperanza.de.vida)
##       Pais  Año Esperanza.de.vida
## 1     Peru 2010              73.7
## 2     Peru 2010              73.7
## 3  Bahamas 2013              74.8
## 4  Bahamas 2012              74.9
## 5  Bahamas 2012              74.9
## 6     Peru 2012              74.9
## 7     Peru 2012              74.9
## 8     Peru 2012              74.9
## 9  Bahamas 2010              75.0
## 10    Peru 2013              75.3
## 11    Peru 2013              75.3
## 12    Peru 2014              75.3
## 13    Peru 2014              75.3
## 14    Peru 2014              75.3
## 15 Bahamas 2014              75.4
## 16  Mexico 2010              75.6
## 17  Canada 2010              81.2
## 18  Canada 2010              81.2
## 19  Canada 2010              81.2
## 20  Canada 2010              81.2
## 21  Canada 2011              81.5
## 22  Canada 2011              81.5
## 23  Canada 2011              81.5
## 24  Canada 2011              81.5
## 25  Canada 2012              81.6
## 26  Canada 2012              81.6
## 27  Canada 2012              81.6
## 28  Canada 2012              81.6
## 29  Canada 2013              81.8
## 30  Canada 2013              81.8
## 31  Canada 2013              81.8
## 32  Canada 2013              81.8
## 33  Canada 2014              82.0
## 34  Canada 2014              82.0
## 35  Canada 2014              82.0
ggplot(objetivo, aes(x = Año, y = as.numeric(cluster), group = Pais)) +
  geom_line(color = "steelblue") +
  geom_point() +
  facet_wrap(~Pais) +
  labs(title = "Evolución del cluster por país",
       y = "Cluster", x = "Año") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

En este gráfico se observa la evolución de clusters según el país. La mayoría de países mantienen una evolución estable y no cambian en gran medida de clusters. No obstante, existen algunos que sí, como Jamacica, Bahamas o México.Esto puede indicar cierta inestabilidad en sus perfiles alimentarios y de salud estudiados. En cuanto a Paraguay, Peru, Uruguay y otros, mantienen perfiles completamente estables.

En conclusión, se puede observar como en la gran mayoría de los casos se observa una estabilidad en la evolución de los clusters durante los años 2010-2014. Confirmando una estabilidad de salud y patrones alimentarios y reforzando el perfil de cada cluster. En los países en los que existe inestabilidad puede deberse a otros factores no estudiados aquí como la economía o política. Todos estos resultados muestran que el cluster 1 representa un perfil con mejor esperanza de vida, donde los países más predonminantes son Canadá o Bahamas. El cluster 2 destaca por altos valores de azúcares e hipertensión pero un nivel de esperanza de vida medio, en cuanto a países destacan Jamaica o Guyana. Por último el cluster 3 muestra una esperanza de vida menor y países como Colombia, Ecuador o Guatemala.

Siendo asi que los países con mayor consumo de frutas, verduras y grasas animales saludables y menores niveles de hipertensión y enfermedades cardiovasculares presentan una esperanza de vida mucho mayor a otros países.