packages <- c("tidyverse", "srvyr", "broom","gt", "modelsummary",
"gapminder", "fst", "ggridges", "readxl", "readr","here", "sjPlot", "knitr", "car")
new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
lapply(packages, library, character.only = TRUE)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
##
## Attaching package: 'srvyr'
##
##
## The following object is masked from 'package:stats':
##
## filter
##
##
## `modelsummary` 2.0.0 now uses `tinytable` as its default table-drawing
## backend. Learn more at: https://vincentarelbundock.github.io/tinytable/
##
## Revert to `kableExtra` for one session:
##
## options(modelsummary_factory_default = 'kableExtra')
## options(modelsummary_factory_latex = 'kableExtra')
## options(modelsummary_factory_html = 'kableExtra')
##
## Silence this message forever:
##
## config_modelsummary(startup_message = FALSE)
##
## here() starts at C:/Users/marco/OneDrive/R ecosystem/RStudio
## Warning: package 'sjPlot' was built under R version 4.4.3
## #refugeeswelcome
## Warning: package 'car' was built under R version 4.4.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.4.3
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
## [[1]]
## [1] "lubridate" "forcats" "stringr" "dplyr" "purrr" "readr"
## [7] "tidyr" "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [13] "grDevices" "utils" "datasets" "methods" "base"
##
## [[2]]
## [1] "srvyr" "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [7] "readr" "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [13] "graphics" "grDevices" "utils" "datasets" "methods" "base"
##
## [[3]]
## [1] "broom" "srvyr" "lubridate" "forcats" "stringr" "dplyr"
## [7] "purrr" "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [13] "stats" "graphics" "grDevices" "utils" "datasets" "methods"
## [19] "base"
##
## [[4]]
## [1] "gt" "broom" "srvyr" "lubridate" "forcats" "stringr"
## [7] "dplyr" "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [13] "tidyverse" "stats" "graphics" "grDevices" "utils" "datasets"
## [19] "methods" "base"
##
## [[5]]
## [1] "modelsummary" "gt" "broom" "srvyr" "lubridate"
## [6] "forcats" "stringr" "dplyr" "purrr" "readr"
## [11] "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [16] "graphics" "grDevices" "utils" "datasets" "methods"
## [21] "base"
##
## [[6]]
## [1] "gapminder" "modelsummary" "gt" "broom" "srvyr"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[7]]
## [1] "fst" "gapminder" "modelsummary" "gt" "broom"
## [6] "srvyr" "lubridate" "forcats" "stringr" "dplyr"
## [11] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [16] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [21] "datasets" "methods" "base"
##
## [[8]]
## [1] "ggridges" "fst" "gapminder" "modelsummary" "gt"
## [6] "broom" "srvyr" "lubridate" "forcats" "stringr"
## [11] "dplyr" "purrr" "readr" "tidyr" "tibble"
## [16] "ggplot2" "tidyverse" "stats" "graphics" "grDevices"
## [21] "utils" "datasets" "methods" "base"
##
## [[9]]
## [1] "readxl" "ggridges" "fst" "gapminder" "modelsummary"
## [6] "gt" "broom" "srvyr" "lubridate" "forcats"
## [11] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [16] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [21] "grDevices" "utils" "datasets" "methods" "base"
##
## [[10]]
## [1] "readxl" "ggridges" "fst" "gapminder" "modelsummary"
## [6] "gt" "broom" "srvyr" "lubridate" "forcats"
## [11] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [16] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [21] "grDevices" "utils" "datasets" "methods" "base"
##
## [[11]]
## [1] "here" "readxl" "ggridges" "fst" "gapminder"
## [6] "modelsummary" "gt" "broom" "srvyr" "lubridate"
## [11] "forcats" "stringr" "dplyr" "purrr" "readr"
## [16] "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [21] "graphics" "grDevices" "utils" "datasets" "methods"
## [26] "base"
##
## [[12]]
## [1] "sjPlot" "here" "readxl" "ggridges" "fst"
## [6] "gapminder" "modelsummary" "gt" "broom" "srvyr"
## [11] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [16] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [21] "stats" "graphics" "grDevices" "utils" "datasets"
## [26] "methods" "base"
##
## [[13]]
## [1] "knitr" "sjPlot" "here" "readxl" "ggridges"
## [6] "fst" "gapminder" "modelsummary" "gt" "broom"
## [11] "srvyr" "lubridate" "forcats" "stringr" "dplyr"
## [16] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [21] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [26] "datasets" "methods" "base"
##
## [[14]]
## [1] "car" "carData" "knitr" "sjPlot" "here"
## [6] "readxl" "ggridges" "fst" "gapminder" "modelsummary"
## [11] "gt" "broom" "srvyr" "lubridate" "forcats"
## [16] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [21] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [26] "grDevices" "utils" "datasets" "methods" "base"
#3. Data & Methods
Three different datasets were merged and utilized for this project.
First dataset:
OECD Environmental Policy Stringency Index.
Dataset source: Publicly available on: OECD Data Explorer • OECD Environmental Policy Stringency Index
Years of data collection: 1990-2020.
Target population: 34 OECD member countries and 6 non-OECD economies.
Data collection: 13 policy instruments, focussing on climate change and air pollution mitigation policies. Policies are scored 0–6 (0 = no policy, 6 = most stringent). Scores are weighted equally across sub-indices and normalized to create a composite index.
Data sources: OECD and IEA statistics, World Bank indicators, Government reports, legislation, and official statistics.
Second dataset:
Our World in Data (OWID), CO₂ and Greenhouse Gas Emissions.
Dataset Source: Publicly available on GitHub: co2-data/owid-co2-codebook.csv at master · owid/co2-data · GitHub
Years of data collection: 1850–2023 (the analysis focus on the years 1990–2020 to align with policy and economic development trends).
Emissions Data: Compiled from national inventories, international organizations, and peer reviewed studies. Measured Tonnes per person.
GDP Data: Adjusted for inflation and purchasing power parity using the Maddison Project Database. Measured in International dollar and adjusted for inflation and differences in the cost of living between countries.
Population Data: Compiled from different key sources: • 1800 to 1949: Gapminder’s Population version 7 • 1950 onwards: UN World Population Prospects (2024) • For former countries: Gapminder’s Systema Globalis
Third dataset:
Our World in Data (OWID), Energy.
Dataset Source: Publicly available on GitHub: GitHub - owid/energy-data: Data on energy by Our World in Data
Years of data collection: 1900–2023 (the analysis focus on the years 1990–2020 to align with energy consumption).
Energy from fossil fuels Data: Compiled from Energy Institute and The Shift Dataportal. Measured in kilowatt-hour per person.
Variable measurement:
co2_per_capita: Represents annual CO2 emissions per person, measured in tonnes per person, reflecting countries’ environmental impact. This data is derived from total national CO2 emissions divided by population. No additional transformations were needed as it was already standardized as per capita. The range varies by country, with France and Germany having the lowest values and Poland and Ireland showing the highest peaks in emissions per capita. This dataset is limited to CO2 emissions and ignores other non-CO2 greenhouse gasses which also affects the environment negatively. Furthermore, this data relies on national report accuracy and technology employed in different years.
stringency_value: Reflects the rigor and adoption of climate air pollution policies. This data is measured as an aggregate of 13 policy instruments, equally weighted and normalized into a 0-6 scale to ensure a fair comparison between countries. It represents market-based (taxes, trading schemes), non-market-based (emission limits), and technology support policies. A score of 0 means no policy in place, with higher values meaning stricter policies. The limitations of this dataset are that it excludes sector-specific policies like agriculture or other sectors outside climate/air pollution and it may not capture enforcement effectiveness.
GDP_per_capita: It represents national wealth, economic development and stability reflecting a country’s resources to adapt to challenges like pollution. It is calculated as total GDP divided by population. The range varies widely, with higher values meaning greater economic capacity. This was the only recoded variable where the original variables were GDP and Population. A transformation of “GDP_per_capita = GDP / population” was calculated. The transformation allows us to follow a per capita standardize metric to account for cross-country comparisons and it reduces skewness from population disparities. The limitations are that it excludes important economic aspects of a country’s development like income inequality and wealth distribution.
fossil_energy_per_capita: Annual fossil energy consumption per person reflecting energy systems and shift from non-renewable sources. Range fluctuates within countries, with higher values meaning greater fossil fuel reliance and a slower transition towards renewable sources. This data does not distinguish between coal, oil, and gas and relies on technology accuracy national aggregates.
The variable energy_mix was replaced by fossil_energy_per_capita to reduce the amount of independent variables analyzed with regression models, focusing in the share of fossil fuel energy where most of the data is available from our country selection. Also, removing the CO2 per GDP and focusing on GDP per capita was a transformation that will allow us to fit a regression model comparing CO2 per capita with GDP per capita, avoiding having the same measurement variable twice in the same model.
GHG_emissions <- read_excel("C:/Users/marco/OneDrive/R ecosystem/RStudio/owid-co2-data.xlsx")
glimpse(GHG_emissions)
## Rows: 50,191
## Columns: 79
## $ country <chr> "Afghanistan", "Afghanistan"…
## $ year <dbl> 1750, 1751, 1752, 1753, 1754…
## $ iso_code <chr> "AFG", "AFG", "AFG", "AFG", …
## $ population <dbl> 2802560, NA, NA, NA, NA, NA,…
## $ gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cement_co2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ cement_co2_per_capita <dbl> 0, NA, NA, NA, NA, NA, NA, N…
## $ co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_growth_abs <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_growth_prct <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_growth_abs <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_growth_prct <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_per_unit_energy <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_per_unit_energy <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ coal_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ consumption_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ consumption_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ consumption_co2_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_cement_co2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ cumulative_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_luc_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_other_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ energy_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ flaring_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ gas_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ ghg_excluding_lucf_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ ghg_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ land_use_change_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ land_use_change_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ methane <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ methane_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ nitrous_oxide <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ nitrous_oxide_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ oil_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ other_co2_per_capita <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ other_industry_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ primary_energy_consumption <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cement_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_cement_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_luc_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_other_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_luc_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_other_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_of_temperature_change_from_ghg <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_ch4 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_ghg <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_n2o <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ total_ghg <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ total_ghg_excluding_lucf <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ trade_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ trade_co2_share <dbl> NA, NA, NA, NA, NA, NA, NA, …
co2_gdp_per_capita_countries <- GHG_emissions %>%
filter(year >= 1990 & year <= 2020) %>%
filter(!is.na(co2_per_capita), !is.na(gdp), !is.na(population))%>%
filter(country %in% c("Germany", "Poland", "France","Ireland")) %>%
group_by(country) %>%
mutate(
GDP_per_capita = gdp / population
) %>%
select(year, country, co2_per_capita, GDP_per_capita)
print(co2_gdp_per_capita_countries)
## # A tibble: 124 × 4
## # Groups: country [4]
## year country co2_per_capita GDP_per_capita
## <dbl> <chr> <dbl> <dbl>
## 1 1990 France 6.91 28710.
## 2 1991 France 7.30 28881.
## 3 1992 France 7.08 29214.
## 4 1993 France 6.71 28927.
## 5 1994 France 6.56 29519.
## 6 1995 France 6.63 30050.
## 7 1996 France 6.89 30384.
## 8 1997 France 6.74 31013.
## 9 1998 France 7.03 32019.
## 10 1999 France 6.97 33001.
## # ℹ 114 more rows
policy_stringency <- read_csv("C:/Users/marco/OneDrive/R ecosystem/RStudio/policy_stringency.csv")
## Rows: 155 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (16): STRUCTURE, STRUCTURE_ID, STRUCTURE_NAME, ACTION, REF_AREA, Referen...
## dbl (4): TIME_PERIOD, OBS_VALUE, UNIT_MULT, DECIMALS
## lgl (2): Time period, Observation value
##
## ℹ 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.
glimpse(policy_stringency)
## Rows: 155
## Columns: 22
## $ STRUCTURE <chr> "DATAFLOW", "DATAFLOW", "DATAFLOW", "DATAFL…
## $ STRUCTURE_ID <chr> "OECD.ECO.MAD:DSD_EPS@DF_EPS(1.0)", "OECD.E…
## $ STRUCTURE_NAME <chr> "OECD Environmental Policy Stringency Index…
## $ ACTION <chr> "I", "I", "I", "I", "I", "I", "I", "I", "I"…
## $ REF_AREA <chr> "POL", "IRL", "IRL", "IRL", "IRL", "IRL", "…
## $ `Reference area` <chr> "Poland", "Ireland", "Ireland", "Ireland", …
## $ FREQ <chr> "A", "A", "A", "A", "A", "A", "A", "A", "A"…
## $ `Frequency of observation` <chr> "Annual", "Annual", "Annual", "Annual", "An…
## $ MEASURE <chr> "POL_STRINGENCY", "POL_STRINGENCY", "POL_ST…
## $ Measure <chr> "Policy stringency", "Policy stringency", "…
## $ CLIM_POL <chr> "EPS", "EPS", "EPS", "EPS", "EPS", "EPS", "…
## $ `Climate policies` <chr> "All environmental policies (EPS index)", "…
## $ TIME_PERIOD <dbl> 2002, 1998, 1997, 1996, 1995, 1994, 1993, 1…
## $ `Time period` <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ OBS_VALUE <dbl> 1.2777778, 0.9444444, 0.8888889, 0.8888889,…
## $ `Observation value` <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ UNIT_MULT <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ `Unit multiplier` <chr> "Units", "Units", "Units", "Units", "Units"…
## $ UNIT_MEASURE <chr> "0_TO_6", "0_TO_6", "0_TO_6", "0_TO_6", "0_…
## $ `Unit of measure` <chr> "0-6 scale", "0-6 scale", "0-6 scale", "0-6…
## $ DECIMALS <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ Decimals <chr> "Two", "Two", "Two", "Two", "Two", "Two", "…
policy_stringency_value <- policy_stringency %>%
filter(TIME_PERIOD >= 1990 & TIME_PERIOD <= 2020) %>%
filter(!is.na(OBS_VALUE), !is.na(TIME_PERIOD),
`Reference area` %in% c("Poland", "Germany", "Ireland", "France")) %>%
arrange(TIME_PERIOD) %>%
select(year = TIME_PERIOD,
country = `Reference area`,
stringency_value = OBS_VALUE)
print(policy_stringency_value)
## # A tibble: 124 × 3
## year country stringency_value
## <dbl> <chr> <dbl>
## 1 1990 Ireland 0.528
## 2 1990 Poland 0.583
## 3 1990 France 1.44
## 4 1990 Germany 1.44
## 5 1991 Ireland 0.472
## 6 1991 Poland 0.528
## 7 1991 France 1.33
## 8 1991 Germany 1.69
## 9 1992 Ireland 0.528
## 10 1992 Poland 0.583
## # ℹ 114 more rows
energy_data <- read_csv("C:/Users/marco/OneDrive/R ecosystem/RStudio/owid-energy-data.csv")
## Rows: 21812 Columns: 129
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): country, iso_code
## dbl (127): year, population, gdp, biofuel_cons_change_pct, biofuel_cons_chan...
##
## ℹ 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.
glimpse(energy_data)
## Rows: 21,812
## Columns: 129
## $ country <chr> "ASEAN (Ember)", "ASEAN (…
## $ year <dbl> 2000, 2001, 2002, 2003, 2…
## $ iso_code <chr> NA, NA, NA, NA, NA, NA, N…
## $ population <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gdp <dbl> NA, NA, NA, NA, NA, NA, N…
## $ biofuel_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ biofuel_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ biofuel_cons_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ biofuel_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ biofuel_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ biofuel_electricity <dbl> 5.87, 6.46, 6.62, 7.45, 8…
## $ biofuel_share_elec <dbl> 1.550, 1.596, 1.528, 1.62…
## $ biofuel_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ carbon_intensity_elec <dbl> 569.557, 567.642, 570.212…
## $ coal_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_cons_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_electricity <dbl> 76.03, 86.26, 93.43, 102.…
## $ coal_prod_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_prod_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_prod_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_production <dbl> NA, NA, NA, NA, NA, NA, N…
## $ coal_share_elec <dbl> 20.081, 21.307, 21.568, 2…
## $ coal_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ electricity_demand <dbl> 378.61, 404.85, 433.19, 4…
## $ electricity_generation <dbl> 378.61, 404.85, 433.19, 4…
## $ electricity_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ energy_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ energy_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ energy_per_gdp <dbl> NA, NA, NA, NA, NA, NA, N…
## $ fossil_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ fossil_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ fossil_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ fossil_electricity <dbl> 305.36, 327.66, 356.67, 3…
## $ fossil_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ fossil_fuel_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ fossil_share_elec <dbl> 80.653, 80.934, 82.336, 8…
## $ fossil_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_electricity <dbl> 164.26, 190.41, 208.92, 2…
## $ gas_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_prod_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_prod_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_prod_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_production <dbl> NA, NA, NA, NA, NA, NA, N…
## $ gas_share_elec <dbl> 43.385, 47.032, 48.228, 4…
## $ gas_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ greenhouse_gas_emissions <dbl> 215.64, 229.81, 247.01, 2…
## $ hydro_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ hydro_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ hydro_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ hydro_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ hydro_electricity <dbl> 50.45, 54.33, 53.29, 53.2…
## $ hydro_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ hydro_share_elec <dbl> 13.325, 13.420, 12.302, 1…
## $ hydro_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ low_carbon_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ low_carbon_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ low_carbon_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ low_carbon_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ low_carbon_electricity <dbl> 73.25, 77.19, 76.52, 76.4…
## $ low_carbon_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ low_carbon_share_elec <dbl> 19.347, 19.066, 17.664, 1…
## $ low_carbon_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ net_elec_imports <dbl> NA, NA, NA, NA, NA, NA, N…
## $ net_elec_imports_share_demand <dbl> NA, NA, NA, NA, NA, NA, N…
## $ nuclear_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ nuclear_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ nuclear_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ nuclear_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ nuclear_electricity <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ nuclear_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ nuclear_share_elec <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ nuclear_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_electricity <dbl> 65.07, 50.99, 54.32, 53.3…
## $ oil_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_prod_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_prod_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_prod_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_production <dbl> NA, NA, NA, NA, NA, NA, N…
## $ oil_share_elec <dbl> 17.187, 12.595, 12.540, 1…
## $ oil_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewable_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewable_electricity <dbl> 22.80, 22.86, 23.23, 23.1…
## $ other_renewable_exc_biofuel_electricity <dbl> 16.93, 16.40, 16.61, 15.7…
## $ other_renewables_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewables_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewables_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewables_elec_per_capita_exc_biofuel <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewables_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ other_renewables_share_elec <dbl> 6.022, 5.647, 5.363, 5.06…
## $ other_renewables_share_elec_exc_biofuel <dbl> 4.472, 4.051, 3.834, 3.43…
## $ other_renewables_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ per_capita_electricity <dbl> NA, NA, NA, NA, NA, NA, N…
## $ primary_energy_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ renewables_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ renewables_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ renewables_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ renewables_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ renewables_electricity <dbl> 73.25, 77.19, 76.52, 76.4…
## $ renewables_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ renewables_share_elec <dbl> 19.347, 19.066, 17.664, 1…
## $ renewables_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ solar_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ solar_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ solar_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ solar_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ solar_electricity <dbl> 0.00, 0.00, 0.00, 0.00, 0…
## $ solar_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ solar_share_elec <dbl> 0.000, 0.000, 0.000, 0.00…
## $ solar_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
## $ wind_cons_change_pct <dbl> NA, NA, NA, NA, NA, NA, N…
## $ wind_cons_change_twh <dbl> NA, NA, NA, NA, NA, NA, N…
## $ wind_consumption <dbl> NA, NA, NA, NA, NA, NA, N…
## $ wind_elec_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ wind_electricity <dbl> 0.00, 0.00, 0.00, 0.00, 0…
## $ wind_energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, N…
## $ wind_share_elec <dbl> 0.000, 0.000, 0.000, 0.00…
## $ wind_share_energy <dbl> NA, NA, NA, NA, NA, NA, N…
energy_mix <- energy_data %>%
filter(year >= 1990 & year <= 2020) %>%
filter(!is.na(renewables_energy_per_capita))%>%
filter(country %in% c("Germany", "France", "Poland", "Ireland")) %>%
select(year, country, renewables_energy_per_capita) %>%
group_by(country)
print(energy_mix)
## # A tibble: 124 × 3
## # Groups: country [4]
## year country renewables_energy_per_capita
## <dbl> <chr> <dbl>
## 1 1990 France 2932.
## 2 1991 France 3125.
## 3 1992 France 3707.
## 4 1993 France 3480.
## 5 1994 France 4211.
## 6 1995 France 3926.
## 7 1996 France 3569.
## 8 1997 France 3467.
## 9 1998 France 3359.
## 10 1999 France 3885.
## # ℹ 114 more rows
co2_gdp_energy_joint <- left_join(co2_gdp_per_capita_countries, energy_mix)
## Joining with `by = join_by(year, country)`
variables_of_interest_joint <- left_join(co2_gdp_energy_joint, policy_stringency_value)
## Joining with `by = join_by(year, country)`
variables_of_interest_joint
## # A tibble: 124 × 6
## # Groups: country [4]
## year country co2_per_capita GDP_per_capita renewables_energy_per_capita
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1990 France 6.91 28710. 2932.
## 2 1991 France 7.30 28881. 3125.
## 3 1992 France 7.08 29214. 3707.
## 4 1993 France 6.71 28927. 3480.
## 5 1994 France 6.56 29519. 4211.
## 6 1995 France 6.63 30050. 3926.
## 7 1996 France 6.89 30384. 3569.
## 8 1997 France 6.74 31013. 3467.
## 9 1998 France 7.03 32019. 3359.
## 10 1999 France 6.97 33001. 3885.
## # ℹ 114 more rows
## # ℹ 1 more variable: stringency_value <dbl>
final_sample_size <- variables_of_interest_joint %>%
filter(year >= 1990 & year <= 2020) %>%
filter(country %in% c("Germany", "France", "Poland", "Ireland")) %>%
filter(
!is.na(co2_per_capita),
!is.na(GDP_per_capita),
!is.na(stringency_value)
) %>%
nrow()
cat("Final sample size (country-year observations):", final_sample_size)
## Final sample size (country-year observations): 124
co2_per_capita_data <- variables_of_interest_joint %>%
filter(year >= 1990 & year <= 2020) %>%
filter(!is.na(co2_per_capita ))%>%
filter(country %in% c("Germany", "France", "Poland", "Ireland")) %>%
group_by(country) %>%
summarise(
Years = paste0(min(year, na.rm = TRUE), "-", max(year, na.rm = TRUE)),
co2_per_capita_mean = mean(co2_per_capita , na.rm = TRUE),
co2_per_capita_median = median(co2_per_capita , na.rm = TRUE),
co2_per_capita_range = paste(round(min(co2_per_capita , na.rm = TRUE), 2), "-", round(max(co2_per_capita , na.rm = TRUE), 2)),
.groups = "drop"
)
print(co2_per_capita_data)
## # A tibble: 4 × 5
## country Years co2_per_capita_mean co2_per_capita_median co2_per_capita_range
## <chr> <chr> <dbl> <dbl> <chr>
## 1 France 1990-2… 6.18 6.56 4.26 - 7.3
## 2 Germany 1990-2… 10.6 10.7 7.75 - 13.23
## 3 Ireland 1990-2… 9.74 9.53 7.05 - 12.32
## 4 Poland 1990-2… 8.77 8.67 7.92 - 9.9
co2_per_capita_table <- co2_per_capita_data %>%
gt() %>%
cols_label(
country = "Country",
Years = "Year Range",
co2_per_capita_mean = "Mean",
co2_per_capita_median = "Median",
co2_per_capita_range = "CO2 per Capita Range"
) %>%
fmt_number(columns = c(co2_per_capita_mean, co2_per_capita_median, co2_per_capita_range), decimals = 2) %>%
tab_header(
title = md("**Descriptive Statistics for CO2 per Capita**"),
subtitle = md("Measured in Tonnes per person")
) %>%
tab_source_note(
source_note = md(paste("Sample size:", final_sample_size, "country-year observations"))
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)
co2_per_capita_table
| Descriptive Statistics for CO2 per Capita | ||||
| Measured in Tonnes per person | ||||
| Country | Year Range | Mean | Median | CO2 per Capita Range |
|---|---|---|---|---|
| France | 1990-2020 | 6.18 | 6.57 | 4.26 - 7.3 |
| Germany | 1990-2020 | 10.62 | 10.68 | 7.75 - 13.23 |
| Ireland | 1990-2020 | 9.74 | 9.53 | 7.05 - 12.32 |
| Poland | 1990-2020 | 8.77 | 8.67 | 7.92 - 9.9 |
| Sample size: 124 country-year observations | ||||
gdp_per_capita_data <- variables_of_interest_joint %>%
filter(year >= 1990 & year <= 2020) %>%
filter(!is.na(GDP_per_capita ))%>%
filter(country %in% c("Germany", "France", "Poland", "Ireland")) %>%
group_by(country) %>%
summarise(
Years = paste0(min(year, na.rm = TRUE), "-", max(year, na.rm = TRUE)),
gdp_per_capita_mean = mean(GDP_per_capita, na.rm = TRUE),
gdp_per_capita_median = median(GDP_per_capita, na.rm = TRUE),
gdp_per_capita_range = paste(round(min(GDP_per_capita, na.rm = TRUE), 2), "-", round(max(GDP_per_capita , na.rm = TRUE), 2)),
.groups = "drop"
)
print(gdp_per_capita_data)
## # A tibble: 4 × 5
## country Years gdp_per_capita_mean gdp_per_capita_median gdp_per_capita_range
## <chr> <chr> <dbl> <dbl> <chr>
## 1 France 1990-2… 34867. 36329. 28710.31 - 40232.4
## 2 Germany 1990-2… 36607. 35900. 25286.65 - 46510.66
## 3 Ireland 1990-2… 41672. 47362. 18806.83 - 59694.79
## 4 Poland 1990-2… 16970. 15632. 7634.77 - 29331.74
gdp_per_capita_table <- gdp_per_capita_data %>%
gt() %>%
cols_label(
country = "Country",
Years = "Year Range",
gdp_per_capita_mean = "Mean",
gdp_per_capita_median = "Median",
gdp_per_capita_range = "GDP per Capita Range"
) %>%
fmt_number(columns = c(gdp_per_capita_mean, gdp_per_capita_median), decimals = 2) %>%
tab_header(
title = md("**Descriptive Statistics for GDP per Capita**"),
subtitle = md("Measured in Dollars per person")
) %>%
tab_source_note(
source_note = md(paste("This data is adjusted for inflation and differences in the cost of living between countries.
\nSample size:", final_sample_size, "country-year observations"))
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)
gdp_per_capita_table
| Descriptive Statistics for GDP per Capita | ||||
| Measured in Dollars per person | ||||
| Country | Year Range | Mean | Median | GDP per Capita Range |
|---|---|---|---|---|
| France | 1990-2020 | 34,866.93 | 36,329.24 | 28710.31 - 40232.4 |
| Germany | 1990-2020 | 36,607.22 | 35,899.80 | 25286.65 - 46510.66 |
| Ireland | 1990-2020 | 41,671.55 | 47,361.97 | 18806.83 - 59694.79 |
| Poland | 1990-2020 | 16,969.84 | 15,631.96 | 7634.77 - 29331.74 |
| This data is adjusted for inflation and differences in the cost of living between countries.
Sample size: 124 country-year observations |
||||
renewables_data <- energy_data %>%
filter(year >= 1990 & year <= 2020) %>%
filter(!is.na(renewables_energy_per_capita))%>%
filter(country %in% c("Germany", "France", "Poland", "Ireland")) %>%
group_by(country) %>%
summarise(
Years = paste0(min(year, na.rm = TRUE), "-", max(year, na.rm = TRUE)),
renewables_mean = mean(renewables_energy_per_capita, na.rm = TRUE),
renewables_median = median(renewables_energy_per_capita, na.rm = TRUE),
renewables_range = paste(round(min(renewables_energy_per_capita, na.rm = TRUE), 2), "-", round(max(renewables_energy_per_capita, na.rm = TRUE), 2)),
.groups = "drop"
)
print(renewables_data)
## # A tibble: 4 × 5
## country Years renewables_mean renewables_median renewables_range
## <chr> <chr> <dbl> <dbl> <chr>
## 1 France 1990-2020 3846. 3707. 2795.18 - 5571.42
## 2 Germany 1990-2020 3435. 2541. 651.49 - 8730.23
## 3 Ireland 1990-2020 2405. 1314. 591.34 - 7660.49
## 4 Poland 1990-2020 781. 313. 114.69 - 2360.37
renewables_energy_table <- renewables_data %>%
gt() %>%
cols_label(
country = "Country",
Years = "Year Range",
renewables_mean = "Mean",
renewables_median = "Median",
renewables_range = "Fossil Fuel Energy Range"
) %>%
fmt_number(columns = c(renewables_mean, renewables_median), decimals = 2) %>%
tab_header(
title = md("**Descriptive Statistics for Energy consumption from Renewable sources**"),
subtitle = md("Measured in kilowatt-hours per person")
) %>%
tab_source_note(
source_note = md(paste("Sample size:", final_sample_size, "country-year observations"))
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)
renewables_energy_table
| Descriptive Statistics for Energy consumption from Renewable sources | ||||
| Measured in kilowatt-hours per person | ||||
| Country | Year Range | Mean | Median | Fossil Fuel Energy Range |
|---|---|---|---|---|
| France | 1990-2020 | 3,845.85 | 3,706.96 | 2795.18 - 5571.42 |
| Germany | 1990-2020 | 3,435.38 | 2,541.42 | 651.49 - 8730.23 |
| Ireland | 1990-2020 | 2,404.56 | 1,314.38 | 591.34 - 7660.49 |
| Poland | 1990-2020 | 780.95 | 312.64 | 114.69 - 2360.37 |
| Sample size: 124 country-year observations | ||||
policy_stringency_data <- variables_of_interest_joint %>%
summarise(
Years = paste0(min(year, na.rm = TRUE), "-", max(year, na.rm = TRUE)),
stringency_mean = mean(stringency_value, na.rm = TRUE),
stringency_median = median(stringency_value, na.rm = TRUE),
stringency_range = paste(round(min(stringency_value, na.rm = TRUE), 2), "-", round(max(stringency_value, na.rm = TRUE), 2)),
.groups = "drop"
)
print(policy_stringency_data)
## # A tibble: 4 × 5
## country Years stringency_mean stringency_median stringency_range
## <chr> <chr> <dbl> <dbl> <chr>
## 1 France 1990-2020 2.80 2.86 1.33 - 4.89
## 2 Germany 1990-2020 2.48 2.78 1.44 - 3.47
## 3 Ireland 1990-2020 1.80 2.08 0.47 - 3
## 4 Poland 1990-2020 1.88 2.08 0.53 - 3.47
policy_stringency_table <- policy_stringency_data %>%
gt() %>%
cols_label(
country = "Country",
Years = "Year Range",
stringency_mean = "Mean",
stringency_median = "Median",
stringency_range = "policy stringency Range"
) %>%
fmt_number(columns = c(stringency_mean, stringency_median), decimals = 2) %>%
tab_header(
title = md("**Descriptive Statistics for Environmental Policy Stringency**"),
subtitle = md("All environmental policy stringency measured on a 0-6 scale.")
) %>%
tab_source_note(
source_note = md(paste("Sample size:", final_sample_size, "country-year observations"))
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)
policy_stringency_table
| Descriptive Statistics for Environmental Policy Stringency | ||||
| All environmental policy stringency measured on a 0-6 scale. | ||||
| Country | Year Range | Mean | Median | policy stringency Range |
|---|---|---|---|---|
| France | 1990-2020 | 2.80 | 2.86 | 1.33 - 4.89 |
| Germany | 1990-2020 | 2.48 | 2.78 | 1.44 - 3.47 |
| Ireland | 1990-2020 | 1.80 | 2.08 | 0.47 - 3 |
| Poland | 1990-2020 | 1.88 | 2.08 | 0.53 - 3.47 |
| Sample size: 124 country-year observations | ||||
co2_policy_stringency_clean <- variables_of_interest_joint %>%
filter(year >= 1990 & year <= 2022) %>%
filter(!is.na(co2_per_capita), !is.na(stringency_value))%>%
filter(country %in% c("Germany", "Poland", "France", "Finland", "Ireland")) %>%
select(year, country, co2_per_capita, stringency_value) %>%
group_by(country)
print(co2_policy_stringency_clean)
## # A tibble: 124 × 4
## # Groups: country [4]
## year country co2_per_capita stringency_value
## <dbl> <chr> <dbl> <dbl>
## 1 1990 France 6.91 1.44
## 2 1991 France 7.30 1.33
## 3 1992 France 7.08 1.33
## 4 1993 France 6.71 1.33
## 5 1994 France 6.56 1.39
## 6 1995 France 6.63 1.39
## 7 1996 France 6.89 1.47
## 8 1997 France 6.74 1.47
## 9 1998 France 7.03 1.47
## 10 1999 France 6.97 1.64
## # ℹ 114 more rows
co2_policy_long <- co2_policy_stringency_clean %>%
select(
"CO2 per Capita" = co2_per_capita,
"Policy Stringency" = stringency_value,
year,
country
) %>%
pivot_longer(
cols = c("CO2 per Capita", "Policy Stringency"),
names_to = "metric",
values_to = "value"
)
ggplot(
co2_policy_long,
aes(
x = year,
y = value,
color = country
)
) +
geom_line(linewidth = 1.2) +
scale_color_brewer(palette = "Set1") +
facet_wrap(~metric,
ncol = 1,
scales = "free_y",
strip.position = "top") +
scale_x_continuous(
breaks = seq(1990, 2020, by = 5),
limits = c(1990, 2020)
) +
theme(
strip.text = element_text(size = 12, face = "bold"),
strip.placement = "outside",
strip.background = element_blank(),
panel.background = element_blank(),
panel.grid = element_blank(),
axis.line = element_line(),
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
plot.subtitle = element_text(size = 12, hjust = 0.5),
legend.position = "right",
axis.title.y = element_text(size = 10.5, hjust = 0.3),
legend.title = element_text(face = "bold", size = 12),
plot.caption = element_text(face = "italic", hjust = 0)
) +
labs(
title = "Comparison between CO2 emissions and environmental policy stringency",
subtitle = "in OECD countries (1990-2020)",
x = "Year",
y = "All environmental policy Tonnes per person",
color = "Country",
caption = paste("Emissions of carbon dioxide (CO2), excluding land-use change, measured in tonnes per person. \nAll environmental policy stringency measured on a 0-6 scale. \n0 means no policy in place, and higher numbers mean stricter policies, with 6 being the most stringent.")
)
#Regression Models
model_data <- variables_of_interest_joint %>%
filter(
year >= 1990 & year <= 2020,
country %in% c("Germany", "France", "Poland", "Ireland"),
!is.na(co2_per_capita),
!is.na(stringency_value),
!is.na(GDP_per_capita),
!is.na(renewables_energy_per_capita)
) %>%
mutate(
renewables_energy_per_capita_scaled = renewables_energy_per_capita / 1000,
GDP_per_capita_scaled = GDP_per_capita / 1000
)
print(model_data)
## # A tibble: 124 × 8
## # Groups: country [4]
## year country co2_per_capita GDP_per_capita renewables_energy_per_capita
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1990 France 6.91 28710. 2932.
## 2 1991 France 7.30 28881. 3125.
## 3 1992 France 7.08 29214. 3707.
## 4 1993 France 6.71 28927. 3480.
## 5 1994 France 6.56 29519. 4211.
## 6 1995 France 6.63 30050. 3926.
## 7 1996 France 6.89 30384. 3569.
## 8 1997 France 6.74 31013. 3467.
## 9 1998 France 7.03 32019. 3359.
## 10 1999 France 6.97 33001. 3885.
## # ℹ 114 more rows
## # ℹ 3 more variables: stringency_value <dbl>,
## # renewables_energy_per_capita_scaled <dbl>, GDP_per_capita_scaled <dbl>
The values for gdp per capita and renewables energy per capita have been re-scaled to make meaningful comparisons between variables. They now represent a 1,000-unit increase in the regression models.
model1 <- lm(co2_per_capita ~ stringency_value, data = model_data)
summary(model1)
##
## Call:
## lm(formula = co2_per_capita ~ stringency_value, data = model_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0162 -1.5308 -0.1083 1.7354 3.7010
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.8118 0.3626 29.820 < 2e-16 ***
## stringency_value -0.8860 0.1461 -6.064 1.53e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.736 on 122 degrees of freedom
## Multiple R-squared: 0.2316, Adjusted R-squared: 0.2253
## F-statistic: 36.77 on 1 and 122 DF, p-value: 1.533e-08
tab_model(model1, auto.label=TRUE)
| co 2 per capita | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 10.81 | 10.09 – 11.53 | <0.001 |
| stringency value | -0.89 | -1.18 – -0.60 | <0.001 |
| Observations | 124 | ||
| R2 / R2 adjusted | 0.232 / 0.225 | ||
model2 <- lm(co2_per_capita ~ stringency_value + GDP_per_capita_scaled, data = model_data)
summary(model2)
##
## Call:
## lm(formula = co2_per_capita ~ stringency_value + GDP_per_capita_scaled,
## data = model_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.1346 -1.4684 0.1223 1.3465 3.7953
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.98433 0.43726 22.834 < 2e-16 ***
## stringency_value -1.18865 0.17053 -6.970 1.79e-10 ***
## GDP_per_capita_scaled 0.04628 0.01466 3.156 0.00202 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.675 on 121 degrees of freedom
## Multiple R-squared: 0.29, Adjusted R-squared: 0.2783
## F-statistic: 24.72 on 2 and 121 DF, p-value: 9.988e-10
tab_model(model2, auto.label=TRUE)
| co 2 per capita | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 9.98 | 9.12 – 10.85 | <0.001 |
| stringency value | -1.19 | -1.53 – -0.85 | <0.001 |
| GDP per capita scaled | 0.05 | 0.02 – 0.08 | 0.002 |
| Observations | 124 | ||
| R2 / R2 adjusted | 0.290 / 0.278 | ||
model3 <- lm(co2_per_capita ~ stringency_value + GDP_per_capita_scaled + renewables_energy_per_capita_scaled, data = model_data)
summary(model3)
##
## Call:
## lm(formula = co2_per_capita ~ stringency_value + GDP_per_capita_scaled +
## renewables_energy_per_capita_scaled, data = model_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.147 -1.274 0.075 0.732 3.380
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.88735 0.43028 20.655 < 2e-16 ***
## stringency_value -0.75906 0.16795 -4.520 1.46e-05 ***
## GDP_per_capita_scaled 0.09813 0.01572 6.241 6.78e-09 ***
## renewables_energy_per_capita_scaled -0.59314 0.10137 -5.851 4.33e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.484 on 120 degrees of freedom
## Multiple R-squared: 0.4476, Adjusted R-squared: 0.4338
## F-statistic: 32.42 on 3 and 120 DF, p-value: 2.031e-15
tab_model(model3, auto.label=TRUE)
| co 2 per capita | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 8.89 | 8.04 – 9.74 | <0.001 |
| stringency value | -0.76 | -1.09 – -0.43 | <0.001 |
| GDP per capita scaled | 0.10 | 0.07 – 0.13 | <0.001 |
|
renewables energy per capita scaled |
-0.59 | -0.79 – -0.39 | <0.001 |
| Observations | 124 | ||
| R2 / R2 adjusted | 0.448 / 0.434 | ||
tab_model(model1, model2, model3)
| co 2 per capita | co 2 per capita | co 2 per capita | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Predictors | Estimates | CI | p | Estimates | CI | p | Estimates | CI | p |
| (Intercept) | 10.81 | 10.09 – 11.53 | <0.001 | 9.98 | 9.12 – 10.85 | <0.001 | 8.89 | 8.04 – 9.74 | <0.001 |
| stringency value | -0.89 | -1.18 – -0.60 | <0.001 | -1.19 | -1.53 – -0.85 | <0.001 | -0.76 | -1.09 – -0.43 | <0.001 |
| GDP per capita scaled | 0.05 | 0.02 – 0.08 | 0.002 | 0.10 | 0.07 – 0.13 | <0.001 | |||
|
renewables energy per capita scaled |
-0.59 | -0.79 – -0.39 | <0.001 | ||||||
| Observations | 124 | 124 | 124 | ||||||
| R2 / R2 adjusted | 0.232 / 0.225 | 0.290 / 0.278 | 0.448 / 0.434 | ||||||