Introducción

La fundación Gapminder es una organización sin fines de lucro con sede en Suecia que promueve el desarrollo global mediante el uso de estadísticas que pueden ayudar a reducir mitos comunes e historias sensacionalistas sobre la salud y la economía mundial. Una selección importante de datos ya está cargada en la librería dslabs en el data frame gapminder.

Nuestro caso será el resolver las siguientes dos pregunta:

  1. ¿Es razonable aun dividir el mundo entre países occidentales y países en desarrollo?
  2. ¿Es cierto que cada día estamos peor y los países ricos se hacen más ricos mientras los pobres se hacen más pobres?

El proceso que vamos a seguir para resolver las preguntas mencionadas será:

  1. Exploración de datos
  2. Entendimiento de los datos
  3. Análisis de datos hasta encontrar los relevantes para las resolver preguntas
  4. Visualización y resumen

Exploración de datos

La base de datos que utilizaremos se encuentra en el paquete dslabs y corresponde a la base gapminder que contiene información de la tasa de mortalidad infantil, expectativa de vida, fertilidad, población, PIB, entre otros, a nivel país para 185 países en el período de 1960 a 2016.

Primero podemos explorar lo datos con las funciones head, str y summary:

head (gapminder)
##               country year infant_mortality life_expectancy fertility
## 1             Albania 1960           115.40           62.87      6.19
## 2             Algeria 1960           148.20           47.50      7.65
## 3              Angola 1960           208.00           35.98      7.32
## 4 Antigua and Barbuda 1960               NA           62.97      4.43
## 5           Argentina 1960            59.87           65.39      3.11
## 6             Armenia 1960               NA           66.86      4.55
##   population          gdp continent          region
## 1    1636054           NA    Europe Southern Europe
## 2   11124892  13828152297    Africa Northern Africa
## 3    5270844           NA    Africa   Middle Africa
## 4      54681           NA  Americas       Caribbean
## 5   20619075 108322326649  Americas   South America
## 6    1867396           NA      Asia    Western Asia
str(gapminder)
## 'data.frame':    10545 obs. of  9 variables:
##  $ country         : Factor w/ 185 levels "Albania","Algeria",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ year            : int  1960 1960 1960 1960 1960 1960 1960 1960 1960 1960 ...
##  $ infant_mortality: num  115.4 148.2 208 NA 59.9 ...
##  $ life_expectancy : num  62.9 47.5 36 63 65.4 ...
##  $ fertility       : num  6.19 7.65 7.32 4.43 3.11 4.55 4.82 3.45 2.7 5.57 ...
##  $ population      : num  1636054 11124892 5270844 54681 20619075 ...
##  $ gdp             : num  NA 1.38e+10 NA NA 1.08e+11 ...
##  $ continent       : Factor w/ 5 levels "Africa","Americas",..: 4 1 1 2 2 3 2 5 4 3 ...
##  $ region          : Factor w/ 22 levels "Australia and New Zealand",..: 19 11 10 2 15 21 2 1 22 21 ...
summary(gapminder)
##                 country           year      infant_mortality life_expectancy
##  Albania            :   57   Min.   :1960   Min.   :  1.50   Min.   :13.20  
##  Algeria            :   57   1st Qu.:1974   1st Qu.: 16.00   1st Qu.:57.50  
##  Angola             :   57   Median :1988   Median : 41.50   Median :67.54  
##  Antigua and Barbuda:   57   Mean   :1988   Mean   : 55.31   Mean   :64.81  
##  Argentina          :   57   3rd Qu.:2002   3rd Qu.: 85.10   3rd Qu.:73.00  
##  Armenia            :   57   Max.   :2016   Max.   :276.90   Max.   :83.90  
##  (Other)            :10203                  NA's   :1453                    
##    fertility       population             gdp               continent   
##  Min.   :0.840   Min.   :3.124e+04   Min.   :4.040e+07   Africa  :2907  
##  1st Qu.:2.200   1st Qu.:1.333e+06   1st Qu.:1.846e+09   Americas:2052  
##  Median :3.750   Median :5.009e+06   Median :7.794e+09   Asia    :2679  
##  Mean   :4.084   Mean   :2.701e+07   Mean   :1.480e+11   Europe  :2223  
##  3rd Qu.:6.000   3rd Qu.:1.523e+07   3rd Qu.:5.540e+10   Oceania : 684  
##  Max.   :9.220   Max.   :1.376e+09   Max.   :1.174e+13                  
##  NA's   :187     NA's   :185         NA's   :2972                       
##              region    
##  Western Asia   :1026  
##  Eastern Africa : 912  
##  Western Africa : 912  
##  Caribbean      : 741  
##  South America  : 684  
##  Southern Europe: 684  
##  (Other)        :5586

