1. Introducción

En este laboratorio se utiliza el conjunto de datos Gapminder, que contiene información de distintos países del mundo entre 1952 y 2007.
Incluye variables como:

  • País (country)
  • Continente (continent)
  • Año (year)
  • Esperanza de vida (lifeExp)
  • Población (pop)
  • PIB per cápita (gdpPercap)

El objetivo es:

  1. Explorar la relación entre variables cuantitativas y cualitativas.
  2. Construir tablas cruzadas y representarlas gráficamente.
  3. Realizar un ejercicio de pronóstico con series de tiempo para la esperanza de vida en Colombia.

A continuación se presenta el análisis realizado en R.


2. Exploración inicial de los datos

glimpse(gapminder)
## Rows: 1,704
## Columns: 6
## $ country   <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
## $ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
## $ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
## $ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
## $ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …

Podemos ver que el conjunto tiene 1704 observaciones y 6 variables, con mediciones cada 5 años por país.


2. Análisis con dos variables

2.1 Filtrado de datos para el año 2007

Para tener una fotografía reciente y comparable entre países, se filtran los registros del año 2007, último año disponible en el conjunto.

gap_2007 <- gapminder %>% 
  filter(year == 2007)

gap_2007 %>% head()
## # A tibble: 6 × 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       2007    43.8 31889923      975.
## 2 Albania     Europe     2007    76.4  3600523     5937.
## 3 Algeria     Africa     2007    72.3 33333216     6223.
## 4 Angola      Africa     2007    42.7 12420476     4797.
## 5 Argentina   Americas   2007    75.3 40301927    12779.
## 6 Australia   Oceania    2007    81.2 20434176    34435.

2.2 Dos variables cuantitativas: PIB per cápita vs esperanza de vida

Se estudia la relación entre:

  • gdpPercap: PIB per cápita
  • lifeExp: esperanza de vida

Coeficiente de correlación de Pearson

cor_pearson <- cor(gap_2007$gdpPercap, gap_2007$lifeExp, method = "pearson")
cor_pearson
## [1] 0.6786624

También se calcula la matriz de correlación entre tres variables cuantitativas:

datos_quant <- gap_2007 %>% 
  select(lifeExp, gdpPercap, pop)

cor(datos_quant)
##              lifeExp  gdpPercap         pop
## lifeExp   1.00000000  0.6786624  0.04755312
## gdpPercap 0.67866240  1.0000000 -0.05567560
## pop       0.04755312 -0.0556756  1.00000000

Interpretación breve

  • La correlación entre PIB per cápita y esperanza de vida es positiva y moderadamente fuerte.
  • La población (pop) no muestra una relación lineal tan clara con estas dos variables.

Gráfico de dispersión

ggplot(gap_2007, aes(x = gdpPercap, y = lifeExp)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "lm", se = FALSE, linewidth = 1) +
  scale_x_log10() +
  labs(
    title = "Relación entre PIB per cápita y esperanza de vida (2007)",
    x = "PIB per cápita (escala log10)",
    y = "Esperanza de vida (años)"
  ) +
  theme_minimal(base_size = 13)

Se observa una tendencia creciente: a mayor PIB per cápita, mayor esperanza de vida.


2.3 Variable cuantitativa vs cualitativa: esperanza de vida por continente

Ahora se analiza cómo se distribuye la esperanza de vida entre continentes mediante un diagrama de cajas (boxplot).

ggplot(gap_2007, aes(x = continent, y = lifeExp)) +
  geom_boxplot(fill = "#56B4E9", alpha = 0.7) +
  labs(
    title = "Esperanza de vida por continente (2007)",
    x = "Continente",
    y = "Esperanza de vida (años)"
  ) +
  theme_minimal(base_size = 13)

Comentarios

  • Europa y Oceanía presentan las medianas de esperanza de vida más altas.
  • África tiene la mediana más baja y la mayor dispersión hacia valores reducidos.
  • América y Asia se ubican en posiciones intermedias.

2.4 Dos variables cualitativas: tablas cruzadas y gráficos

Se crea una nueva variable cualitativa según si la esperanza de vida está por encima de la mediana mundial de 2007.

mediana_life <- median(gap_2007$lifeExp)

gap_2007 <- gap_2007 %>% 
  mutate(grupo_life = if_else(lifeExp > mediana_life, "Alta", "Baja"))

mediana_life
## [1] 71.9355

Tabla cruzada continente × grupo de esperanza de vida

tabla_cruzada <- table(gap_2007$continent, gap_2007$grupo_life)
tabla_cruzada
##           
##            Alta Baja
##   Africa      5   47
##   Americas   17    8
##   Asia       18   15
##   Europe     29    1
##   Oceania     2    0

