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()