Luego, podemos realizar un producto que sea más atractivo y que resuma las principales caracetrísticas de los datos. Como se muestra en la siguiente tabla:

gapminder %>% select (-year) %>% 
  mutate(gdp = gdp/1000000, population=population/1000000) %>%
  stargazer(type="text", 
            title="Descriptive statistics", digits=2, 
            out="Estadistica Descriptiva.html")
## 
## Descriptive statistics
## ====================================================================================
## Statistic          N       Mean     St. Dev.   Min  Pctl(25) Pctl(75)       Max     
## ------------------------------------------------------------------------------------
## infant_mortality 9,092    55.31      47.73    1.50   16.00     85.10      276.90    
## life_expectancy  10,545   64.81      10.67    13.20  57.50     73.00       83.90    
## fertility        10,358    4.08       2.03    0.84    2.20     6.00        9.22     
## population       10,360   27.01      106.66   0.03    1.33     15.23     1,376.05   
## gdp              7,573  147,954.40 697,912.80 40.40 1,845.78 55,399.65 11,744,219.00
## ------------------------------------------------------------------------------------

Entendimiento de los datos

Para entender cómo se comportan los datos, realizaremos un scatter-plot entre la esperanza de vida y la tasa de fertilidad de los países, tomando como referencia el año 1962.

De este gráfico podemos ver que los países donde las familias tienen 7.5 hijos tienen una esperanza de vida menor. Por otro lado, en los países con alta esperanza de vida el promedio de hijos es de menos de 2-3 hijos por familia.

Podemos ver esta misma relación, pero caracterizando aquellos países que poseen una alta tasa de fertilidad versus aquellos que poseen una baja tasa de fertilidad y aquellos países con una alta esperanza de vida y una baja esperanza de vida.

Para lo anterior, primero debemos identificar los países con alta/baja tasa de fertilidad y alta/baja esperanza de vida:

# Deciles for  "life_expectancy"
sample <- gapminder %>% arrange(life_expectancy) %>% 
  mutate(quantile_life=ntile(life_expectancy,10)) 

# Deciles for  "life_expectancy"
sample <- sample %>% arrange(fertility) %>% 
  mutate(quantile_fert=ntile(fertility,10)) 

Ahora, asignaremos dummys con valor 1 a los países con alta tasa de fertilidad y alta esperanza de vida, es decir, aquellos países que pertenecen al decil 5 o superior y 0 en caso contrario:

sample <- sample %>%
  mutate(high_life_expectancy=ifelse(quantile_life >=5,1,0)) %>%
  mutate(high_fertility=ifelse(quantile_fert >=5,1,0))

El resultado de dicho análisis lo vemos en el siguiente gráfico:

filter(sample, year == 1962) %>%
  ggplot(aes(fertility, life_expectancy, shape =factor(high_life_expectancy), 
             col=factor(high_fertility)), size=5) +
  geom_point()

Esto lo podemos comprar dependiendo del contente del país, para distinguir si hay diferencias en los territorios:

filter(sample, year == 1962) %>%
  ggplot(aes(fertility, life_expectancy, size =factor(high_life_expectancy), 
             shape=factor(high_fertility), color=continent)) +
  geom_point()

