Sovereign Carbon Emissions

Author

Okung Obang

Introduction

The difference in carbon emissions between developing and developed nations has been one of the issues at the forefront of net-zero emission negotiations. But, when we look at OECD data, it becomes clear that developed nations have a clear advantage in claiming that they are combating climate change given that carbon emissions are measured on a basis of emissions against GDP PPP. When we look at the big picture, the international community should attempt to find better metrics to evaluate a country’s inadvertent contributions to climate change and their obligations in reaching net-zero emissions.

Sovereign Carbon Emissions

Code
# Install necessary packages
install.packages('rnaturalearth', repos = "http://cran.us.r-project.org")
Installing package into 'C:/Users/okung/AppData/Local/R/win-library/4.2'
(as 'lib' is unspecified)
package 'rnaturalearth' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\okung\AppData\Local\Temp\RtmpWimzKE\downloaded_packages
Code
install.packages('wbstats', repos = "http://cran.us.r-project.org")
Installing package into 'C:/Users/okung/AppData/Local/R/win-library/4.2'
(as 'lib' is unspecified)
package 'wbstats' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\okung\AppData\Local\Temp\RtmpWimzKE\downloaded_packages
Code
install.packages('here', repos = "http://cran.us.r-project.org")
Installing package into 'C:/Users/okung/AppData/Local/R/win-library/4.2'
(as 'lib' is unspecified)
package 'here' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\okung\AppData\Local\Temp\RtmpWimzKE\downloaded_packages
Code
install.packages('readxl1', repos = "http://cran.us.r-project.org")
Installing package into 'C:/Users/okung/AppData/Local/R/win-library/4.2'
(as 'lib' is unspecified)
Warning: package 'readxl1' is not available for this version of R

A version of this package for your version of R might be available elsewhere,
see the ideas at
https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
Code
# Load necessary library
library(tidyverse) 
Warning: package 'tidyverse' was built under R version 4.2.2
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0     ✔ purrr   1.0.1
✔ tibble  3.1.8     ✔ dplyr   1.1.0
✔ tidyr   1.3.0     ✔ stringr 1.5.0
✔ readr   2.1.2     ✔ forcats 0.5.2
Warning: package 'ggplot2' was built under R version 4.2.2
Warning: package 'tidyr' was built under R version 4.2.2
Warning: package 'purrr' was built under R version 4.2.2
Warning: package 'dplyr' was built under R version 4.2.2
Warning: package 'stringr' was built under R version 4.2.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
Code
library(janitor)
Warning: package 'janitor' was built under R version 4.2.2

Attaching package: 'janitor'

The following objects are masked from 'package:stats':

    chisq.test, fisher.test
Code
library(here)
Warning: package 'here' was built under R version 4.2.3
here() starts at C:/Users/okung/OneDrive/Johns Hopkins - SAIS/2022-2023/SP23/Sustainable Finance/Week 7
Code
library(readxl)
Warning: package 'readxl' was built under R version 4.2.2
Code
library(rnaturalearth)
Warning: package 'rnaturalearth' was built under R version 4.2.3
Code
library(countrycode)
Warning: package 'countrycode' was built under R version 4.2.2
Code
library(wbstats)
Warning: package 'wbstats' was built under R version 4.2.3
Code
# Open processed data

pcaf <- read_csv("C:/Users/okung/OneDrive/Johns Hopkins - SAIS/2022-2023/SP23/Sustainable Finance/Week 7/ipcc_wb_imf_processed.csv")
Rows: 16918 Columns: 12
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (8): IPCC_annex, C_group_IM24_sh, Countrcode_A3, Country Name, Substance...
dbl (4): year, CO2 Emissions, GDP PPP, GDP, bn of USD

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Code
glimpse(pcaf)
Rows: 16,918
Columns: 12
$ IPCC_annex       <chr> "Non-Annex_I", "Non-Annex_I", "Non-Annex_I", "Non-Ann…
$ C_group_IM24_sh  <chr> "Rest Central America", "Rest Central America", "Rest…
$ Countrcode_A3    <chr> "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW…
$ `Country Name`   <chr> "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba",…
$ Substance        <chr> "CO2", "CO2", "CO2", "CO2", "CO2", "CO2", "CO2", "CO2…
$ year             <dbl> 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978,…
$ `CO2 Emissions`  <dbl> 95.06542, 94.50371, 105.84781, 109.86386, 99.97718, 1…
$ `Country Code`   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `Indicator Name` <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `Indicator Code` <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `GDP PPP`        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ `GDP, bn of USD` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
Code
pcaf <- pcaf |>
  mutate(region = countrycode(sourcevar = `Country Name`,
                              origin = "country.name",
                              destination = "region"))
