Environmental Kuznets Curve Hypothesis#

The Environmental Kuznets curve hypothesis that the economic development of a nation is associated with a downward-facing U-shape. The Y-axis is in terms of the level of environmental degradation (e.g pollution, water quality, deforestation. The X-axis would be the GDP/capita. The idea is that the environmental degradation worsens, until a certain level of income, and after which it gets better. In the US this could be seen in terms of air or water quality, where the skies or rivers were very polluted in the 1960s, until the Clean Air Act and Clean Water Act were passed and Air Quality and Water Quality improved. Another motivation for the downward slope would be the idea that at some point a wealthier society demands environmental improvements.
However - could this hold for the potentially most important Pollutant C02, the main driver of anthropogenic climate change. Controversially the impacts of global CO2 pollution are not experienced locally, but are experienced as global effects. So it is not clear whether the Environmental Kuznets hypothesis will hold.

Today, we’ll look to build an C02 Kuznets Curve (as below) for an association between the amount of CO2 emitted per capita (t/CO2) and the growing GDP per capita (USD). This dataset is collected from Our World in Data, a great source of all sorts of data types!

kuznets.png

Building our own Environmental Kuznets Curve#

We start by importing data on GDP per capita and Per Capita CO2 emissions for every country in the world for as long as it has been recorded.

co2_table = Table.read_table('co2-emissions-vs-gdp.csv').drop('145446-annotations','Total population (Gapminder, HYDE & UN)','Code')
co2_table = co2_table.relabeled('Entity', 'Country')
co2_table
Country Year Per capita CO2 emissions GDP per capita Continent
Abkhazia 2015 nan nan Asia
Afghanistan 1949 0.00191237 nan nan
Afghanistan 1950 0.010871 1156 nan
Afghanistan 1951 0.0116837 1170 nan
Afghanistan 1952 0.0115423 1189 nan
Afghanistan 1953 0.0132159 1240 nan
Afghanistan 1954 0.0130359 1245 nan
Afghanistan 1955 0.0186057 1246 nan
Afghanistan 1956 0.0218121 1278 nan
Afghanistan 1957 0.0343433 1253 nan

... (53427 rows omitted)

Low Income Countries#

Let’s start by selecting a set of Low Income Countries to graph a scatter plot on the movement of CO2 intensity per capita based on GDP per capita.

#Low-Income Nations
LIH_array = make_array('Haiti', 'Afghanistan','Rwanda','Pakistan', 'Nicaragua')
LIH_table = co2_table.where('Country', are.contained_in(LIH_array))
LIH_table = LIH_table.where('GDP per capita', are.above_or_equal_to(0)).where('Per capita CO2 emissions', are.above_or_equal_to(0))
plt.figure(figsize = (18,12), dpi=250)
LIH_table.scatter('GDP per capita', 'Per capita CO2 emissions',group='Country') 
<Figure size 4500x3000 with 0 Axes>
../../_images/886058d29e2a2de9e50f70e73b73fbcdabdfa5bd04783c64442a62d4161ccaea.png

Note that each dot represents a nation at a given level of emissions and GDP per capita

With these three countries we see a few different stories:

  • In Afghanistan, Haiti and Rwanda we see little income growth and little CO2 intensity growth with a slight upward trend

  • In Nicaragua we see some jumping around, in fact Nicaragua GDP per capita has gone up and down, as has CO2 per capita

  • In Pakistan, a larger and more populous country we see strong linear upward growth in both GDP per capita and CO2 per capita, with no signs of turning down

In these countries it is hard to tell the complete story without the exact time trend.

BRICS#

Let’s plot a similar scatter plot to examine some of the BRICS countries (rapidly growing upper middle income countries).

BRICS_array = make_array('Brazil','Russia','India','China','South Africa')
BRICS_table = co2_table.where('Country', are.contained_in(BRICS_array))
BRICS_table = BRICS_table.where('GDP per capita', are.above_or_equal_to(0)).where('Per capita CO2 emissions', are.above_or_equal_to(0))
plt.figure(figsize = (18,12), dpi=250)
BRICS_table.scatter('GDP per capita', 'Per capita CO2 emissions',group='Country')
<Figure size 4500x3000 with 0 Axes>
../../_images/911c49538076e28f1ce63d0a99bbe8f3141fe8d072c1ca9df23eab925b3d0334.png

The BRICS nations seem to have a variety of development pathways but all show the linear trend of increasing emissions as wealth grows.

  • Russia has an interesting dip while GDP per capita decrease and then increase again

  • South Africa has a recent period where growth in both GDP per capita and CO2 per capita have stagnated

  • China and India show linearly increasing trends, with China both wealthier and more CO2 intensive

Individual country graphs#

Let’s look at some individual countries, starting with the United States.
We can plot both total and logged quantities on a scatter plot:

United States#

#US Example + LOG
US_table = co2_table.where('Country', 'United States').where('Year', are.between(1800,2018))
US_table = US_table.with_column('LogGDP', np.log(US_table.column('GDP per capita'))).with_column('LogCO2',np.log(US_table.column('Per capita CO2 emissions')))
US_table.scatter('GDP per capita', 'Per capita CO2 emissions')
US_table.scatter('LogGDP', 'LogCO2')
plt.figure(figsize = (18,12), dpi=250)
<Figure size 4500x3000 with 0 Axes>
../../_images/2472e9f346aa1fff8a67a466365a00720916724224223bdb77decb4fd985385e.png ../../_images/5e95089c03ed55bcb30243e0957eeda205fe0a7abf1096b849a9831c988decf8.png
<Figure size 4500x3000 with 0 Axes>

Looks like we have a curve!

In the case of the US it does indeed look like the C02 per capita does indeed start to deline after about $40,000 Somewhere around 2000-2004 the CO2 emissions leveled off and then began to decline.

China#

In COP26, China has been a large part of the discussion (and emissions). Let’s have a look at their scatter plot!

#China Example + LOG
NO_table = co2_table.where('Country', 'China').where('Year', are.between(1800,2018))
NO_table = NO_table.with_column('LogGDP', np.log(NO_table.column('GDP per capita'))).with_column('LogCO2',np.log(NO_table.column('Per capita CO2 emissions')))
NO_table.scatter('GDP per capita', 'Per capita CO2 emissions')
NO_table.scatter('LogGDP', 'LogCO2')
plt.figure(figsize = (18,12), dpi=250)
<Figure size 4500x3000 with 0 Axes>
../../_images/82e01bfe04a84fc82b9fa63a9fbc8c89971eb0ea45f1ca78cfe67adf63f67b9a.png ../../_images/22385bfefb3cc6ae4d528e75a27958a1df21391437f52b2d9b1743499de29c8d.png
<Figure size 4500x3000 with 0 Axes>

Indeed it appears that China has an inflection point and is starting to level off in the Carbon intensity per capita

India#

What about India’s scatter plot?

#India Example + LOG
NO_table = co2_table.where('Country', 'India').where('Year', are.between(1800,2018))
NO_table = NO_table.with_column('LogGDP', np.log(NO_table.column('GDP per capita'))).with_column('LogCO2',np.log(NO_table.column('Per capita CO2 emissions')))
NO_table.scatter('GDP per capita', 'Per capita CO2 emissions')
NO_table.scatter('LogGDP', 'LogCO2')
plt.figure(figsize = (18,12), dpi=250)
<Figure size 4500x3000 with 0 Axes>
../../_images/8c8f88467026b798554e2e5f7e409a1faf004397b3f614fa3affbfa91e43653e.png ../../_images/1b9d2fcd687d9919fbb461de9c7f5355335d6de91d7180fee3b208c720e5f64c.png
<Figure size 4500x3000 with 0 Axes>

Let’s look at a set of other High Income Nations:

HIN_array = make_array('United States', 'Netherlands', 'United Kingdom','Germany','Canada')
HIN_table = co2_table.where('Country', are.contained_in(HIN_array))
HIN_table = HIN_table.where('GDP per capita', are.above_or_equal_to(0)).where('Per capita CO2 emissions', are.above_or_equal_to(0))
HIN_table.scatter('GDP per capita', 'Per capita CO2 emissions',group='Country')
plt.figure(figsize = (18,12), dpi=250)
<Figure size 4500x3000 with 0 Axes>
../../_images/5b8644169d2a112c62e0925f52aa3c383f393020a4108a6d81546d66d7bee259.png
<Figure size 4500x3000 with 0 Axes>

As in the US and Norway, these nations have experienced a boom, stagnation, and now to some extent a downward trend. Let’s finally plot all the previously observed nations together in one singular scatter plot:

ALL_array = np.append((np.append(LIH_array,BRICS_array)), HIN_array)
ALL_table = co2_table.where('Country', are.contained_in(ALL_array))
ALL_table = ALL_table.where('GDP per capita', are.above_or_equal_to(0)).where('Per capita CO2 emissions', are.above_or_equal_to(0))
ALL_table.scatter('GDP per capita', 'Per capita CO2 emissions',group='Country')
plt.figure(figsize = (18,12), dpi=250)
<Figure size 4500x3000 with 0 Axes>
../../_images/9cc095803daa7a9217c74d08bb3dbf31e37526c642c78900272dd92b934a8a18.png
<Figure size 4500x3000 with 0 Axes>

Here we see evidence for an Environmental Kuznets Curve.

It seems, at least to some extent, that as nations develop economically, the level of environmental degradation reaches a peak and then declines, mapping a downward-facing U-curve.

Criticism of the Environmental Kuznets Curve Hypothesis#

Some questions we ought to ask ourselves in the end are:

  • Do all types of environmental degradation follow the curve? What if we plot Energy, Land, & Resource usage?

  • What we plotted today shows the ratio between GDP and CO2 per capita, but what about the absolute numbers of emissions?

  • What is the true long-term shape of the curve? Could it reshape itself to an “N” as an economy passes a certain threshold?

  • What about its applicability on a global scale? Knowing that the HINs have a habit of exporting pollution to LINs, what will happen as LIN grow economically?

These are just some questions environmental economists have asked themselves throughout the years since the curve was hypothesized in 1955. Some, including Perman and Stern (2003) conclude that the level of environmental degradation has much more to do with a constant “battle” between scale and time than income alone. As nations scale up (BRICS, for instance) the growth results in higher emissions, while countries with lower growth (LIN & HIN) seem more influenced by the “time-effect”, which results in lower emissions. Others, among Krueger & Grossman, argue that there is “no evidence that environmental quality deteriorates steadily with economic growth.”

More on these theories can be found in the recommended readings below.

As data scientists motivated to help heal the plant with the tools of environmental economics, we can help to find these answers!

What’s next?#

If you are interested in this area, there are even more fascinating applications of Data Science to environmental topics such as: finding the social cost of carbon, the valuation of our environment, and the economics of emissions trading. Besides purely economical modeling, the field of environmental data science is rapidly growing as we collect more and more data on our planet and its resources. Applying the power of Satellite Imagery, Machine Learning, and Geographic Information Systems (GIS), one can follow both technology and policy-based paths, both ensured to have a positive impact in shaping a data-driven, sustainable future.