Accepted in the Review of Policy Research
Inhwan Ko
PhD student, Department of Political Science, University of Washington, Seattle, WA 98105
Taedong Lee, PhD
Associate Professor, Political Science Department, Seoul, Korea
Abstract
This study explores why the levels of decoupling between greenhouse gas (GHG) emissions and economic growth vary across time and countries by examining to which extent carbon pricing instruments which factors are driving this decoupling. We expect that the implementation of carbon pricing policies instruments facilitates decoupling, as they are designed to achieve cost-efficient GHG reduction. We analyze a panel data of 29 European countries between 1996 and 2014 to examine the relationships between two carbon pricing policies instruments (emission trading and carbon tax) and emission intensity (GHG emissions per unit of GDP) which we use to measure decoupling trends. Results from two-way fixed effects models show that emission trading contributes to decoupling, whereas our evidence does not support the role of carbon tax. Furthermore, emission trading is negatively associated with both emission intensity and GHG emissions, implying that it contributes to strong decoupling. Using coarsened exact matched (CEM) data, our results suggests that even a single emission trading policy (e.g., EU-ETS) across different jurisdictions may render a heterogeneous effect on decoupling depending on their socioeconomic conditions.
Data https://github.com/inhwanko/Carbon-Pricing-and-Decoupling/blob/master/decoupling.csv
library(foreign)
library(tidyverse)
library(plm)
library(cem)
library(ggplot2)
library(ggpubr)
library(estimatr)
library(broom)
library(stargazer)
library(Hmisc)
library(MASS)
library(lmtest)
library(simcf)
library(tile)
# setwd("~")
rawdata <- read.csv("decoupling.csv") ## raw dataset is uploaded on the github
rawdata <- as_tibble(rawdata)
rawdata <- rawdata[,-1]
rawdata
## # A tibble: 667 x 25
## countrycode year emission gdp gdpmil decoup pop gdppc emission1996
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl>
## 1 AUT 1996 84.1 2.97e11 2.97e5 283. 7.96e6 37346. 1
## 2 AUT 1997 83.7 3.03e11 3.03e5 276. 7.97e6 38085. 0.996
## 3 AUT 1998 83.1 3.14e11 3.14e5 264. 7.98e6 39405. 0.988
## 4 AUT 1999 81.5 3.26e11 3.26e5 250. 7.99e6 40727. 0.969
## 5 AUT 2000 82.0 3.36e11 3.36e5 244. 8.01e6 42001. 0.975
## 6 AUT 2001 85.8 3.41e11 3.41e5 252. 8.04e6 42371. 1.02
## 7 AUT 2002 87.5 3.46e11 3.46e5 253. 8.08e6 42859. 1.04
## 8 AUT 2003 93.0 3.5 e11 3.50e5 266. 8.12e6 43053. 1.11
## 9 AUT 2004 92.9 3.59e11 3.59e5 259. 8.17e6 43957. 1.10
## 10 AUT 2005 94.4 3.67e11 3.67e5 257. 8.23e6 44638. 1.12
## # ... with 657 more rows, and 16 more variables: gdp1996 <dbl>, ets <int>,
## # carbontax <int>, co2inten <dbl>, epdtloss <dbl>, consumere <dbl>,
## # consumeff <dbl>, urbanpop <int>, urbanpopper <dbl>, gdpgrowth <dbl>,
## # polity <int>, indpergdp <dbl>, co2fromelec <dbl>, co2fromind <dbl>,
## # goveff <dbl>, regqual <dbl>
rawdata$gdpgrowth <- as.numeric(rawdata$gdpgrowth)
data <- rawdata %>%
filter(year!=2015 & year!=2016 & year!=2017 & year!=2018)
data <- pdata.frame(data, index=c("countrycode","year"))
data$time <- as.numeric(data$year)-1995
unique(data$countrycode)
## [1] AUT BEL BGR CRO CYP CZE DEN EST FIN FRN GER GRE HUN IRL ITA LAT LIT NLD NOR
## [20] POL POR ROM SLK SLV SPN SWE SWZ TUR UNK
## 29 Levels: AUT BEL BGR CRO CYP CZE DEN EST FIN FRN GER GRE HUN IRL ITA ... UNK
colnames(data)
## [1] "countrycode" "year" "emission" "gdp" "gdpmil"
## [6] "decoup" "pop" "gdppc" "emission1996" "gdp1996"
## [11] "ets" "carbontax" "co2inten" "epdtloss" "consumere"
## [16] "consumeff" "urbanpop" "urbanpopper" "gdpgrowth" "polity"
## [21] "indpergdp" "co2fromelec" "co2fromind" "goveff" "regqual"
## [26] "time"
formula1 <- decoup ~ ets + carbontax + co2inten + epdtloss + consumere + consumeff + urbanpopper + polity + gdpgrowth + indpergdp
formula2 <- decoup ~ ets*goveff + carbontax*goveff + co2inten + epdtloss + consumere + consumeff + urbanpopper + polity + goveff + gdpgrowth + indpergdp
formula3 <- emission ~ ets + carbontax + co2inten + epdtloss + consumere + consumeff + urbanpopper + polity + gdpgrowth + indpergdp
formula4 <- emission ~ ets*goveff + carbontax*goveff + co2inten + epdtloss + consumere + consumeff + urbanpopper + polity + goveff + gdpgrowth + indpergdp
model1f <- plm(formula1, data=data, model="within", effect = "twoway")
model1r <- plm(formula1, data=data, model="random", effect = "twoway")
phtest(model1f, model1r)
##
## Hausman Test
##
## data: formula1
## chisq = 71.846, df = 10, p-value = 1.949e-11
## alternative hypothesis: one model is inconsistent
model2f <- plm(formula2, data=data, model="within", effect = "twoway")
model2r <- plm(formula2, data=data, model="random", effect = "twoway")
phtest(model2f, model2r)
##
## Hausman Test
##
## data: formula2
## chisq = 26.02, df = 13, p-value = 0.0169
## alternative hypothesis: one model is inconsistent
model3f <- plm(formula3, data=data, model="within", effect = "twoway")
model3r <- plm(formula3, data=data, model="random", effect = "twoway")
phtest(model3f, model3r)
##
## Hausman Test
##
## data: formula3
## chisq = 26.547, df = 10, p-value = 0.00307
## alternative hypothesis: one model is inconsistent
model4f <- plm(formula4, data=data, model="within", effect = "twoway")
model4r <- plm(formula4, data=data, model="random", effect = "twoway")
phtest(model4f, model4r)
##
## Hausman Test
##
## data: formula4
## chisq = 18.703, df = 13, p-value = 0.1326
## alternative hypothesis: one model is inconsistent
summary(model1f, vcov=vcovSCC(model1f, type="HC4", cluster="group"))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovSCC(model1f, type = "HC4", cluster = "group")
##
## Call:
## plm(formula = formula1, data = data, effect = "twoway", model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -323.28319 -39.27869 -0.73165 38.30110 448.65369
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ets -86.3453 30.6218 -2.8197 0.005000 **
## carbontax -28.2297 66.8969 -0.4220 0.673217
## co2inten 150.0125 138.5149 1.0830 0.279334
## epdtloss 12.7914 8.3236 1.5368 0.124993
## consumere -9.1054 8.3723 -1.0876 0.277315
## consumeff -7.8532 6.1750 -1.2718 0.204046
## urbanpopper 14.4019 8.1289 1.7717 0.077063 .
## polity -10.6550 14.4609 -0.7368 0.461584
## gdpgrowth -3.0020 2.4070 -1.2472 0.212913
## indpergdp -20.0087 6.8025 -2.9414 0.003421 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 5571500
## Residual Sum of Squares: 3925100
## R-Squared: 0.2955
## Adj. R-Squared: 0.21564
## F-statistic: 8.02456 on 10 and 28 DF, p-value: 6.1008e-06
summary(model2f, vcov=vcovSCC(model2f, type="HC4", cluster="group"))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovSCC(model2f, type = "HC4", cluster = "group")
##
## Call:
## plm(formula = formula2, data = data, effect = "twoway", model = "within")
##
## Balanced Panel: n = 29, T = 16, N = 464
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -200.0257 -32.2308 2.4306 29.7169 456.8989
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ets -250.22360 41.90844 -5.9707 5.149e-09 ***
## goveff -167.55804 30.81147 -5.4382 9.303e-08 ***
## carbontax -173.67289 162.82394 -1.0666 0.286771
## co2inten 73.70499 108.24606 0.6809 0.496320
## epdtloss 3.96408 2.94356 1.3467 0.178828
## consumere -7.56431 4.44852 -1.7004 0.089818 .
## consumeff -3.18205 4.25361 -0.7481 0.454842
## urbanpopper 7.78227 7.34159 1.0600 0.289762
## polity -0.81087 17.01032 -0.0477 0.962003
## gdpgrowth -1.03773 1.75638 -0.5908 0.554959
## indpergdp -11.90196 3.81002 -3.1239 0.001913 **
## ets:goveff 133.82616 30.90794 4.3298 1.881e-05 ***
## goveff:carbontax 98.64526 82.88347 1.1902 0.234674
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 3951200
## Residual Sum of Squares: 2049000
## R-Squared: 0.48143
## Adj. R-Squared: 0.41007
## F-statistic: 18.1767 on 13 and 28 DF, p-value: 2.7276e-10
summary(model3f, vcov=vcovSCC(model3f, type="HC4", cluster="group"))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovSCC(model3f, type = "HC4", cluster = "group")
##
## Call:
## plm(formula = formula3, data = data, effect = "twoway", model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -102.5961 -8.6111 -0.6676 8.6143 110.0521
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ets -31.25065 17.76244 -1.7594 0.07913 .
## carbontax -13.87661 14.97463 -0.9267 0.35455
## co2inten -42.58040 50.01243 -0.8514 0.39496
## epdtloss -1.67242 1.27840 -1.3082 0.19141
## consumere -2.85157 1.42212 -2.0052 0.04549 *
## consumeff 2.06128 1.56631 1.3160 0.18878
## urbanpopper -0.18266 1.35319 -0.1350 0.89268
## polity -1.05860 1.01068 -1.0474 0.29542
## gdpgrowth -0.33117 0.65982 -0.5019 0.61595
## indpergdp 1.64337 1.24842 1.3164 0.18866
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 321400
## Residual Sum of Squares: 253950
## R-Squared: 0.20988
## Adj. R-Squared: 0.12032
## F-statistic: 2.19164 on 10 and 28 DF, p-value: 0.049844
summary(model4f, vcov=vcovSCC(model4f, type="HC4", cluster="group"))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovSCC(model4f, type = "HC4", cluster = "group")
##
## Call:
## plm(formula = formula4, data = data, effect = "twoway", model = "within")
##
## Balanced Panel: n = 29, T = 16, N = 464
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -92.76194 -7.81111 -0.56694 7.65848 114.91405
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ets -17.54182 16.64608 -1.0538 0.29259
## goveff 35.44115 23.85778 1.4855 0.13818
## carbontax -9.50210 20.51410 -0.4632 0.64347
## co2inten -29.03067 44.58541 -0.6511 0.51533
## epdtloss -1.14097 0.96305 -1.1848 0.23681
## consumere -2.51120 1.23846 -2.0277 0.04324 *
## consumeff 1.70736 1.42064 1.2018 0.23013
## urbanpopper 1.13455 1.76508 0.6428 0.52073
## polity -2.23973 1.24557 -1.7982 0.07289 .
## gdpgrowth -0.69545 0.55919 -1.2437 0.21434
## indpergdp 0.98959 1.06514 0.9291 0.35340
## ets:goveff -4.32795 6.49951 -0.6659 0.50586
## goveff:carbontax -2.03312 17.44472 -0.1165 0.90728
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 267120
## Residual Sum of Squares: 203900
## R-Squared: 0.23669
## Adj. R-Squared: 0.13167
## F-statistic: 5.30476 on 13 and 28 DF, p-value: 0.00010822
formula1.2 <- decoup ~ ets + carbontax + co2inten*ets + epdtloss*ets + consumere*ets + consumeff*ets + urbanpopper*ets + polity*ets + gdpgrowth*ets + indpergdp*ets
model1.2f <- plm(formula1.2, data=data, model="within", effect="twoway")
summary(model1.2f, vcov=vcovSCC(model1.2f, type="HC4", cluster="group"))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovSCC(model1.2f, type = "HC4", cluster = "group")
##
## Call:
## plm(formula = formula1.2, data = data, effect = "twoway", model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -240.63873 -30.98157 -0.26773 28.87266 379.96986
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ets -420.41238 254.20719 -1.6538 0.0988102 .
## carbontax 5.31977 61.80809 0.0861 0.9314469
## co2inten 128.78785 142.28132 0.9052 0.3658273
## epdtloss 14.95955 7.95784 1.8799 0.0607263 .
## consumere -15.58566 6.51232 -2.3933 0.0170780 *
## consumeff -8.72123 7.41116 -1.1768 0.2398635
## urbanpopper 1.89767 6.25880 0.3032 0.7618668
## polity -8.93076 12.93623 -0.6904 0.4902922
## gdpgrowth -6.08276 3.24221 -1.8761 0.0612387 .
## indpergdp -7.44570 4.99890 -1.4895 0.1370132
## ets:co2inten -74.26593 25.37635 -2.9266 0.0035876 **
## ets:epdtloss -14.96581 6.17023 -2.4255 0.0156511 *
## ets:consumere 5.96390 1.26813 4.7029 3.347e-06 ***
## ets:consumeff 2.53155 0.93849 2.6975 0.0072297 **
## ets:urbanpopper 1.78814 0.82522 2.1669 0.0307301 *
## ets:polity 55.09310 20.00470 2.7540 0.0061077 **
## ets:gdpgrowth 6.88963 3.79681 1.8146 0.0702043 .
## ets:indpergdp -13.31718 3.49880 -3.8062 0.0001591 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 5571500
## Residual Sum of Squares: 2452500
## R-Squared: 0.55982
## Adj. R-Squared: 0.50185
## F-statistic: 210.859 on 18 and 28 DF, p-value: < 2.22e-16
require(cem)
## assigning treatment value (1- ETS, 0- No ETS)
ets1 <- which(data$ets==1)
ets0 <- which(data$ets==0)
nets1 <- length(ets1)
nets0 <- length(ets0)
## checking naive mean difference
mean(data$decoup[ets1])-mean(data$decoup[ets0])
## [1] -136.7354
## assigning control variables (including carbon tax)
vars_ets <- c("carbontax", "co2inten","epdtloss","consumere","consumeff","urbanpopper","polity","gdpgrowth","indpergdp")
## you will only need variables to do the matching, without countrycode and year
colnames(data)
## [1] "countrycode" "year" "emission" "gdp" "gdpmil"
## [6] "decoup" "pop" "gdppc" "emission1996" "gdp1996"
## [11] "ets" "carbontax" "co2inten" "epdtloss" "consumere"
## [16] "consumeff" "urbanpop" "urbanpopper" "gdpgrowth" "polity"
## [21] "indpergdp" "co2fromelec" "co2fromind" "goveff" "regqual"
## [26] "time"
data_ets <- data[,c(6,11,12,13,14,15,16,18,20,19,21)]
## deriving univariate imbalance measures:
imbalance(group=data_ets$ets, data=data_ets[vars_ets])
##
## Multivariate Imbalance Measure: L1=0.936
## Percentage of local common support: LCS=3.6%
##
## Univariate Imbalance Measures:
##
## statistic type L1 min 25% 50%
## carbontax -0.09501916 (diff) 0.09501916 0.000000 0.000000 0.000000
## co2inten 0.11219157 (diff) 0.06168582 0.110000 0.070000 0.150000
## epdtloss 2.16817241 (diff) 0.19731801 1.620000 0.850000 0.960000
## consumere -2.42418774 (diff) 0.05134100 -0.500000 -2.940000 -2.740000
## consumeff 3.12078544 (diff) 0.00000000 13.030000 -4.770000 4.840000
## urbanpopper -2.02816858 (diff) 0.00000000 0.890000 -2.660000 -1.190000
## polity -0.43180077 (diff) 0.01034483 -13.000000 0.000000 0.000000
## gdpgrowth 1.98089272 (diff) 0.19808429 7.430000 1.910000 1.870000
## indpergdp 1.71769300 (diff) 0.24559387 6.037819 3.210402 1.337763
## 75% max
## carbontax -1.000000 0.0000000
## co2inten 0.280000 0.0600000
## epdtloss 3.490000 24.6000000
## consumere -2.710000 1.7000000
## consumeff 4.240000 1.0200000
## urbanpopper -3.420000 -0.4700000
## polity 0.000000 0.0000000
## gdpgrowth 1.500000 -0.0900000
## indpergdp 1.103745 -0.6309908
## do matching
mat <- cem(treatment="ets", data=data_ets, drop="decoup")
mat
## G0 G1
## All 290 261
## Matched 32 27
## Unmatched 258 234
ets_linear <- att(mat, decoup~ets, data=data_ets, model="linear")
ets_linear_control <- att(mat, decoup~ets + carbontax + co2inten + epdtloss + consumere + consumeff + urbanpopper + polity + gdpgrowth + indpergdp, data=data_ets,
model="linear")
ets_linearRE_control <- att(mat, decoup~ets + carbontax + co2inten + epdtloss + consumere + consumeff + urbanpopper + polity + gdpgrowth + indpergdp, data=data_ets,
model="linear-RE")
ets_linear ## first row of table
##
## G0 G1
## All 290 261
## Matched 32 27
## Unmatched 258 234
##
## Linear regression model on CEM matched data:
##
## SATT point estimate: -47.727956 (p.value=0.486226)
## 95% conf. interval: [-181.194960, 85.739047]
ets_linear_control ## second row of the table
##
## G0 G1
## All 290 261
## Matched 32 27
## Unmatched 258 234
##
## Linear regression model on CEM matched data:
##
## SATT point estimate: -28.561090 (p.value=0.246748)
## 95% conf. interval: [-76.300551, 19.178372]
ets_linearRE_control ## third row of the table
##
## G0 G1
## All 290 261
## Matched 32 27
## Unmatched 258 234
##
## Linear random effect model on CEM matched data:
##
## SATT point estimate: -31.147152 (p.value=2.000000)
## 95% conf. interval: [-36.196765, -26.097539]
plot1 <- ggplot(data, aes(x=year)) +
geom_point(aes(y=emission1996)) +
geom_line(aes(y=gdp1996, group=1)) +
labs(x="Year", y="Real GDP of USD 2010 constant and CO2eq emission (1=1996)") +
theme(axis.title.x=element_text(size=14)) +
theme(axis.title.y=element_text(size=14)) +
scale_x_discrete(breaks=c(2000, 2005, 2010)) +
facet_wrap(~countrycode, nrow=5)
# + ggtitle("Figure 1. Small multiples of decoupling trend in each country, 29 #European countries, 1996-2014")
plot1 + theme_gray(base_size=15)
summary(model2f, vcov=vcovSCC(model2f, type="HC4", cluster="group"))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovSCC(model2f, type = "HC4", cluster = "group")
##
## Call:
## plm(formula = formula2, data = data, effect = "twoway", model = "within")
##
## Balanced Panel: n = 29, T = 16, N = 464
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -200.0257 -32.2308 2.4306 29.7169 456.8989
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ets -250.22360 41.90844 -5.9707 5.149e-09 ***
## goveff -167.55804 30.81147 -5.4382 9.303e-08 ***
## carbontax -173.67289 162.82394 -1.0666 0.286771
## co2inten 73.70499 108.24606 0.6809 0.496320
## epdtloss 3.96408 2.94356 1.3467 0.178828
## consumere -7.56431 4.44852 -1.7004 0.089818 .
## consumeff -3.18205 4.25361 -0.7481 0.454842
## urbanpopper 7.78227 7.34159 1.0600 0.289762
## polity -0.81087 17.01032 -0.0477 0.962003
## gdpgrowth -1.03773 1.75638 -0.5908 0.554959
## indpergdp -11.90196 3.81002 -3.1239 0.001913 **
## ets:goveff 133.82616 30.90794 4.3298 1.881e-05 ***
## goveff:carbontax 98.64526 82.88347 1.1902 0.234674
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 3951200
## Residual Sum of Squares: 2049000
## R-Squared: 0.48143
## Adj. R-Squared: 0.41007
## F-statistic: 18.1767 on 13 and 28 DF, p-value: 2.7276e-10
set.seed(2020)
simbeta <- mvrnorm(10000,
coefficients(model2f),
vcovSCC(model2f, type="HC4", cluster="group"))
simbeta <- simbeta[, c(1,2,12)]
simcoef <- colMeans(simbeta)
simlwr <- c(quantile(simbeta[,1],0.025),
quantile(simbeta[,2],0.025),
quantile(simbeta[,3],0.025))
simupr <- c(quantile(simbeta[,1],0.975),
quantile(simbeta[,2],0.975),
quantile(simbeta[,3],0.975))
x2 <- seq(-2.5, 2.5, by=0.1)
x1 <- rep(1,length(x2))
y <- simcoef[1]*x1 + simcoef[2]*x2 + simcoef[3]*x1*x2
lwr <- simlwr[1]*x1 + simlwr[2]*x2 + simlwr[3]*x1*x2
upr <- simupr[1]*x1 + simupr[2]*x2 + simupr[3]*x1*x2
interact <- data.frame(y=y, x1=x1, x2=x2, lwr=lwr, upr=upr)
col <- RColorBrewer::brewer.pal(3, "Set3")
figure2.1 <- ggplot(interact, aes(x=x2,y=y)) +
geom_line(col=col[3], size=1) +
geom_ribbon(aes(ymin=lwr, ymax=upr, fill=col[3]), alpha=0.2) +
theme_minimal(base_size=15) +
xlab("Government effectiveness score") +
ylab("Marginal effect on emission intensity") +
annotate("text", x=0, y=0,
label="When emission trading is in effect", fontface=2, size=5)
figure2.1 <- figure2.1 + theme(legend.position="none")
x2 <- seq(-2.5, 2.5, by=0.1)
x1 <- rep(0,length(x2))
y <- simcoef[1]*x1 + simcoef[2]*x2 + simcoef[3]*x1*x2
lwr <- simlwr[1]*x1 + simlwr[2]*x2 + simlwr[3]*x1*x2
upr <- simupr[1]*x1 + simupr[2]*x2 + simupr[3]*x1*x2
interact <- data.frame(y=y, x1=x1, x2=x2, lwr=lwr, upr=upr)
figure2.2 <- ggplot(interact, aes(x=x2,y=y)) +
geom_line(col=col[3], size=1) +
geom_ribbon(aes(ymin=lwr, ymax=upr, fill=col[3]), alpha=0.2) +
theme_minimal(base_size=15) +
xlab("Government effectiveness score") +
ylab("Marginal effect on emission intensity") +
annotate("text", x=0, y=500,
label="When emission trading is not in effect", fontface=2, size=5)
figure2.2 <- figure2.2 + theme(legend.position="none")
figure2 <- ggarrange(figure2.1, figure2.2)
figure2
plot(ets_linear_control, mat, data_ets, vars_ets)
plot(ets_linearRE_control, mat, data_ets, vars_ets)