Si bien el gráfico anterior nos muestra una correlación entre las variables, no podemos ver cómo ha cambiado de un año a otro. Recordar que la información anterior solo representa lo sucedido en el año 1962. ¿Cómo vemos todos los años? Para esto podemos utilizar la función transition_time que me permite transitar entre diferentes años. Por lo tanto, al gráfico anterior le agregaremos la variable tiempo para analizar su variación a través de los años.

  ggplot(data=sample, aes(fertility, life_expectancy, size =factor(high_life_expectancy), 
             shape=factor(high_fertility), color=continent)) +
  geom_point() + transition_time(year) + labs(title = "Year: {frame_time}")

De acuerdo al gráfico anterior, nos muestran un cambio más evidente de la tasa de fertilidad y la esperanza de vida. Podemos notar que existe un aumento en la expectativa de vida para todos los países. Sin embargo, el tiempo en que demoran los países en aumentar su expectativa de vida es diferente, ya que los países de África y Asia se demoran más tiempo en relación a los países Europeos. Además, también se observa que la tasa de fertilidad disminuye.

El análisis anterior nos permite ir entendiendo que efectivamente existe un comportamiento diferente en la expectativa de vida y tasa de fertilidad de los países dependiendo de se ubicación. Por lo tanto, extenderemos este análisis para identificar el detalle el comportamiento de los países de Asia y Europa.

continents <- c("Europe", "Asia")
gapminder %>% 
  filter(continent %in% continents) %>%
  ggplot( aes(fertility, life_expectancy, col = continent)) +
  geom_point() +
  ggtitle("Life Expectancy versus Ferility: Asia and Europe {frame_time}") + 
  transition_time(year)

En clases lo vieron de la siguiente forma:

years <- c(1962, 1980, 1990, 2000, 2012)
continents <- c("Europe", "Asia")
p  <- gapminder %>% 
  filter(year %in% years & continent %in% continents) %>%
  ggplot( aes(fertility, life_expectancy, label=country,col = continent)) +
  geom_point() +
  ggtitle("Life Expectancy versus Ferility: Asia and Europe")+
  facet_wrap(~year) 

ggplotly(p)

Sin embargo, el análisis descrito anteriormente se mantiene y podemos notar que la variación en en las variables es menor en países Europeos que en países Asiáticos.

Continuando con esta línea, podemos identificar la tendencia entre la tasa de fertilidad y la expectativa de vida en diferentes países y su relación con el PIB per cápita y la población. Para simplificar el análisis, utilizaremos a Alemania y Corea como países de referencia.

countries <- c("South Korea","Germany")
data <- gapminder %>% mutate(pcgdp=(gdp/population)/1000)
labels <- data.frame(country = countries, x = c(1975,1967), y = c(60,80))
data %>% 
  filter(country %in% countries) %>% 
  ggplot(aes(year, life_expectancy, col = country)) +
  geom_col(aes(year,pcgdp, color=country, fill=country), position = "dodge")+
  geom_line() +
  geom_text(data = labels, aes(x, y, label = country), size = 5) +
  geom_point(aes(size=population/1000000), alpha=0.7) +
  guides(col = FALSE) + labs(size='Population (mm)') +
  ylab("Life Expentacy") + 
  ggtitle("Key Indicators")+
  theme(legend.position = "bottom")+
  scale_x_continuous(breaks=pretty(data$year, n = 15), name="year")+ 
  scale_y_continuous(sec.axis = sec_axis(~.*0.1, name = "Per Capita GDP"))+
  theme_light()

data %>% 
  filter(country %in% countries) %>% 
  ggplot(aes(year, fertility, col = country)) +
  geom_col(aes(year,pcgdp, color=country, fill=country), position = "dodge")+
  geom_line() +
  geom_text(data = labels, aes(x, y, label = country), size = 5) +
  geom_point(aes(size=population/1000000), alpha=0.7) +
  guides(col = FALSE) + labs(size='Population (mm)') +
  ylab("fertility") + 
  ggtitle("Key Indicators")+
  theme(legend.position = "bottom")+
  scale_x_continuous(breaks=pretty(data$year, n = 15), name="year")+ 
  scale_y_continuous(sec.axis = sec_axis(~.*0.1, name = "Per Capita GDP"))+
  theme_light()

Análisis de datos hasta encontrar los relevantes para las resolver preguntas

