Introduccion

Este artículo presenta un análisis de la expectativa de vida basado en la base de datos Gapminder. Se exploran patrones globales y regionales de la expectativa de vida a lo largo del tiempo. Se utilizan diversas técnicas de visualización para representar los datos de manera efectiva. Los resultados muestran un aumento general de la expectativa de vida en todos los países y destacan las diferencias entre continentes. Las palabras clave son expectativa de vida, Gapminder, tendencias temporales, visualización de datos, análisis global.

# Set the CRAN mirror
local({
  r <- getOption("repos")
  r["CRAN"] <- "https://cran.rstudio.com/"
  options(repos = r)
})

#Cargamos todas las librarias que necesitaremos
library(NbClust)
library(factoextra)
library(mvtnorm)
library(dendextend)
library(dplyr)
library(ggplot2)
library(plotly)
library(mice)
library(gapminder)

Antes de comenzar con nuestro analisis, instalaremos y llamaremos a todas las librerias que utilizaremos.

Pre procesamiento

#Creamos un Dataset gapminder para nuestra base de datos
gapminder <- gapminder

#Utilizamos esta grafica de datos faltantes para confirmar que en nuestra base de datos no tiene datos faltantes
md.pattern(gapminder)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      country continent year lifeExp pop gdpPercap  
## 1704       1         1    1       1   1         1 0
##            0         0    0       0   0         0 0

La visualización de la gráfica de datos faltantes nos permite confirmar si existen valores faltantes en nuestra base de datos. Al examinar la gráfica generada utilizando la función md.pattern(), podemos identificar patrones o áreas donde hay ausencia de datos. Sin embargo, en el caso de nuestra base de datos “gapminder”, no se observa ninguna falta de datos, lo que indica que no hay valores faltantes en ninguna de las variables incluidas en el conjunto de datos. Esto nos brinda confianza en la integridad de los datos y nos permite proceder con el análisis sin tener que abordar la imputación o tratamiento de datos faltantes.

#Creamos un data set con los datos del 1997 en adelante
gapminder_TenYears <- gapminder[gapminder$year >=1997,]

Creamos un data frame con la data de los años desde el 1997 en adelante

#Hacemos un histograma para detectar outliers en el life expectancy.
x11()
hist(gapminder$lifeExp)

Se realiza un histograma de la variable expectativa de vida del conjunto de datos “gapminder”. El propósito de este histograma es identificar posibles valores atípicos o outliers en la distribución de la expectativa de vida.Al observar el histograma, podemos identificar si hay valores extremos que se desvían significativamente de la distribución general de la expectativa de vida. Estos valores atípicos pueden indicar casos excepcionales o errores en los datos.

#Estadistica de boxplot para que nos deje saber cuantos outliers tenemos

boxplot.stats(gapminder$lifeExp)
## $stats
## [1] 23.5990 48.1850 60.7125 70.8460 82.6030
## 
## $n
## [1] 1704
## 
## $conf
## [1] 59.84514 61.57986
## 
## $out
## numeric(0)

Se utiliza boxplot.stats para confirmar nuevamente la ausencia de outliers en la base de datos.

#Optener un summary de nuestra data
summary(gapminder)
##         country        continent        year         lifeExp     
##  Afghanistan:  12   Africa  :624   Min.   :1952   Min.   :23.60  
##  Albania    :  12   Americas:300   1st Qu.:1966   1st Qu.:48.20  
##  Algeria    :  12   Asia    :396   Median :1980   Median :60.71  
##  Angola     :  12   Europe  :360   Mean   :1980   Mean   :59.47  
##  Argentina  :  12   Oceania : 24   3rd Qu.:1993   3rd Qu.:70.85  
##  Australia  :  12                  Max.   :2007   Max.   :82.60  
##  (Other)    :1632                                                
##       pop              gdpPercap       
##  Min.   :6.001e+04   Min.   :   241.2  
##  1st Qu.:2.794e+06   1st Qu.:  1202.1  
##  Median :7.024e+06   Median :  3531.8  
##  Mean   :2.960e+07   Mean   :  7215.3  
##  3rd Qu.:1.959e+07   3rd Qu.:  9325.5  
##  Max.   :1.319e+09   Max.   :113523.1  
## 

Se utiliza la función “summary” en el conjunto de datos “gapminder”. Este resumen proporciona una visión general de las variables presentes en el conjunto de datos, incluyendo medidas estadísticas clave para cada una de ellas.

#Analisis de Correlacion
cor(gapminder[, sapply(gapminder, is.numeric)], use = "complete.obs")
##                 year    lifeExp         pop   gdpPercap
## year      1.00000000 0.43561122  0.08230808  0.22731807
## lifeExp   0.43561122 1.00000000  0.06495537  0.58370622
## pop       0.08230808 0.06495537  1.00000000 -0.02559958
## gdpPercap 0.22731807 0.58370622 -0.02559958  1.00000000