Warning: There were 2 warnings in `mutate()`.
The first warning was:
ℹ In argument: `region = countrycode(...)`.
Caused by warning in `countrycode_convert()`:
! Some values were not matched unambiguously: Advanced economies, Africa (Region), Africa Eastern and Southern, Africa Western and Central, Arab World, ASEAN-5, Asia and Pacific, Australia and New Zealand, Caribbean, Caribbean small states, Central America, Central Asia and the Caucasus, Central Europe and the Baltics, Early-demographic dividend, East Asia, East Asia & Pacific, East Asia & Pacific (excluding high income), East Asia & Pacific (IDA & IBRD countries), Eastern Europe, Emerging and Developing Asia, Emerging and Developing Europe, Emerging market and developing economies, Euro area, Europe, Europe & Central Asia, Europe & Central Asia (excluding high income), Europe & Central Asia (IDA & IBRD countries), European Union, Fragile and conflict affected situations, Heavily indebted poor countries (HIPC), High income, IBRD only, IDA & IBRD total, IDA blend, IDA only, IDA total, Int. Aviation, Int. Shipping, Late-demographic dividend, Latin America & Caribbean, Latin America & Caribbean (excluding high income), Latin America & the Caribbean (IDA & IBRD countries), Latin America and the Caribbean, Least developed countries: UN classification, Low & middle income, Low income, Lower middle income, Major advanced economies (G7), Middle East & North Africa, Middle East & North Africa (excluding high income), Middle East & North Africa (IDA & IBRD countries), Middle East (Region), Middle East and Central Asia, Middle income, North Africa, North America, OECD members, Other advanced economies, Other small states, Pacific island small states, Pacific Islands, Post-demographic dividend, Pre-demographic dividend, Reunion, Saint Helena, Small states, South America, South Asia, South Asia (IDA & IBRD), Southeast Asia, Sub-Saharan Africa, Sub-Saharan Africa (excluding high income), Sub-Saharan Africa (IDA & IBRD countries), Sub-Saharan Africa (Region), Turkiye, Türkiye, Republic of, Upper middle income, Western Europe, Western Hemisphere (Region), Western Sahara, World
ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
Code
pcaf
# A tibble: 16,918 × 13
   IPCC_…¹ C_gro…² Count…³ Count…⁴ Subst…⁵  year CO2 E…⁶ Count…⁷ Indic…⁸ Indic…⁹
   <chr>   <chr>   <chr>   <chr>   <chr>   <dbl>   <dbl> <chr>   <chr>   <chr>  
 1 Non-An… Rest C… ABW     Aruba   CO2      1970    95.1 <NA>    <NA>    <NA>   
 2 Non-An… Rest C… ABW     Aruba   CO2      1971    94.5 <NA>    <NA>    <NA>   
 3 Non-An… Rest C… ABW     Aruba   CO2      1972   106.  <NA>    <NA>    <NA>   
 4 Non-An… Rest C… ABW     Aruba   CO2      1973   110.  <NA>    <NA>    <NA>   
 5 Non-An… Rest C… ABW     Aruba   CO2      1974   100.  <NA>    <NA>    <NA>   
 6 Non-An… Rest C… ABW     Aruba   CO2      1975   115.  <NA>    <NA>    <NA>   
 7 Non-An… Rest C… ABW     Aruba   CO2      1976   105.  <NA>    <NA>    <NA>   
 8 Non-An… Rest C… ABW     Aruba   CO2      1977   113.  <NA>    <NA>    <NA>   
 9 Non-An… Rest C… ABW     Aruba   CO2      1978   116.  <NA>    <NA>    <NA>   