Si seguimos con la exploración de datos lograremos entender mucho mejor la información con la que disponemos. Finalmente, llegaremos a los datos del PIB y, a su vez, entenderemos que comparar el PIB por sí solo no tiene sentido porque hay países con más población que otros. Por lo tanto, es mucho más razonable comparar el PIB per cápita de cada país en cada año.

gapminder <- gapminder %>%  mutate(dollars_per_day = gdp/population/365)

Dado que tenemos esta variable, entonces nos podemos preguntar si Es diferente PIB per cápita depediendo de la región del país. Para esto, realizamos el siguiente gráfico:

past_year<- 1970

gapminder %>% 
  filter(year == past_year & !is.na(gdp)) %>%
  mutate(region = reorder(region, dollars_per_day, FUN = median)) %>%
  ggplot(aes(dollars_per_day, region)) +
  geom_point() +
  scale_x_continuous(trans = "log2")  

Existe una dicotomía entre el oeste y el resto: vemos dos grupos claros, con el grupo rico compuesto por América del Norte, Europa del Norte y Occidental, Nueva Zelanda y Australia. Definimos grupos en base a esta observación:

gapminder <- gapminder %>% 
  mutate(group = case_when(
    region %in% c("Western Europe", "Northern Europe","Southern Europe", 
                  "Northern America", 
                  "Australia and New Zealand") ~ "West",
    region %in% c("Eastern Asia", "South-Eastern Asia") ~ "East Asia",
    region %in% c("Caribbean", "Central America", 
                  "South America") ~ "Latin America",
    continent == "Africa" & 
      region != "Northern Africa" ~ "Sub-Saharan",
    TRUE ~ "Others"))

gapminder$group <- as.factor(gapminder$group)
levels(gapminder$group)
## [1] "East Asia"     "Latin America" "Others"        "Sub-Saharan"  
## [5] "West"

Ahora que tenemos a los territorios clasificados en grupos de acuerdo a su riqueza, podemos ver cómo se distribuye esta misma. Parra esto, podemos realizar un gráfico de cajas como se muestra en la primera figura o un gráfico de densidades como se obvserva en la segunda figura:

gapminder %>% 
  filter(year == past_year & !is.na(gdp)) %>%
  ggplot(aes(group, dollars_per_day)) +
  geom_boxplot() +
  geom_point(alpha = 0.5) +
  scale_y_continuous(trans = "log2") +
  xlab("Region") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

gapminder %>% 
  filter(year == past_year & !is.na(dollars_per_day)) %>%
  mutate(group = reorder(group, dollars_per_day, FUN = median)) %>%
  ggplot(aes(dollars_per_day, group, color = group, fill= group)) +
  geom_density_ridges(aes(fill=group)) + 
  scale_x_continuous(trans = "log2") 

Visualización y resumen

Para poder resolver la primera pregunta del caso tendríamos que comparar las distribuciones de los países de “occidente” versus los países en desarrollo.

Para esto vamos a crear un vector_occidente con el listado de regiones que entran a este categoría:

vector_occidente <- c("Western Europe", "Northern Europe", "Southern Europe", "Northern America", "Australia and New Zealand")

Vamos a utilizar también la función ifelse(test, yes, no) para crear una nueva columna de tal forma que si la región se encuentra en occidente guarde un valor, y si no está en occidente guarde otro valor.

gapminder %>% 
  mutate(dollars_per_day = (gdp/population)/365) %>% 
  filter(year == 2010 & !is.na(dollars_per_day)) %>% 
  mutate(grupo = ifelse(region %in% vector_occidente, "Occidente", "En Desarrollo"))

Ahora que ya tenemos cómo diferenciar a los países podemos ver su distribución hasta encontrar cómo responder a nuestra pregunta. Empezamos creando un histograma con escala logarítimica en el eje-x y lo separamos usando facet_grid en base al grupo al que pertenece:

