R Markdown

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## 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(FactoMineR)
library(factoextra)
## Cargando paquete requerido: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
library(sf)
## Warning: package 'sf' was built under R version 4.4.3
## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
library(ggplot2)
library(rnaturalearth)
## Warning: package 'rnaturalearth' was built under R version 4.4.3
library(rnaturalearthdata)
## Warning: package 'rnaturalearthdata' was built under R version 4.4.3
## 
## Adjuntando el paquete: 'rnaturalearthdata'
## The following object is masked from 'package:rnaturalearth':
## 
##     countries110
objective1 = read.csv("gastsalenferm.csv");
#View(objective1)
obj = select(objective1, Pais, Año, Media.obes, Prev.diab)
summary(obj)
##      Pais                Año         Media.obes         Prev.diab      
##  Length:630         Min.   :2000   Min.   :-2.19386   Min.   :-1.5855  
##  Class :character   1st Qu.:2003   1st Qu.:-0.68776   1st Qu.:-0.7200  
##  Mode  :character   Median :2007   Median : 0.01942   Median :-0.2159  
##                     Mean   :2007   Mean   : 0.00000   Mean   : 0.0000  
##                     3rd Qu.:2011   3rd Qu.: 0.57652   3rd Qu.: 0.5375  
##                     Max.   :2014   Max.   : 3.31600   Max.   : 4.1153

los datos como se puede ver fueron estandarizados en la limpieza y preparación de los datos

##            Media.obes Prev.diab
## Media.obes  1.0000000 0.7340397
## Prev.diab   0.7340397 1.0000000
plot(obj$Media.obes, obj$Prev.diab,
     xlab = "Media de obesidad (kcal/cap/d)",
     ylab = "Prevalencia de diabetes",
     main = "Relación entre obesidad y diabetes")
abline(lm(Prev.diab ~ Media.obes, data = obj), col = "blue")

#modelo de regresion lineal para predecir diab en funcion de la obes(linea azul), representa la relación estimada real
ggplot(obj, aes(x = Media.obes, y = Prev.diab)) +
  geom_point() +
  geom_smooth(method = "loess", se = FALSE, color = "blue") +
  facet_wrap(~ Pais) +
  labs(title = "Relación obesidad-diabetes por país",
       x = "Media de obesidad (kcal/cap/d)",
       y = "Prevalencia de diabetes") +
  theme_minimal() #quita fondos grises y deja el gráfico más limpio
## `geom_smooth()` using formula = 'y ~ x'

#crea gráficos de dispersión, geom_smooth añade una linea de regresion lineal en cada panel, face_wrap crea un panel por país, 

Como los datos varían por país y hay países con curvaturas, el método loess representa mucho mejor la tendencia real.

cor_por_pais = obj %>%
  group_by(Pais) %>%
  summarise(cor = cor(Media.obes, Prev.diab, use = "complete.obs")) %>%
  arrange(desc(cor))

head(cor_por_pais, 5)   # Los 5 países con mayor correlación
## # A tibble: 5 × 2
##   Pais          cor
##   <chr>       <dbl>
## 1 Bahamas     0.998
## 2 Argentina   0.985
## 3 Cuba        0.984
## 4 El Salvador 0.977
## 5 Peru        0.968
tail(cor_por_pais, 5)   # Los 5 países con menor correlación
## # A tibble: 5 × 2
##   Pais          cor
##   <chr>       <dbl>
## 1 Paraguay    0.780
## 2 Canada      0.760
## 3 Costa Rica  0.686
## 4 Haiti       0.469
## 5 Chile      NA
# crea un nuevo obejto que agrupa por año y calcula medias globales
evolucion_global = summarise(group_by(obj, Año), media_obes = mean(Media.obes), media_diab = mean(Prev.diab, na.rm = TRUE))


# Graficar ambas series
ggplot(evolucion_global, aes(x = Año)) +
  geom_line(aes(y = media_obes, color = "Obesidad")) +
  geom_line(aes(y = media_diab , color = "Diabetes")) +  # Escalamos diabetes para visualizar juntos
  labs(title = "Evolución global de obesidad y diabetes",
       y = "Obesidad y diabetes", color = "Indicador") +
  theme_minimal()

cor_por_pais = arrange(
  summarise(
    group_by(obj, Pais),
    cor = cor(Media.obes, Prev.diab, use = "complete.obs")),desc(cor))
#agrupa el dataset obj por país, calcula correlacion por pais de las 2 variables y ignorar cualquier fila q tenga valores NA

head(cor_por_pais, 5)   # Los 5 países con mayor correlación
## # A tibble: 5 × 2
##   Pais          cor
##   <chr>       <dbl>
## 1 Bahamas     0.998
## 2 Argentina   0.985
## 3 Cuba        0.984
## 4 El Salvador 0.977
## 5 Peru        0.968
tail(cor_por_pais, 5)   # Los 5 países con menor correlación
## # A tibble: 5 × 2
##   Pais          cor
##   <chr>       <dbl>
## 1 Paraguay    0.780
## 2 Canada      0.760
## 3 Costa Rica  0.686
## 4 Haiti       0.469
## 5 Chile      NA
mundo = ne_countries(scale = "medium", returnclass = "sf")#carga un shapefile del mundo
cor_por_pais = ungroup(
  summarise(group_by(obj, Pais),correlacion = cor(Media.obes, Prev.diab, use = "complete.obs")))

america = mundo %>%
  filter(region_un == "Americas")

america_cor = left_join(america, cor_por_pais, by = c("name" = "Pais"))#une el mapa con la tabla de correlaciones
ggplot(america_cor) +
  geom_sf(aes(fill = correlacion), color = "grey40") +#geomsf es para geometría espacial
  scale_fill_gradient2(
    low = "blue", mid = "white", high = "red", midpoint = 0,
    name = "Correlación"
  ) +
  labs(
    title = "Correlación obesidad-diabetes en países de América",
    subtitle = "Colores según fuerza y dirección de la correlación"
  ) +
  theme_minimal()

obj$diabesity_index = scale(obj$Media.obes) + scale(obj$Prev.diab)
# Crear índice combinado de obesidad y diabetes
obj$diabesity_index = scale(obj$Media.obes) + scale(obj$Prev.diab)
library(ggplot2)
library(sf)
library(dplyr)
library(rnaturalearth)
library(rnaturalearthdata)

obj_map = left_join(mundo, obj, by = c("admin" = "Pais"))

ggplot(obj_map) +
  geom_sf(aes(fill = diabesity_index)) +
  scale_fill_viridis_c(option = "plasma", name = "Diabesity Index") +
  labs(title = "Índice combinado de Obesidad y Diabetes") +
  theme_minimal()