10 Non-An… Rest C… ABW     Aruba   CO2      1979   109.  <NA>    <NA>    <NA>   
# … with 16,908 more rows, 3 more variables: `GDP PPP` <dbl>,
#   `GDP, bn of USD` <dbl>, region <chr>, and abbreviated variable names
#   ¹​IPCC_annex, ²​C_group_IM24_sh, ³​Countrcode_A3, ⁴​`Country Name`, ⁵​Substance,
#   ⁶​`CO2 Emissions`, ⁷​`Country Code`, ⁸​`Indicator Name`, ⁹​`Indicator Code`

Annex vs. Non-Annex Emissions

Code
# How do annex and non-annex compare over the years in terms of emissions?

annex <- pcaf |>
  group_by(IPCC_annex, year) |>
  summarize(sum_emissions = sum(`CO2 Emissions`)/1000,
            avg_emissions = mean(`CO2 Emissions`)/1000) |>
  ungroup()
`summarise()` has grouped output by 'IPCC_annex'. You can override using the
`.groups` argument.
Code
annex
# A tibble: 256 × 4
   IPCC_annex  year sum_emissions avg_emissions
   <chr>      <dbl>         <dbl>         <dbl>
 1 Annex_I     1970        13242.          315.
 2 Annex_I     1971        13127.          313.
 3 Annex_I     1972        13693.          326.
 4 Annex_I     1973        14407.          343.
 5 Annex_I     1974        14256.          339.
 6 Annex_I     1975        13983.          333.
 7 Annex_I     1976        14750.          351.
 8 Annex_I     1977        15018.          358.
 9 Annex_I     1978        15219.          362.
10 Annex_I     1979        15553.          370.
# … with 246 more rows
Code
annex_color <- c("Annex_I" = "blue",
                 "Int. Aviation" = "cadetblue2",
                 "Int. Shipping" = "brown3",
                 "Non-Annex_I" = "burlywood3")
annex |>
  ggplot(mapping = aes(x=year, y=sum_emissions, fill = IPCC_annex)) + 
  geom_col() +
  scale_fill_manual(values = annex_color) +
  scale_y_continuous() +
  theme_minimal() +
  labs(title = "Figure 1: Annex and Non-Annex nations total emissions between 1970 and 2020",
       subtitle = str_wrap("Non-Annex (developing nations) make the bulk of production emissions"),
       x = "",
       y = "Kilotons of Emissions (in thousands)",
       fill = "UNFCC Category",
       caption = "Source: IEA | Latest Data: 2021 | Calculations by author")
Warning: Removed 48 rows containing missing values (`position_stack()`).

Code
annex |>
  ggplot(mapping = aes(x=year, y=avg_emissions, fill = IPCC_annex)) + geom_col() +
  scale_fill_manual(values = annex_color) +
  scale_y_continuous() +
  theme_minimal() +
  labs(title = "Figure 2: Annex and Non-Annex nations average emissions between 1970 and 2020",
       subtitle = str_wrap("International Aviation and International Shipping make up a majority of yearly average emissions"),
       x = "",
       y = "Kilotons of Emissions (in thousands)",
       fill = "UNFCC Category",
       caption = "Source: IEA | Latest Data: 2021 | Calculations by author")
Warning: Removed 48 rows containing missing values (`position_stack()`).

The total CO2 emissions between Annex and Non Annex nations over the years has trended upward, with most of originating from Non-Annex nations. But, when we look at the average emissions for each, it is evident that Non-Annex nations have lower emissions. The bulk of average emissions emerges from international shipping and aviation through trade, followed by annex nations. This shows that much of our emissions can be attributed to the trade and movement between nations.

Non-Annex Regional Countries Emissions

Code
regional <- pcaf |>
  filter(IPCC_annex == "Non-Annex_I") |>
  group_by(year, region) |>
  drop_na() |>
  summarize(avg_co2 = mean(`CO2 Emissions`),
            tot_co2 = sum(`CO2 Emissions`)) |>
  ungroup()
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
Code
regional
# A tibble: 192 × 4
    year region                     avg_co2  tot_co2
   <dbl> <chr>                        <dbl>    <dbl>
 1  1990 East Asia & Pacific         59835.  837688.
 2  1990 Europe & Central Asia        8352.    8352.
 3  1990 Latin America & Caribbean   49530. 1386854.
 4  1990 Middle East & North Africa  43227.  389046.
 5  1990 South Asia                 265533. 1593196.
 6  1990 Sub-Saharan Africa          32084. 1155041.
 7  1991 East Asia & Pacific         62908.  880710.
 8  1991 Europe & Central Asia        6051.    6051.
 9  1991 Latin America & Caribbean   51330. 1437241.