gapminder %>% 
  mutate(dollars_per_day = (gdp/population)/365) %>% 
  filter(year %in% c(1970, 2010) & !is.na(dollars_per_day)) %>% 
  mutate(grupo = ifelse(region %in% vector_occidente, "Occidente", "En Desarrollo")) %>% 
  ggplot(aes(dollars_per_day)) +
  geom_histogram(binwidth = 1, color = "black") +
  scale_x_continuous(trans = "log2") +
  facet_grid(year ~ grupo)

Ambos grupos, tanto los de “Occidente” como los de “En Desarrollo” han mejorado en ese lapso de 40 años, pero los países en desarrollo han avanzado más que los países de occidente.

Hasta acá hemos asumido que todos los países que reportaron en el 2010 también reportaron data en el 1970. Para hacer la comparación más fina tenemos que buscar la distribución de países que tengan datos reportados tanto en 1970 como en el 2010.

Para ello, vamos a crear un vector que liste los países con data en 1970 y otro de los que tienen data en 2010 y luego buscamos la intersección.

country_list_1 <- gapminder %>% 
  filter(year == 1970 & !is.na(dollars_per_day)) %>% 
  pull(country)

country_list_2 <- gapminder %>% 
  filter(year == 2010 & !is.na(dollars_per_day)) %>% 
  pull(country)

country_list <- intersect(country_list_1, country_list_2)

Entonces, volvemos a crear nuestro histograma incluyendo solo a los países de esta lista.

gapminder %>% 
  mutate(dollars_per_day = (gdp/population)/365) %>% 
  filter(year %in% c(1970, 2010) & !is.na(dollars_per_day & country %in% country_list)) %>%
  mutate(grupo = ifelse(region %in% vector_occidente, "Occidente", "En Desarrollo")) %>% 
  ggplot(aes(dollars_per_day)) +
  geom_histogram(binwidth = 1, color = "black") +
  scale_x_continuous(trans = "log2") +
  facet_grid(year ~ grupo)

Vemos ahora más claramente con data comparable cómo hay más países dentro de la región en desarrollo que incrementaron el PBI per cápita, mucho más que los países en desarrollo. Pero aun esta primera inferencia es visual, necesitamos comparar cómo cambió la mediana, el rango, etc. Para ello usaremos un diagrama de cajas muy similar al anterior, pero esta vez editaremos geom_boxplot() para que nos muestre en un solo gráfico cómo ha cambiado desde 1970 a 2010 cada región.

gapminder %>% 
  filter(year %in% c(1970, 2010) & country %in% country_list) %>%
  mutate(group = reorder(group, dollars_per_day, FUN = median)) %>%
  mutate(year = factor(year)) %>%
  ggplot(aes(group, dollars_per_day, fill = year)) +
  geom_boxplot(outlier.shape = NA) +
  geom_point(aes(color=year), alpha=0.4) +
  geom_jitter(aes(color=year), width = 0.1, alpha = 0.2) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  scale_y_continuous(trans = "log2") +
  xlab("Region")+
  theme_light()

Si vemos en más detalles tenemos lo siguiente:

gapminder %>% 
  mutate(dollars_per_day = (gdp/population)/365) %>% 
  filter(year %in% c(1970, 2010) & !is.na(dollars_per_day) & country %in% country_list) %>% 
  mutate(region = reorder(region, dollars_per_day, FUN = median)) %>% 
  ggplot(aes(region, dollars_per_day)) +
  geom_boxplot(aes(region, dollars_per_day, fill=factor(year))) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  xlab("") +
  scale_y_continuous(trans = "log2")

Vemos cómo hay regiones dentro de Asia que han crecido substancialmente. Como sabemos por cultura general, algunos países de Asia son ya potencias, pero hoy con estos gráficos podemos entender bien cuánto ha cambiado hasta convertirse en potencia cada región.

Por lo tanto, ya podemos responder la primera pregunta del caso:

No es razonable seguir utilizando la categorización de “occidente” y “en desarrollo” puesto que cada vez hay más regiones que están mal representados por esas categorías, como el este de Asia.

Además, no es cierto que los países ricos se hacen más ricos mientras los pobres se hacer más pobres. Hemos visto que los países en desarrollo tienen incluso un crecimiento mayor que el crecimiento que tienen los países de occidente.