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:
El proceso que vamos a seguir para resolver las preguntas mencionadas será:
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:
%>% select (-year) %>%
gapminder 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
## ------------------------------------------------------------------------------------
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"
<- gapminder %>% arrange(life_expectancy) %>%
sample mutate(quantile_life=ntile(life_expectancy,10))
# Deciles for "life_expectancy"
<- sample %>% arrange(fertility) %>%
sample 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.
<- c("Europe", "Asia")
continents %>%
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:
<- c(1962, 1980, 1990, 2000, 2012)
years <- c("Europe", "Asia")
continents <- gapminder %>%
p 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.
<- c("South Korea","Germany")
countries <- gapminder %>% mutate(pcgdp=(gdp/population)/1000)
data <- data.frame(country = countries, x = c(1975,1967), y = c(60,80))
labels %>%
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()
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 %>% mutate(dollars_per_day = gdp/population/365) gapminder
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:
<- 1970
past_year
%>%
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(
%in% c("Western Europe", "Northern Europe","Southern Europe",
region "Northern America",
"Australia and New Zealand") ~ "West",
%in% c("Eastern Asia", "South-Eastern Asia") ~ "East Asia",
region %in% c("Caribbean", "Central America",
region "South America") ~ "Latin America",
== "Africa" &
continent != "Northern Africa" ~ "Sub-Saharan",
region TRUE ~ "Others"))
$group <- as.factor(gapminder$group)
gapminderlevels(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")
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:
<- c("Western Europe", "Northern Europe", "Southern Europe", "Northern America", "Australia and New Zealand") vector_occidente
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.
<- gapminder %>%
country_list_1 filter(year == 1970 & !is.na(dollars_per_day)) %>%
pull(country)
<- gapminder %>%
country_list_2 filter(year == 2010 & !is.na(dollars_per_day)) %>%
pull(country)
<- intersect(country_list_1, country_list_2) country_list
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.