10  1991 Middle East & North Africa  45767.  411904.
# … with 182 more rows
Code
# How do regional non-annex countries look?

regional <- pcaf |>
  filter( IPCC_annex == "Non-Annex_I") |>
  group_by(year, region) |>
  drop_na() |>
  summarize(sum_emissions = sum(`CO2 Emissions`)/1000,
            avg_emissions = mean(`CO2 Emissions`)/1000) |>
  #Attempt to get rid of scientific notation
  #mutate(sum_emissions = sum_emissions/1000) |>
  ungroup()
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
Code
regional
# A tibble: 192 × 4
    year region                     sum_emissions avg_emissions
   <dbl> <chr>                              <dbl>         <dbl>
 1  1990 East Asia & Pacific               838.           59.8 
 2  1990 Europe & Central Asia               8.35          8.35
 3  1990 Latin America & Caribbean        1387.           49.5 
 4  1990 Middle East & North Africa        389.           43.2 
 5  1990 South Asia                       1593.          266.  
 6  1990 Sub-Saharan Africa               1155.           32.1 
 7  1991 East Asia & Pacific               881.           62.9 
 8  1991 Europe & Central Asia               6.05          6.05
 9  1991 Latin America & Caribbean        1437.           51.3 
10  1991 Middle East & North Africa        412.           45.8 
# … with 182 more rows
Code
regional |>
  ggplot(mapping = aes(x=year, y=sum_emissions, fill = region)) + geom_col() +
  scale_y_continuous() +
  theme_minimal() +
  labs(title = "Figure 3: How do non-Annex I total emissions vary by region?",
       subtitle = str_wrap("South Asia comes out on the top"),
       x = "",
       y = "Kilotons of Emissions (in thousands)",
       fill = "Region",
       caption = "Source: IEA | Latest Data: 2021 | Calculations by author")

Code
regional |>
  ggplot(mapping = aes(x=year, y=avg_emissions, fill = region)) + geom_col() +
  scale_y_continuous() +
  theme_minimal() +
  labs(title = "Figure 4: How do non-Annex I average emissions vary by region?",
       subtitle = str_wrap("South Asia composes more than the majority of average yearly emission for developing nations", width = 50),
       x = "",
       y = "Kilotons of Emissions (in thousands)",
       fill = "Region",
       caption = "Source: IEA | Latest Data: 2021 | Calculations by author")

It was interesting to see how annex and non-annex countries differ, but looking at emission through a regional lens is also insightful as we see most of the total emission increases have been seen within East Asia, particularly with the rise of China, followed by South Asia. But when we take a glance at the averages, East Asia and South Asia are closer in footing on average emissions.

GDP Growth vs. Emissions

Code
# How have the GDPs of Annex and Non-Annex nations grown?

growth <- pcaf |>
  group_by(IPCC_annex,region, year) |>
  drop_na() |>
  summarize(avg_gdp = mean(`GDP PPP`)/10^9) |>
  ungroup()
`summarise()` has grouped output by 'IPCC_annex', 'region'. You can override
using the `.groups` argument.
Code
growth
# A tibble: 320 × 4
   IPCC_annex region               year avg_gdp
   <chr>      <chr>               <dbl>   <dbl>
 1 Annex_I    East Asia & Pacific  1990    921.
 2 Annex_I    East Asia & Pacific  1991    982.
 3 Annex_I    East Asia & Pacific  1992   1013.
 4 Annex_I    East Asia & Pacific  1993   1038.
 5 Annex_I    East Asia & Pacific  1994   1093.
 6 Annex_I    East Asia & Pacific  1995   1146.
 7 Annex_I    East Asia & Pacific  1996   1205.
 8 Annex_I    East Asia & Pacific  1997   1243.
 9 Annex_I    East Asia & Pacific  1998   1251.