El análisis de correlación en el conjunto de datos “gapminder” evalúa las relaciones entre las variables numéricas. Se calculan coeficientes de correlación para todas las combinaciones posibles de pares de variables.

# Calculate the average life expectancy by continent and year
gapminder_avg <- gapminder %>%
  group_by(year, continent) %>%
  summarize(avg_lifeExp = mean(lifeExp))

# Print the resulting data frame
print(gapminder_avg)
## # A tibble: 60 × 3
## # Groups:   year [12]
##     year continent avg_lifeExp
##    <int> <fct>           <dbl>
##  1  1952 Africa           39.1
##  2  1952 Americas         53.3
##  3  1952 Asia             46.3
##  4  1952 Europe           64.4
##  5  1952 Oceania          69.3
##  6  1957 Africa           41.3
##  7  1957 Americas         56.0
##  8  1957 Asia             49.3
##  9  1957 Europe           66.7
## 10  1957 Oceania          70.3
## # ℹ 50 more rows

Calculamos el promedio de expectativa de vida y generamos una tabla que contiene los valores promedio de la expectativa de vida agrupados por año y continente. Se debe aclarar que en esta imagen simplemente se muestran 10 de los resultados del data frame, existen exactamente 1,704 datos.

Visualizacion

# Calcular la expectativa de vida promedio por continente
vida_promedio <- gapminder %>%
  group_by(continent) %>%
  summarize(avg_lifeExp = mean(lifeExp))

# Crear el gráfico interactivo de barras
fig <- plot_ly(data = vida_promedio, x = ~continent, y = ~avg_lifeExp,
               type = "bar", color = ~continent,
               hovertemplate = "Continente: %{x}<br>Expectativa de Vida Promedio: %{y} años") %>%
  layout(title = "Expectativa de Vida Promedio por Continente",
         xaxis = list(title = "Continente"),
         yaxis = list(title = "Expectativa de Vida Promedio (años)"))

# Mostrar el gráfico interactivo
fig

Esta gráfico interactivo de barra muestra la expectativa de vida promedio por continente. Cada barra representa un continente y su altura está determinada por el valor promedio de expectativa de vida para ese continente. Este gráfico proporciona una representación visual de cómo difiere la expectativa de vida promedio entre los continentes. Podemos observar que la barra correspondiente a Oceanía es la más alta, con una expectativa de años promedio de 74, lo que indica que tiene la expectativa de vida promedio más alta entre los continentes representados. Por otro lado, la barra correspondiente a África es la más baja, con una expectativa de años promedio de 49, lo que indica que tiene la expectativa de vida promedio más baja.

# Calcular el promedio de expectativa de vida por continente y año
gapminder_avg <- gapminder %>%
  group_by(year, continent) %>%
  summarize(avg_lifeExp = mean(lifeExp))

# Crear la gráfica interactiva
fig <- plot_ly(gapminder_avg, x = ~year, y = ~avg_lifeExp, color = ~continent) %>%
  layout(title = "Promedio de Expectativa de Vida por Continente anual",
         xaxis = list(title = "Año"),
         yaxis = list(title = "Expectativa de Vida"),
         hovermode = "closest") %>%
  add_markers(text = ~continent, hoverinfo = "text", selected = list(marker = list(size = 10)),
              click = ~paste("Continent:", continent, "<br>Average Life Expectancy:", avg_lifeExp)) %>%
  highlight(on = "plotly_click", off = "plotly_doubleclick",
            color = "rgba(0, 0, 0, 0)", size = 5)

fig

La gráfica interactiva muestra el promedio de expectativa de vida por continente en función del año. Cada punto en la gráfica representa el promedio de expectativa de vida para un año determinado y está coloreado según el continente correspondiente.Esta gráfica permite explorar las variaciones en la expectativa de vida promedio a lo largo del tiempo y compararlas entre los continentes de manera interactiva.

plot_ly(gapminder, x = ~gdpPercap, y = ~lifeExp, color = ~year, type = 'scatter', mode = 'markers') %>%
  layout(title = "Relación entre el PIB per cápita y la expectativa de vida",
         xaxis = list(title = "PIB per cápita"),
         yaxis = list(title = "Expectativa de vida"),
         colorway = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33", "#A65628", "#F781BF"),
         facet_row = ~year) %>%
  config(displayModeBar = TRUE)

Esta gráfica de dispersión (scatter plot) interactiva, muestra la relación entre el PIB per cápita y la expectativa de vida. Esta grafica se utilizo para observar si habia una relacion entre el PIB y la espectativa de vida al pasar los años.

fig <- plot_ly(gapminder, x = ~year, y = ~lifeExp, color = ~country, type = 'scatter', mode = 'lines') %>%
  layout(title = "Evolución de la expectativa de vida por país",
         xaxis = list(title = "Año"),
         yaxis = list(title = "Expectativa de vida"))

