La curva de Kuznets
Branko Milanovic y Simon Kuznets son dos de los académicos más conocidos en los estudios sobre desigualdad. A cada uno de ellos se le conoce por identificar una determinada trayectoria de la desigualdad en un periodo de tiempo determinado:
- El elefante de Milanovic: La diferencia en porcentaje de ganancia entre la distribución por nivel de ingresos en 2008 y 1988, tiene forma de elefante.
- La curva de Kuznets A medida que la riqueza de un país crece con el proceso de industrialización, en una primera fase las desigualdades crecen y en una segunda fase decrecen, por lo que la relación entre crecimiento económico y desigualdades tiene forma de U invertida.
En esta práctica observaremos las trayectorias que describe Kuznets1. En primer lugar, cargaremos los paquetes que necesitamos.
#Recordad que los paquetes deben estar previamente instalados
library(readxl)
library(haven)
library(tidyr)
library(dplyr)
library(ggplot2)
library(wbstats)
La curva de Kuznets
Simon Kuznets formuló en 1955 la teoría que relaciona el progreso de un país y la desigualdad, esta tendría forma de U invertida. En una fase inicial de desarrollo económico, los países son pobres y hay pocas diferencias en el nivel de ingresos entre su población. La industrialización lleva a una segunda fase de desarrollo, en la que sólo una pequeña minoría puede sacar provecho de sus beneficios, por lo que las desigualdades crecerían en este segundo periodo. Con el progreso y el paso del tiempo llegaría a una tercera fase, en la que cada vez más personas podrían participar de los beneficios de la industrialización, de manera que las desigualdades se verían reducidas.
Estas son las conclusiones que sacó Kuznets a partir de observar la relación entre ingreso y desigualdades en Estados Unidos durante el período 1913-1948 en su obra Shares of Upper Income Groups in Income and Savings (Kuznets 1953). Su estudio ha sido replicado decenas de veces con resultados dispares. En este ejercicio intentaremos hacer una nueva réplica de la curva de Kuznets.
Ejercicio 1: En primer lugar, indaga sobre la obra de Kuznets a partir de los textos La Desigualdad entre Personas (Milanovic 2011) y El Capital del Siglo XXI (Piketty 2014) y responde a las siguientes preguntas:
- ¿Por qué la obra de Kuznets es revolucionaria desde un punto de vista empírico?
- Kuznets utiliza una fuente de información principal para elaborar su estudio. ¿De qué tipo de fuente se trata? Este tipo de fuente es incompleta para saber las desigualdades en la población. ¿Qué otra fuente necesitó? ¿Por qué?
- En la relación de causalidad que estudia Kuznets, ¿Cuál es la variable dependiente y cuál es la variable independiente?
- Describe brevemente qué es el índice de Gini.
Para replicar el estudio de Kuznets, necesitaremos estudiar la relación entre dos variables numéricas:
- Desigualdad: Medida con el índice de Gini.
- Desarrollo: Medida con el PIB per cápita.
Datos de desigualdad
Una de las series temporales más largas que contiene información sobre el índice de Gini la encontramos en el All the Ginis Dataset del Banco Mundial.
Ejercicio 2: Accede a la página web All the Ginis Dataset y busca en la pestaña Data & Resources el documento que contiene la descripción de la base de datos:
- ¿De cuántas bases de datos diferentes han obtenido los índices de Gini para crear All the Ginis Dataset?
- ¿Cuántas observaciones Gini recoge en total la base de datos?
- ¿Cuál es el nombre de la variable que engloba todos los Gini de las otras bases de datos?
- Algunas variables que nos encontraremos en la base de datos llevan los prefijos
Dhh
,Dinc
oDgross
. Estas variables pueden tomar el valor 1 o el valor 0. Explica el significado de estas variables a partir de la Digresión 1 de Desigualdad Global (Milanovic 2016: 26-31). ¿Por qué es relevante esta distinción? - Supón que tenemos dos hipotéticos países que tienen el mismo Gini pero que uno tiene el valor 1 a la variable
Dinc
y el otro el valor 0. ¿Tendrían la misma desigualdad? Razona tu respuesta. - ¿Cuál es la década donde tenemos más observaciones?
- ¿De qué región (según la nomenclatura utilizada) tenemos más observaciones en relación al número de países?
Ahora que ya tenemos una orientación general sobre los datos que tenemos que tratar, ya podemos descargar la base de datos y limpiarla de variables que no nos interesen y de datos perdidos. En el siguiente código hemos realizado las siguientes operaciones: hemos descargado la base de datos, hemos seleccionado algunas de las variables y hemos eliminado todos los NA
. El resultado es el marco de datos ginis
, donde podemos observar sus primeras filas en la siguiente Tabla 1.
download.file("https://development-data-hub-s3-public.s3.amazonaws.com/ddhfiles/94536/allginis_2013.xls",
"allginis.xls")
ginis <- read_xls("allginis.xls", sheet = 2) %>%
select(country:year, Giniall) %>% #seleccionamos algunas variables
filter(!is.na(Giniall)) #eliminamos datos perdidos
country | contcod | region | year | Giniall |
---|---|---|---|---|
Albania | ALB | Eastern Europe | 1997 | 28.6 |
Albania | ALB | Eastern Europe | 2002 | 29.4 |
Albania | ALB | Eastern Europe | 2004 | 31.1 |
Albania | ALB | Eastern Europe | 2005 | 31.7 |
Albania | ALB | Eastern Europe | 2008 | 30.4 |
Algeria | DZA | Africa | 1988 | 38.8 |
Algeria | DZA | Africa | 1995 | 34.6 |
Angola | AGO | Africa | 1995 | 40.2 |
Angola | AGO | Africa | 2000 | 58.1 |
Argentina | ARG | Latin America | 1974 | 34.5 |
Un vistazo rápido al marco de datos con head(gini, 10)
o glimpse(gini)
nos permite comprobar que tenemos muy pocos casos de algunos países. Ya sólo al principio de la lista vemos que tenemos datos de Albania en sólo cinco años, por dos de Argelia y dos de Angola. Ya de entrada, sabemos que será difícil observar la evolución de la desigualdad en algunos países si tenemos tan pocos puntos en el tiempo.
Si utilizamos range(gini$year)
vemos que tenemos datos desde 1950 hasta 2012, aunque no tenemos la misma cantidad de observaciones de todos los países. Podemos investigar de varios años tenemos registro en cada país con count()
. Esta función nos hace un recuento de casos por cada variable categórica que indicamos. Siempre que ponemos al final de un código %>% View()
podemos ver los resultados en una ventana nueva con formato de hoja de cálculo. En la Tabla 2 observamos los resultados.
ginis %>%
count(country, sort = TRUE) %>% #pedimos un recuento y que nos ordene los resultados
head(30) %>% View() #pedimos las primeras 30 observaciones y visualizar la tabla en una ventana aparte
country | n |
---|---|
United States | 62 |
United Kingdom | 50 |
Bulgaria | 42 |
India | 42 |
Brazil | 36 |
Taiwan, China | 34 |
Italy | 33 |
Poland | 33 |
China | 32 |
Japan | 31 |
Costa Rica | 30 |
Mexico | 30 |
Argentina | 28 |
Venezuela, Rep | 28 |
Denmark | 27 |
Iran,IslamicRep. | 27 |
Netherlands | 27 |
Colombia | 26 |
Sweden | 26 |
Canada | 25 |
Germany | 25 |
Hungary | 25 |
Chile | 24 |
Honduras | 23 |
Norway | 23 |
Peru | 23 |
Pakistan | 22 |
El Salvador | 21 |
Panama | 21 |
Spain | 21 |
Ejercicio 3: Como podéis comprobar, tenemos más datos de algunos países que de otros. Por algún motivo, entonces, desde 1950 hasta 2012 muchos datos están perdidos.
- ¿Sabrías decir qué características tienen en común, en general, los países de los que tenemos más datos? ¿Y los países de los que tenemos menos datos? Pon algunos ejemplos de acuerdo con los resultados que has obtenido en la Tabla 2.
- Con el siguiente código hemos pedido el año más antiguo (
min()
) y el año reciente (max()
) de los que tenemos datos en cada país, así como el recuento de casos (n()
). Seleccionar un país que tenga menos de 25 casos y, a partir de los datos generados por el código, intenta explicar desde un punto de vista histórico por qué este país concreto tiene más/menos datos en relación a otros países .
ginis %>%
group_by(country) %>%
summarize(min = min(year),
max = max(year),
n = n()) %>%
arrange(desc(n))
Datos de desarrollo
Tal como hizo Kuznets en su estudio, utilizaremos el PIB per cápita como medida de desarrollo económico. Aunque el PIB per cápita ha tenido y está teniendo cada vez más críticas como medida de desarrollo (Stiglitz, Sen, and Fitoussi 2010), también es cierto que sigue siendo una medida sencilla, fiable, disponible y bastante aceptada por académicos y decisores públicos.
Para obtener los datos del PIB per cápita, utilizaremos el paquete wbstats que nos proporciona datos del Banco Mundial. Con la función wbsearch()
buscamos indicadores que contengan las palabras GDP, cápita y ppp. Vemos que obtenemos cinco resultados.
wb_search("gdp.*capita.*ppp")
## # A tibble: 4 x 3
## indicator_id indicator indicator_desc
## <chr> <chr> <chr>
## 1 6.0.GDPpc_cons… GDP per capita, PPP (co… GDP per capita based on purchasing p…
## 2 NY.GDP.PCAP.PP… GDP per capita, PPP (cu… This indicator provides per capita v…
## 3 NY.GDP.PCAP.PP… GDP per capita, PPP (co… GDP per capita based on purchasing p…
## 4 NY.GDP.PCAP.PP… GDP per capita, PPP ann… Annual percentage growth rate of GDP…
Nos interesan los datos de PIB per cápita a precios constantes, pero como puede observarse en el resultado tenemos tres variables que parece que nos ofrezcan exactamente lo mismo. Como no estamos seguros de qué variable escoger, descargaremos los cinco resultados y los compararemos entre ellos para tener más clara nuestra elección. En el siguiente código hacemos los siguientes procedimientos:
- Guardamos los códigos de los indicadores al objeto
gdpcap
. Teclead el nombre del nuevo objeto para comprobar que efectivamente contiene los códigos de los indicadores. - Con la función
wb()
descargamos el marco de datos que llamaremosincome
. Dentro de la función especificamos el nombre del vector donde hemos guardado los indicadores. - A continuación separamos (
spread()
) los indicadores para que cada variable esté en una columna diferente y pedimos un sumario.
gdpcap <- wb_search("gdp.*capita.*ppp") %>% pull(indicator_id)
income <- wb_data(indicator = gdpcap, return_wide = F) %>%
mutate(date = as.numeric(date)) %>%
as_tibble()
income %>%
pivot_wider(names_from = indicator_id, values_from = value) %>%
summary()
## indicator iso2c iso3c country
## Length:29606 Length:29606 Length:29606 Length:29606
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## date unit obs_status footnote
## Min. :1960 Length:29606 Length:29606 Length:29606
## 1st Qu.:1975 Class :character Class :character Class :character
## Median :1990 Mode :character Mode :character Mode :character
## Mean :1990
## 3rd Qu.:2005
## Max. :2020
##
## last_updated 6.0.GDPpc_constant NY.GDP.PCAP.PP.CD NY.GDP.PCAP.PP.KD
## Min. :2013-02-22 Min. : 3475 Min. : 285.6 Min. : 436.7
## 1st Qu.:2021-07-21 1st Qu.: 6451 1st Qu.: 2723.4 1st Qu.: 3496.6
## Median :2021-07-21 Median : 9254 Median : 7707.2 Median : 10201.3
## Mean :2020-09-09 Mean : 9909 Mean : 14950.4 Mean : 17877.8
## 3rd Qu.:2021-07-21 3rd Qu.:12900 3rd Qu.: 20266.7 3rd Qu.: 25759.3
## Max. :2021-07-21 Max. :21980 Max. :154095.2 Max. :162915.8
## NA's :29366 NA's :24004 NA's :23917
## NY.GDP.PCAP.PP.KD.ZG
## Min. :-50.290
## 1st Qu.: -1.453
## Median : 1.504
## Mean : 1.405
## 3rd Qu.: 4.037
## Max. : 92.586
## NA's :27433
Ejercicio 4: Investigad el marco de datos income
con las funciones head()
y glimpse()
, así como las estadísticas descriptivas de los indicadores por separado que hemos obtenido con summary()
.
- ¿Cuál es el indicador que nos ha eliminado? ¿Qué información contenía?
- Si os fijáis, en el marco de datos original
income
no tenemos las variables del PIB per cápita separadas, cada una en una columna diferente. Todas nos han venido agrupadas en una columna que hemos tenido que separar para tener cada variable en una columna diferente. ¿Cuál es el nombre la variable que contenía el código de los indicadores que hemos tenido que separar? - Tenemos dos variables con códigos de países. ¿Cuáles son?
- ¿Por qué es preferible utilizar datos a precios constantes en lugar de precios corrientes a la hora de estudiar el desarrollo económico?
- ¿Cuántas datos perdidos (
NA
) tiene cada variable? - Teniendo en cuenta toda esta información, ¿Con qué variable te quedarías de las cuatro que tenemos disponibles? Indica el código del indicador y justifica la respuesta.
- Con lo aprendido en este ejercicio, utiliza el siguiente código para buscar en la base de datos del Banco Mundial con
wbsearch ()
y encuentra un indicador que te resulte interesante. Describe el marco de datos resultante con las funcioneshead()
,glimpse()
ysummary()
.
wbsearch("?????????") #escoge los términos a buscar e identifica el código del indicador que te interese
# limita la búsqueda tanto como necestites con .* entre palabras: "palabra1.*palabra2.*palabra3"
prueba <- wb(indicator = "????????") %>% #introduce el código del indicador
as_tibble()
head(prueba)
glimpse(prueba)
summary(prueba)
La curva
Hasta ahora, en esta actividad nos hemos dedicado a recoger los datos que necesitábamos para crear la curva de Kuznets. En el primer apartado hemos obtenido los datos de desigualdad y en el segundo apartado hemos recogido datos de desarrollo. Con esto ya podemos crear una curva de Kuznets:
- a nivel mundial, que nos explique qué relación han mantenido desarrollo y desigualdad con todos los datos que tenemos disponibles.
- en un país, que nos explique la relación entre desarrollo y desigualdad en un caso concreto.
Por eso tendremos que unir los dos marcos de datos creados anteriormente en el nuevo marco de datos incgini
, que vemos en la Tabla 3.
incgini <- income %>%
filter(indicator_id == "NY.GDP.PCAP.PP.KD") %>%
transmute(iso3c, year = date, gdpcap = value) %>%
inner_join(ginis, by = c("iso3c" = "contcod", "year"))
iso3c | year | gdpcap | country | region | Giniall |
---|---|---|---|---|---|
ALB | 2008 | 9912.577 | Albania | Eastern Europe | 30.4 |
ALB | 2005 | 8040.879 | Albania | Eastern Europe | 31.7 |
ALB | 2004 | 7580.629 | Albania | Eastern Europe | 31.1 |
ALB | 2002 | 6754.536 | Albania | Eastern Europe | 29.4 |
ALB | 1997 | 4400.578 | Albania | Eastern Europe | 28.6 |
DZA | 1995 | 7935.179 | Algeria | Africa | 34.6 |
DZA | 1988 | NA | Algeria | Africa | 38.8 |
AGO | 2000 | 4727.966 | Angola | Africa | 58.1 |
AGO | 1995 | 4139.641 | Angola | Africa | 40.2 |
ARG | 2012 | 24118.868 | Argentina | Latin America | 42.6 |
Ejercicio 5: Responde a las siguientes preguntas utilizando las funciones que se indican sobre si el objeto a explorar en cada caso es el marco de datos incgini
o bien una variable concreta del marco de datos (incgini$nombre_variable
):
- ¿Cuántas observaciones tenemos en este nuevo marco de datos?
glimpse()
odim()
- ¿Cuántas observaciones tenemos para cada región?
table()
- ¿Cuántos países diferentes tenemos?
n_distinct()
- ¿Cuál es el año máximo y mínimo?
range()
- ¿Cuál es el PIB per cápita máximo y mínimo?
range()
- ¿Cuál es la observación con mayor PIB per cápita? ¿Y con menor? Deberás aplicar
min()
ymax()
a la función siguiente:
incgini[which(incgini$gdpcap == ???(incgini$gdpcap)),]
incgini
tiene pocas observaciones en relación a los marcos de datos de origen. Esto se debe, principalmente, porque en algunos casos teníamos información del desarrollo del país pero no de su desigualdad y en otros casos teníamos información de la desigualdad del país pero no de su desarrollo. Esto nos ha reducido drásticamente las observaciones cuando hemos agrupado los datos.No obstante, podemos intentar crear la curva de Kuznets con los datos disponibles con un diagrama de dispersión que encontraremos en la Figura 1.
- Ubicaremos
gdpcap
al eje de las x. giniall
al eje de las y.- Además, aprovecharemos la columna
region
para señalar la región en el color de los puntos. - La curva la crearemos mediante
geom_smooth()
. - Aplicaremos la escala logarítmica en el eje de las x para representar mejor los valores de la distribución (tiene una asimetría negativa) y para representar mejor la diferencia en los efectos que tiene una unidad adicional en términos de PIB per cápita en los valores bajos y los valores altos de la distribución.
incgini %>%
ggplot(aes(x = gdpcap, y = Giniall)) + #ejes x e y
geom_point(aes(col = region), alpha = .5) + #los puntos
geom_smooth(se = FALSE) + #la curva
scale_x_log10() + #escala logarítmica
theme_light() +
theme(legend.position = "bottom",
legend.title = element_blank())
La curva de Kuznets se distingue muy tímidamente en el gráfico. Parece que las desigualdades alcanzan su pico a los 10.000 dólares per cápita y a partir de entonces se reducen conforme el desarrollo aumenta.
Ejercicio 6: Observa la Figura 1 y responde a las siguientes preguntas:
- Teniendo en cuenta los criterios de causalidad, ¿Por qué dirías que hemos ubicado
gdpcap
al eje de las x yginiall
al eje de las y? - Interpreta el escala logarítmica del eje de las x. ¿Qué significa 1e+03, 1e+04 y 1e+05? Intenta encontrar la lógica asociada y explícala.
- Parece que hay un patrón muy claro de las desigualdades por región geográfica. Explica, por cada región, donde están ubicadas la mayoría de las observaciones según los dos ejes del gráfico.
- Añade la siguiente línea de código entre la primera y la segunda línea del código que hemos utilizado para crear el gráfico. Elige una región y reproduce el gráfico de nuevo. Comenta el gráfico. ¿Se observa la curva de Kuznets en la región elegida?
filter(region = "???????") %>%
- ¿Cómo mejorarías la validez de la relación? Piensa en algún indicador más válido que el PIB per cápita (bien sea un indicador dentro de la familia del PIB u otro tipo de indicador).
Caso de estudio
Para hacer el ejercicio final utilizaremos otra fuente de información muy utilizada en estudios de desarrollo económico: las Penn World Tables v9.1 (PWT) (Feenstra, Inklaar, and Timmer 2015), que contiene una serie temporal más larga que la que hemos utilizado hasta ahora del Banco Mundial. Esto nos permitirá tener datos anteriores a 1990 en algunos países.
En el siguiente código descargamos el archivo de la web de PWT y unimos los datos con los del marco de datos ginis
para crear el marco de datos pwtgini
. Aplicad el código que hemos utilizado en el Ejercicio 3 para ver el año mínimo, el año máximo y el número de observaciones para cada país. Encontraréis el resultado en la Tabla 4.
download.file("https://www.rug.nl/ggdc/docs/pwt91.dta",
"pwt91.dta")
pwt <- read_dta("pwt91.dta") %>%
mutate(gdpcap = rgdpo / pop) %>% #dividimos el PIB entre la población para obtener el PIB per cápita
select(countrycode, year, gdpcap) %>%
filter(!is.na(gdpcap))
pwtgini <- pwt %>%
inner_join(ginis, by = c("countrycode" = "contcod", "year"))
country | min | max | n |
---|---|---|---|
United States | 1950 | 2011 | 62 |
United Kingdom | 1961 | 2010 | 50 |
India | 1951 | 2009 | 42 |
Bulgaria | 1970 | 2008 | 37 |
Brazil | 1960 | 2011 | 36 |
Taiwan, China | 1964 | 2008 | 34 |
Italy | 1967 | 2010 | 33 |
Poland | 1976 | 2009 | 33 |
China | 1953 | 2007 | 32 |
Japan | 1962 | 2008 | 31 |
Costa Rica | 1961 | 2010 | 30 |
Mexico | 1950 | 2010 | 30 |
Argentina | 1974 | 2012 | 28 |
Venezuela, Rep | 1962 | 2011 | 28 |
Denmark | 1963 | 2008 | 27 |
Iran,IslamicRep. | 1969 | 2008 | 27 |
Netherlands | 1962 | 2008 | 27 |
Colombia | 1964 | 2011 | 26 |
Sweden | 1963 | 2008 | 26 |
Canada | 1965 | 2008 | 25 |
Germany | 1950 | 2008 | 25 |
Chile | 1968 | 2011 | 24 |
Honduras | 1968 | 2011 | 23 |
Hungary | 1972 | 2008 | 23 |
Norway | 1962 | 2008 | 23 |
Peru | 1961 | 2011 | 23 |
Pakistan | 1963 | 2008 | 22 |
El Salvador | 1965 | 2010 | 21 |
Panama | 1969 | 2012 | 21 |
Spain | 1965 | 2010 | 21 |
El país del que disponemos más observaciones es Estados Unidos. En la Figura 2 hemos filtrado los datos por el país en cuestión y hemos pedido un diagrama de líneas (geom_path()
) que nos muestra el recorrido que ha seguido, año tras año, la relación entre PIB per cápita y el índice de Gini. Según los datos que podemos aportar observamos que las desigualdades en Estados Unidos no se han reducido conforme ha ido avanzando el desarrollo económico del país, sino que han aumentado. Estas conclusiones distan mucho de los datos observados por Kuznets en el periodo 1913-1948, que originaron la teoría conocida como la curva de Kuznets.
pwtgini %>%
filter(country == "United States") %>%
ggplot(aes(x = gdpcap, y = Giniall)) +
geom_path(alpha = 0.2, size = 2, lineend = "round", aes(col = year), show.legend = FALSE) +
geom_text(aes(label = year), size = 3, check_overlap = TRUE,
position = position_jitter(width=0.5,height=0.5),
data = filter(pwtgini, country == "United States", year %in% seq(1950, 2010, 5))) +
labs(title = "Evolución del índice de Gini en los Estados Unidos según el PIB per càpita (1950-2011)",
x = "PIB per capita", y = "Índice de Gini") +
theme_bw()
EJERCICIO FINAL: A partir del código que hemos utilizado para crear la Figura 2, elabora un gráfico con otro país que tenga un mínimo de 20 observaciones.
- Cambia la transparencia (
alpha
puede variar entre 0 y 1) y el espesor (size
debe ser superior a 0) de la línea. - Cambiar el tamaño del texto (
size
debe ser superior a 0). - Cambia el título del gráfico.
- Comenta el gráfico: ¿De qué años tenemos datos? ¿Qué trayectoria se dibuja? ¿Hay cambios repentinos? ¿Quedaría validada la teoría de Kuznets en el caso del país que has elegido?
Referencias
Esta actividad está elaborada con propósitos estrictamente docentes. Las operaciones que se realizan no pretenden tener validez desde un punto de vista académico↩︎