10 Annex_I    East Asia & Pacific  1999   1272.
# … with 310 more rows
Code
growth |>
  ggplot(mapping = aes(x=year, y = avg_gdp, fill = IPCC_annex, region)) + geom_col() + theme_minimal() +
  labs(title = "Average GDP growth of Annex and Non-Annex nations",
       subtitle = str_wrap("Developed nations have significantly larger average GDP growth than developing nations"),
       x = "",
       y = "GDP ($ in billions)",
       fill = "Region",
       caption = "Source: IEA | Latest Data: 2021 | Calculations by author")

Overall growth for annex-I countries (developed countries) has increased drastically in comparison to non-annex I (developing countries). This is important to note as carbon emissions are calculated as a ratio against a country’s GDP. As developed nations increase their GDP, they can ‘decrease’ their carbon emissions solely through the significant increase in GDP, whilst developing countries are penalized in improving their carbon emissions

GDP (Exports) by Region over the Years

Code
# In terms of exports, what does it look like between regions?

exports <- pcaf |>
  group_by(year, region) |>
  drop_na() |>
  summarize(sum_exp = sum(`GDP, bn of USD`),
            avg_exp = mean(`GDP, bn of USD`)) |>
  ungroup()
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
Code
exports
# A tibble: 224 × 4
    year region                     sum_exp avg_exp
   <dbl> <chr>                        <dbl>   <dbl>
 1  1990 East Asia & Pacific          3944.  232.  
 2  1990 Europe & Central Asia        8804.  383.  
 3  1990 Latin America & Caribbean    1139.   40.7 
 4  1990 Middle East & North Africa    303.   30.3 
 5  1990 North America                5963. 5963.  
 6  1990 South Asia                    441.   73.5 
 7  1990 Sub-Saharan Africa            349.    9.69
 8  1991 East Asia & Pacific          4448.  262.  
 9  1991 Europe & Central Asia        9122.  380.  
10  1991 Latin America & Caribbean    1224.   43.7 
# … with 214 more rows
Code
exports |>
  ggplot(mapping = aes(x=year, y=sum_exp, color = region)) + geom_line() +
  scale_y_continuous() +
  theme_minimal() +
  labs(title = "Total GDP Growth by Region",
       subtitle = str_wrap("Total GDP growth is starkly higher for developed nations than developing"),
       x = " ",
       y = "GDP ($ in Billions)",
       fill = "Region",
       caption = "Source: World Bank| Latest Data: 2021 | Calculations by author")

Code
exports |>
  ggplot(mapping = aes(x=year, y=avg_exp, color = region)) + geom_line() +
  scale_y_continuous() +
  theme_minimal() +
  labs(title = "Average GDP Growth by Region",
       subtitle = str_wrap("North America experiences the highest average GDP growth"),
       x = " ",
       y = "GDP ($ in Billions)",
       fill = "Region",
       caption = "Source: World Bank | Latest Data: 2021 | Calculations by author")

Average GDP growth vs Average CO2 emissions for Annex and non-Annex

Code
# In terms of exports, what does it look like between Annex and non-Annex nations?

exports <- pcaf |>
  group_by(year, IPCC_annex, region) |>
  drop_na() |>
  summarise(avg_gdp_bn = mean(`GDP, bn of USD`),
            avg_co2 = mean(`CO2 Emissions`))
`summarise()` has grouped output by 'year', 'IPCC_annex'. You can override
using the `.groups` argument.
Code
exports
# A tibble: 320 × 5
# Groups:   year, IPCC_annex [64]
    year IPCC_annex  region                     avg_gdp_bn  avg_co2
   <dbl> <chr>       <chr>                           <dbl>    <dbl>
 1  1990 Annex_I     East Asia & Pacific           1189.    523217.
 2  1990 Annex_I     Europe & Central Asia          400.    307124.
 3  1990 Annex_I     Middle East & North Africa       2.40    2352.
 4  1990 Annex_I     North America                 5963.   5435172.
 5  1990 Non-Annex_I East Asia & Pacific             27.0    59835.
 6  1990 Non-Annex_I Europe & Central Asia            2.22    8352.
 7  1990 Non-Annex_I Latin America & Caribbean       40.7    49530.
 8  1990 Non-Annex_I Middle East & North Africa      33.4    43227.
 9  1990 Non-Annex_I South Asia                      73.5   265533.