fig <- fig %>% layout(
  updatemenus = list(
    list(
      buttons = list(
        list(method = "restyle",
             args = list("visible", list(FALSE)),
             label = "Todos los países"),
        list(method = "restyle",
             args = list("visible", list(TRUE)),
             label = unique(gapminder$country))
      ),
      direction = "down",
      showactive = TRUE,
      active = 0,
      x = 0.1,
      xanchor = "left",
      y = 1.2,
      yanchor = "top"
    )
  )
)
fig

Este gráfico interactivo de líneas, representa la evolución de la expectativa de vida para cada país a lo largo del tiempo. Cada país se representa con una línea que muestra cómo ha variado su expectativa de vida a medida que transcurren los años.

head(gapminder)
## # A tibble: 6 × 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       1952    28.8  8425333      779.
## 2 Afghanistan Asia       1957    30.3  9240934      821.
## 3 Afghanistan Asia       1962    32.0 10267083      853.
## 4 Afghanistan Asia       1967    34.0 11537966      836.
## 5 Afghanistan Asia       1972    36.1 13079460      740.
## 6 Afghanistan Asia       1977    38.4 14880372      786.
gapminder_TenYears.scaled <- scale(x = gapminder_TenYears[,-c(1,2)], 
                                   center = TRUE, 
                                   scale = TRUE)
head(gapminder_TenYears.scaled)
##           year    lifeExp         pop  gdpPercap
## [1,] -1.223307 -2.0160820 -0.13680550 -0.8362058
## [2,]  0.000000 -1.9855185 -0.11515113 -0.8282401
## [3,]  1.223307 -1.8436401 -0.06800041 -0.8066380
## [4,] -1.223307  0.5882505 -0.27067272 -0.6132780
## [5,]  0.000000  0.8138029 -0.27009967 -0.4902829
## [6,]  1.223307  0.8782703 -0.26944448 -0.3741158

Se realiza un escalado de las variables del conjunto de datos “gapminder_TenYears” con el objetivo de estandarizar sus valores.Utilizamos solamente los años mas recientes para minimizar la cantidad de datos en procesamiento.

Reglas de asociacion

gapminder_TenYears.scaled <- scale(x = gapminder_TenYears$lifeExp, center = TRUE, scale = TRUE)
dist_gapminder_TenYears <- dist(gapminder_TenYears.scaled, method = "euclidean")
dist_mat <- as.matrix(round(dist_gapminder_TenYears, 3))
as.dist(dist_mat[1:6, 1:6])
##       1     2     3     4     5
## 2 0.031                        
## 3 0.172 0.142                  
## 4 2.604 2.574 2.432            
## 5 2.830 2.799 2.657 0.226      
## 6 2.894 2.864 2.722 0.290 0.064

Se calcula la matriz de distancias entre las observaciones escaladas del conjunto de datos. Esta matriz de distancias representa la medida de similitud o diferencia entre las observaciones en función de las variables escaladas.

#Metodo para encontrar numero optimo de clusters.
fviz_nbclust(gapminder_TenYears, FUN = hcut, method = "silhouette")

modelo <-hclust(dist_gapminder_TenYears, method ="complete")
fviz_dend(modelo, cex =0.1, k=2)

Realizamos un analisis de agrupamiento con un engoque jerarquico para determinar el numero optimo de clusters basado en el metodo de silueta. Se encontro que el numero optimo de clusters, usando este metodo fue 2. Se hizo un dendograma con el resultado del agrupamiento jerarquico.

Conclucion

En conclusión, al analizar los datos de la base de datos Gapminder, se puede observar una tendencia general de aumento en la esperanza de vida en todos los países a medida que transcurren los años. Este hallazgo refleja los avances en la atención médica, las mejoras en las condiciones de vida, los avances tecnológicos y otros factores que contribuyen al bienestar y la longevidad de la población a nivel mundial. A través de las visualizaciones y análisis realizados, se puede apreciar que la esperanza de vida ha experimentado un crecimiento constante en la mayoría de los países, tanto en las naciones desarrolladas como en las que están en vías de desarrollo. Este aumento puede atribuirse a una serie de factores, como la reducción de la mortalidad infantil, la mejora de la nutrición, el acceso a servicios de salud, la educación en temas de salud y el desarrollo socioeconómico en general. Sin embargo, es importante tener en cuenta que existen variaciones en los niveles de esperanza de vida entre los países. Algunas naciones han logrado alcanzar niveles muy altos de esperanza de vida, mientras que otras aún enfrentan desafíos significativos en términos de salud y bienestar. Estas disparidades pueden estar relacionadas con factores socioeconómicos, políticos, culturales y de acceso a servicios de salud.