Proporciones por continente

prop.table(tabla_cruzada, margin = 1)
##           
##                  Alta       Baja
##   Africa   0.09615385 0.90384615
##   Americas 0.68000000 0.32000000
##   Asia     0.54545455 0.45454545
##   Europe   0.96666667 0.03333333
##   Oceania  1.00000000 0.00000000

2.4.1 Gráfico tipo heatmap de la tabla cruzada

tabla_df <- as.data.frame(tabla_cruzada)

ggplot(tabla_df, aes(x = Var2, y = Var1, fill = Freq)) +
  geom_tile(color = "white") +
  geom_text(aes(label = Freq), color = "black", size = 4) +
  scale_fill_gradient(low = "#c7e9b4", high = "#081d58") +
  labs(
    title = "Tabla cruzada: Continente vs Grupo de esperanza de vida",
    x = "Grupo de esperanza de vida",
    y = "Continente",
    fill = "Frecuencia"
  ) +
  theme_minimal(base_size = 13)

Este gráfico muestra cuántos países de cada continente están en los grupos de esperanza de vida Alta y Baja.


2.4.2 Gráfico de barras apiladas con proporciones

ggplot(gap_2007, aes(x = continent, fill = grupo_life)) +
  geom_bar(position = "fill") +
  labs(
    title = "Proporción de países con esperanza de vida alta o baja por continente (2007)",
    x = "Continente",
    y = "Proporción de países",
    fill = "Grupo de esperanza de vida"
  ) +
  scale_y_continuous(labels = percent_format()) +
  theme_minimal(base_size = 13)

Interpretación

  • En África, la mayoría de países se encuentran en el grupo de esperanza de vida baja.
  • Europa y Oceanía concentran casi todos sus países en el grupo de esperanza de vida alta.
  • América y Asia presentan una mezcla, pero con predominio del grupo alto.

3. Pronósticos con series de tiempo

Para ilustrar el componente de pronóstico, se analizó la evolución de la esperanza de vida en Colombia.

3.1 Serie de esperanza de vida en Colombia

colombia <- gapminder %>% 
  filter(country == "Colombia") %>% 
  select(year, lifeExp)

colombia
## # A tibble: 12 × 2
##     year lifeExp
##    <int>   <dbl>
##  1  1952    50.6
##  2  1957    55.1
##  3  1962    57.9
##  4  1967    60.0
##  5  1972    61.6
##  6  1977    63.8
##  7  1982    66.7
##  8  1987    67.8
##  9  1992    68.4
## 10  1997    70.3
## 11  2002    71.7
## 12  2007    72.9
ts_colombia <- ts(colombia$lifeExp, start = 1952, frequency = 1)
ts_colombia
## Time Series:
## Start = 1952 
## End = 1963 
## Frequency = 1 
##  [1] 50.643 55.118 57.863 59.963 61.623 63.837 66.653 67.768 68.421 70.313
## [11] 71.682 72.889

Gráfico de la serie temporal

autoplot(ts_colombia) +
  labs(
    title = "Evolución de la esperanza de vida en Colombia (1952–2007)",
    x = "Año",
    y = "Esperanza de vida (años)"
  ) +
  theme_minimal(base_size = 13)

La serie muestra una tendencia creciente clara a lo largo del periodo analizado.


3.2 Modelo de Suavización Exponencial Simple (SES)

El modelo SES supone que la serie no presenta tendencia ni estacionalidad explícita. Se ajusta un modelo con pronósticos a 5 pasos.

modelo_ses <- ses(ts_colombia, h = 5)
summary(modelo_ses)
## 
## Forecast method: Simple exponential smoothing
## 
## Model Information:
## Simple exponential smoothing 
## 
## Call:
## ses(y = ts_colombia, h = 5)
## 
##   Smoothing parameters:
##     alpha = 0.9999 
## 
##   Initial states:
##     l = 50.6436 
## 
##   sigma:  2.3695
## 
##      AIC     AICc      BIC 
## 54.33555 57.33555 55.79027 
## 
## Error measures:
##                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
## Training set 1.85396 2.163068 1.854058 2.967531 2.967724 0.9167776 -0.110733
## 
## Forecasts:
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1964       72.88888 69.85221 75.92554 68.24470 77.53306
## 1965       72.88888 68.59460 77.18316 66.32135 79.45641
## 1966       72.88888 67.62957 78.14819 64.84546 80.93230
## 1967       72.88888 66.81600 78.96175 63.60122 82.17654
## 1968       72.88888 66.09923 79.67853 62.50501 83.27275
autoplot(modelo_ses) +
  labs(
    title = "Pronóstico de esperanza de vida en Colombia (SES)",
    x = "Año",
    y = "Esperanza de vida (años)"
  ) +
  theme_minimal(base_size = 13)