10  1990 Non-Annex_I Sub-Saharan Africa               9.69   32084.
# … with 310 more rows
Code
exports |>
  ggplot(mapping = aes(x=avg_gdp_bn, y=avg_co2, color = region)) + geom_point(aes(size=`avg_gdp_bn`, alpha = 0.8)) +
  theme_minimal() +
  scale_x_log10() +
  scale_y_log10() +
    labs(title = "Average GDP vs. Average Growth by Region",
       subtitle = str_wrap("Average GDP Growth"),
       x = "GDP ($ in Billions)",
       y = "CO2 Intensity",
       fill = "Region",
       caption = "Source: World Bank | Latest Data: 2021 | Calculations by author")

Looking at emission on the basis of origin shows that developing or annex nations produce the most emissions, but when we look at the relationship between average emissions and average GDP, it shows that North America is the outlier on average emission.

CO2 Intensity by Region

Code
# How does CO2 Intensity look by region?

co2_intens <- pcaf |>
  group_by(year, region) |>
  drop_na() |>
  mutate(co2_intensity = `CO2 Emissions`/`GDP PPP`) |>
  summarize(avg_co2 = mean(co2_intensity)*10^5,
            sum_co2 = sum(co2_intensity)*10^5) |>
  ungroup()
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
Code
co2_intens
# A tibble: 224 × 4
    year region                     avg_co2 sum_co2
   <dbl> <chr>                        <dbl>   <dbl>
 1  1990 East Asia & Pacific         0.0708  1.20  
 2  1990 Europe & Central Asia       0.0786  1.81  
 3  1990 Latin America & Caribbean   0.0770  2.15  
 4  1990 Middle East & North Africa  0.0528  0.528 
 5  1990 North America               0.0911  0.0911
 6  1990 South Asia                  0.122   0.732 
 7  1990 Sub-Saharan Africa          0.155   5.56  
 8  1991 East Asia & Pacific         0.0696  1.18  
 9  1991 Europe & Central Asia       0.0769  1.85  
10  1991 Latin America & Caribbean   0.0727  2.04  
# … with 214 more rows
Code
co2_intens |>
  ggplot(mapping = aes(x=year, y = sum_co2, color = region)) + geom_line() +
  theme_minimal() +
  scale_y_continuous() +
   labs(title = "Total CO2 emission intensity across the globe",
       subtitle = str_wrap("North America's CO2 emissions are notably lower than others"),
       x = "",
       y = "CO2 Intensity",
       fill = "Region",
       caption = "Source: IEA, World Bank, OECD | Latest Data: 2021 | Calculations by author")

Code
co2_intens |>
  ggplot(mapping = aes(x=year, y = avg_co2, color = region)) + geom_line() +
  theme_minimal() +
  scale_y_continuous() +
  
  labs(title = "Average CO2 emission intensity across the globe",
       subtitle = str_wrap("Europe is leading in decreasing CO2 emissions, but relative GDP is important to note for CO2 intensity"), width = 50,
       x = "",
       y = "CO2 Intensity",
       fill = "Region",
       caption = "Source: IEA, World Bank, OECD | Latest Data: 2021 | Calculations by author")

Despite that emissions seem to be increasing, and data seems to point that developing nations have greater carbon intensity due to their low GDP PPP relative to developed nations. But again, pointing to the previous graph, North America has higher emissions, but notably lower carbon intensity, again which could be due to its relatively high GDP per capita. But either way, carbon intensity across all regions is decreasing, which means that countries are taking action to decrease emissions, but it seems that developing nations may be penalized in attempts to grow their GDP PPP.

Conclusion

Overall, both developed and developing nations have made contributions to decreasing their emissions to fight against climate change, but the overall metrics used unfairly penalize developing nations due to their relatively lower GDP PPP. Another consideration that countries must make when negoitating on how to decrease emissions is how international trade and shipping contributes to emissions more so than developing nations. To ensure that all countries are fairly evaluated and hold the fair obligations to decrease their emissions is necessary to actually achieving decreased carbon emissions.