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

Tables

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

Graph

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