El modelo SES genera pronósticos prácticamente constantes alrededor del último nivel observado, por lo que puede subestimar la tendencia creciente.


3.3 Modelo de Holt

El método de Holt incorpora tanto nivel como tendencia, y es más adecuado para series que crecen o decrecen de forma sistemática.

modelo_holt <- holt(ts_colombia, h = 5)
summary(modelo_holt)
## 
## Forecast method: Holt's method
## 
## Model Information:
## Holt's method 
## 
## Call:
## holt(y = ts_colombia, h = 5)
## 
##   Smoothing parameters:
##     alpha = 0.9999 
##     beta  = 0.9999 
## 
##   Initial states:
##     l = 46.1852 
##     b = 4.4673 
## 
##   sigma:  1.0732
## 
##      AIC     AICc      BIC 
## 36.64952 46.64952 39.07405 
## 
## Error measures:
##                      ME      RMSE       MAE        MPE     MAPE      MASE
## Training set -0.2717248 0.8762912 0.6737951 -0.4476425 1.041755 0.3331721
##                     ACF1
## Training set -0.09922659
## 
## Forecasts:
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1964       74.09598 72.72058 75.47138 71.99248 76.19948
## 1965       75.30294 72.22770 78.37819 70.59976 80.00613
## 1966       76.50991 71.36410 81.65572 68.64007 84.37974
## 1967       77.71687 70.18421 85.24954 66.19666 89.23709
## 1968       78.92384 68.72458 89.12310 63.32541 94.52226
autoplot(modelo_holt) +
  labs(
    title = "Pronóstico de esperanza de vida en Colombia (Método de Holt)",
    x = "Año",
    y = "Esperanza de vida (años)"
  ) +
  theme_minimal(base_size = 13)

Los pronósticos de Holt son crecientes y se ajustan mejor al comportamiento histórico de la serie. El error de ajuste (MAPE y RMSE) es menor que en el modelo SES.


4. Conclusiones

  • Existe una correlación positiva entre el PIB per cápita y la esperanza de vida: los países más ricos tienden a presentar mayores niveles de longevidad.
  • El análisis por continente muestra desigualdades importantes: África concentra la mayor cantidad de países con esperanza de vida baja, mientras que Europa y Oceanía se ubican casi por completo en el grupo alto.
  • La serie temporal de Colombia evidencia una tendencia creciente sostenida en la esperanza de vida entre 1952 y 2007.
  • Entre los modelos de pronóstico utilizados, el método de Holt captura mejor la tendencia ascendente que la suavización exponencial simple, generando pronósticos más realistas hacia el futuro.

5. Anexo: código completo utilizado

En esta sección se recopilan los comandos principales empleados en el análisis.

# Carga de paquetes y datos
library(gapminder)
library(tidyverse)
library(forecast)
library(scales)
data(gapminder)

# Filtrado año 2007
gap_2007 <- gapminder %>% filter(year == 2007)

# Correlaciones
cor(gap_2007$gdpPercap, gap_2007$lifeExp)
## [1] 0.6786624
datos_quant <- gap_2007 %>% select(lifeExp, gdpPercap, pop)
cor(datos_quant)
##              lifeExp  gdpPercap         pop
## lifeExp   1.00000000  0.6786624  0.04755312
## gdpPercap 0.67866240  1.0000000 -0.05567560
## pop       0.04755312 -0.0556756  1.00000000
# Gráfico de dispersión
ggplot(gap_2007, aes(gdpPercap, lifeExp)) +
  geom_point() + geom_smooth(method = "lm", se = FALSE) +
  scale_x_log10()

# Boxplot por continente
ggplot(gap_2007, aes(continent, lifeExp)) +
  geom_boxplot()

# Grupo de esperanza de vida
mediana_life <- median(gap_2007$lifeExp)
gap_2007 <- gap_2007 %>%
  mutate(grupo_life = if_else(lifeExp > mediana_life, "Alta", "Baja"))

tabla_cruzada <- table(gap_2007$continent, gap_2007$grupo_life)

# Heatmap de la tabla cruzada
tabla_df <- as.data.frame(tabla_cruzada)
ggplot(tabla_df, aes(Var2, Var1, fill = Freq)) +
  geom_tile() +
  geom_text(aes(label = Freq))

# Serie de tiempo de Colombia
colombia <- gapminder %>%
  filter(country == "Colombia") %>%
  select(year, lifeExp)

ts_colombia <- ts(colombia$lifeExp, start = 1952, frequency = 1)

# Modelos de pronóstico
modelo_ses  <- ses(ts_colombia, h = 5)
modelo_holt <- holt(ts_colombia, h = 5)