Replica of the draft research article as follows:
Ko, Inhwan, and Taedong Lee. Carbon pricing policies and decoupling between greenhouse gas emissions and economic growth: A panel study of 30 European countries, 1996-2014. A paper under review by Global Environmental Politics journal (submitted on Feb 11 2020).
Authors’ bio
Inhwan Ko
PhD student, Department of Political Science, University of Washington, Seattle, US
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 between countries, and examines which factors are driving this decoupling. We argue that the implementation of carbon pricing policies facilitates decoupling, as they are designed to achieve cost-efficient GHG reduction. We analyze the panel data of 30 European countries between 1996 and 2014 to examine the relationships between two carbon pricing policies, emission trading and carbon tax, and emission intensity (GHG emissions per unit of GDP) we use to capture decoupling trends. Our result indicates that while controlling for factors that may affect emission intensity, emission trading contributes to decoupling in all models, whereas carbon tax does not; this has also been suggested in previous literature. Furthermore, emission trading is negatively associated with GHG emissions, implying that it contributes to not weak, but strong decoupling of economic growth from GHG emissions.
A full-version paper is uploaded in the same repository. Or, visit my github:
https://github.com/inhwanko/carbonpricing_decoupling
# attach necessary packages
library(foreign)
library(tidyverse)
library(plm)
library(cem)
library(ggplot2)
library(ggpubr)
library(clubSandwich)
library(estimatr)
library(broom)
library(stargazer)
library(Hmisc)
library(MASS)
library(lmtest)
# setwd("~")
data <- read.csv("decoupling.csv") ## raw dataset is uploaded on the github
data <- as_tibble(data)
data ## the first column shows an encoding error (country), but it does not matter since we will use "countrycode".
## # A tibble: 570 x 31
## 癤풻ountry countrycode year pop urbanpop urbanpopper emission
## <fct> <fct> <int> <int> <int> <dbl> <dbl>
## 1 Austria AUT 1996 7.96e6 5237033 65.8 84.5
## 2 Austria AUT 1997 7.97e6 5242971 65.8 84.0
## 3 Austria AUT 1998 7.98e6 5248727 65.8 83.4
## 4 Austria AUT 1999 7.99e6 5258949 65.8 81.7
## 5 Austria AUT 2000 8.01e6 5271610 65.8 82.2
## 6 Austria AUT 2001 8.04e6 5291909 65.8 86.2
## 7 Austria AUT 2002 8.08e6 5318413 65.8 87.8
## 8 Austria AUT 2003 8.12e6 5344871 65.8 93.4
## 9 Austria AUT 2004 8.17e6 5378625 65.8 93.4
## 10 Austria AUT 2005 8.23e6 5415886 65.8 94.6
## # ... with 560 more rows, and 24 more variables: emission1996 <dbl>,
## # emissionpc <dbl>, emissionpc1996 <dbl>, gdp <dbl>, gdpmil <dbl>,
## # gdp1996 <dbl>, gdppc <dbl>, gdppc1996 <dbl>, gdpgrowth <dbl>, decoup <dbl>,
## # consume <dbl>, eneuse <dbl>, consumeep <dbl>, consumeff <dbl>,
## # consumere <dbl>, co2inten <dbl>, epdtloss <dbl>, manuperc <dbl>,
## # manuexp <dbl>, polity <int>, ETS <int>, carbontax <int>, indpergdp <dbl>,
## # elecprodfromfossil <dbl>
data$gdpgrowth <- as.numeric(data$gdpgrowth)
## make data as balanced panel data
data1 <- data[,-27] # data without "policyIV" variable
data2 <- subset(data, subset=(data$countrycode!="ICE")) # data without ICELAND
## check if data are panel data
data1 <- pdata.frame(data1, index=c("countrycode","year"))
data2 <- pdata.frame(data2, index=c("countrycode","year"))
### deleting the first two rows that are NAs
# data1 <- data1[-c(1:2),]
# data2 <- data2[-c(1:2),]
### only leaving variables that are used for the analysis
data1 <- data1[,c(2,3,17,27,28,23,24,22,21,6,16,7,29,30)]
data2 <- data2[,c(2,3,17,28,29,23,24,22,21,27,6,16,30,31)]
## Model 1
model1f <- plm(decoup ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
urbanpopper + gdpgrowth,
data=data1, model="within")
model1r <- plm(decoup ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
urbanpopper + gdpgrowth,
data=data1, model="random")
phtest(model1f, model1r)
##
## Hausman Test
##
## data: decoup ~ ETS + carbontax + co2inten + epdtloss + consumere + ...
## chisq = 11.525, df = 8, p-value = 0.1737
## alternative hypothesis: one model is inconsistent
## Model 2
model2f <- plm(decoup ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
polity + urbanpopper + gdpgrowth,
data=data2, model="within")
model2r <- plm(decoup ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
polity + urbanpopper + gdpgrowth,
data=data2, model="random")
phtest(model2f, model2r)
##
## Hausman Test
##
## data: decoup ~ ETS + carbontax + co2inten + epdtloss + consumere + ...
## chisq = 23.65, df = 9, p-value = 0.004891
## alternative hypothesis: one model is inconsistent
## Model 3
model3f <- plm(emission ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
urbanpopper + gdpgrowth,
data=data1, model="within")
model3r <- plm(emission ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
urbanpopper + gdpgrowth,
data=data1, model="random")
phtest(model3f, model3r)
##
## Hausman Test
##
## data: emission ~ ETS + carbontax + co2inten + epdtloss + consumere + ...
## chisq = 1.2837, df = 8, p-value = 0.9957
## alternative hypothesis: one model is inconsistent
Model Results (Table 5)
stargazer(model1r, model2f, model3r, type='html')
| Dependent variable: | |||
| decoup | emission | ||
| (1) | (2) | (3) | |
| ETS | -113.900*** | -106.997*** | -5.921** |
| (12.715) | (13.256) | (2.959) | |
| carbontax | -3.821 | -40.295 | -3.732 |
| (25.071) | (26.485) | (5.573) | |
| co2inten | 125.954** | 94.791 | -30.056* |
| (60.948) | (70.859) | (15.784) | |
| epdtloss | 17.732*** | 16.074*** | -1.874*** |
| (2.222) | (2.233) | (0.500) | |
| consumere | -11.550*** | -16.812*** | -2.114*** |
| (2.120) | (2.356) | (0.512) | |
| consumeff | -7.962*** | -8.022*** | 1.742*** |
| (2.244) | (2.689) | (0.597) | |
| polity | -21.301*** | ||
| (4.233) | |||
| urbanpopper | 0.924 | 5.300* | 1.156* |
| (2.590) | (3.026) | (0.679) | |
| gdpgrowth | -3.134** | -3.313** | 0.303 |
| (1.429) | (1.405) | (0.315) | |
| Constant | 847.860*** | 102.821 | |
| (256.827) | (76.732) | ||
| Observations | 570 | 551 | 570 |
| R2 | 0.449 | 0.516 | 0.214 |
| Adjusted R2 | 0.441 | 0.481 | 0.203 |
| F Statistic | 456.815*** | 60.746*** (df = 9; 513) | 152.762*** |
| Note: | p<0.1; p<0.05; p<0.01 | ||
Appendix B
stargazer(model1f, model2r, model3f, type='html')
| Dependent variable: | |||
| decoup | emission | ||
| (1) | (2) | (3) | |
| ETS | -119.208*** | -102.500*** | -6.030** |
| (13.509) | (12.727) | (2.988) | |
| carbontax | -4.896 | -33.840 | -3.616 |
| (25.342) | (26.177) | (5.605) | |
| co2inten | 71.620 | 141.076** | -29.259* |
| (72.650) | (59.838) | (16.069) | |
| epdtloss | 17.051*** | 16.792*** | -1.861*** |
| (2.277) | (2.192) | (0.504) | |
| consumere | -12.472*** | -15.464*** | -2.069*** |
| (2.341) | (2.164) | (0.518) | |
| consumeff | -6.820** | -8.713*** | 1.715*** |
| (2.755) | (2.209) | (0.609) | |
| polity | -21.413*** | ||
| (4.239) | |||
| urbanpopper | 4.460 | 1.342 | 1.100 |
| (3.126) | (2.584) | (0.691) | |
| gdpgrowth | -3.003** | -3.433** | 0.307 |
| (1.431) | (1.408) | (0.316) | |
| Constant | 1,108.123*** | ||
| (254.388) | |||
| Observations | 570 | 551 | 570 |
| R2 | 0.460 | 0.502 | 0.217 |
| Adjusted R2 | 0.423 | 0.494 | 0.162 |
| F Statistic (df = 8; 532) | 56.716*** | 545.689*** | 18.389*** |
| Note: | p<0.1; p<0.05; p<0.01 | ||
## subsetting the data frame into pre- and post- ETS and carbon tax period
dataets1 <- subset(data, subset=(ETS==1))
dataets0 <- subset(data, subset=(ETS==0))
datatax1 <- subset(data, subset=(carbontax==1))
datatax0 <- subset(data, subset=(carbontax==0))
## T-test results
t.test(dataets1$emission, dataets0$emission)
##
## Welch Two Sample t-test
##
## data: dataets1$emission and dataets0$emission
## t = -0.055031, df = 561.4, p-value = 0.9561
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -40.56445 38.35341
## sample estimates:
## mean of x mean of y
## 185.6074 186.7130
t.test(datatax1$emission, datatax0$emission)
##
## Welch Two Sample t-test
##
## data: datatax1$emission and datatax0$emission
## t = -7.4357, df = 534.71, p-value = 4.162e-13
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -155.7034 -90.6264
## sample estimates:
## mean of x mean of y
## 97.38868 220.55358
## ANOVA preparation
anovadata <- data1
anovadata$ETS[anovadata$ETS==1] <- "ETS"
anovadata$ETS[anovadata$ETS==0] <- "No ETS"
anovadata$carbontax[anovadata$carbontax==1] <- "Carbon Tax"
anovadata$carbontax[anovadata$carbontax==0] <- "No Carbon Tax"
## ANOVA results
aov1 <- aov(decoup ~ ETS, data=anovadata)
summary(aov1)
## Df Sum Sq Mean Sq F value Pr(>F)
## ETS 1 2202703 2202703 17.5 3.32e-05 ***
## Residuals 568 71483425 125851
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov2 <- aov(decoup ~ carbontax, data=anovadata)
summary(aov2)
## Df Sum Sq Mean Sq F value Pr(>F)
## carbontax 1 750210 750210 5.842 0.016 *
## Residuals 568 72935917 128408
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tukey Honest Significant Difference test results (Table 3)
TukeyHSD(aov1)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = decoup ~ ETS, data = anovadata)
##
## $ETS
## diff lwr upr p adj
## No ETS-ETS 124.6057 66.10472 183.1066 3.32e-05
TukeyHSD(aov2)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = decoup ~ carbontax, data = anovadata)
##
## $carbontax
## diff lwr upr p adj
## No Carbon Tax-Carbon Tax 80.89273 15.15889 146.6266 0.0159586
Boxplot of the sample means between treatment and control groups (Figure 3-4)
ggboxplot(anovadata, x="ETS", y="decoup",
color="ETS", palette=c("#FC4E07","#00AFBB"),
order=c("No ETS", "ETS"),
ylab="Average Emission Intensity", xlab="Country Group with / without ETS")
ggboxplot(anovadata, x="carbontax", y="decoup",
color="carbontax", palette=c("#FC4E07","#00AFBB"),
order=c("No Carbon Tax", "Carbon Tax"),
ylab="Average Emission Intensity", xlab="Country Group with / without Carbon Tax")
require(cem)
## assigning treatment value (1- ETS, 0- No ETS)
ets1 <- which(data1$ETS==1)
ets0 <- which(data1$ETS==0)
nets1 <- length(ets1)
nets0 <- length(ets0)
## checking naive mean difference
mean(data1$decoup[ets1])-mean(data1$decoup[ets0])
## [1] -124.6057
## assigning control variables (including carbon tax)
vars_ets <- c("carbontax", "co2inten","epdtloss","consumere","consumeff","urbanpopper","gdpgrowth")
## you will only need variables to do the matching, without countrycode and year
data_ets <- data1[,c(-1,-2,-12)]
## deriving univariate imbalance measures:
imbalance(group=data_ets$ETS, data=data_ets[vars_ets])
##
## Multivariate Imbalance Measure: L1=0.906
## Percentage of local common support: LCS=5.0%
##
## Univariate Imbalance Measures:
##
## statistic type L1 min 25% 50% 75% max
## carbontax -0.10432331 (diff) 0.10432331 0.00 0.00 0.00 -1.00 0.00
## co2inten 0.08631579 (diff) 0.02584586 0.18 -0.11 0.13 0.25 0.06
## epdtloss 2.09967105 (diff) 0.18656015 1.62 0.77 0.94 3.09 24.60
## consumere -2.07184680 (diff) 0.07330827 -0.50 -2.86 -1.61 -1.71 -10.59
## consumeff 2.37847744 (diff) 0.00000000 5.90 -7.73 4.06 3.81 1.02
## urbanpopper -1.65820019 (diff) 0.00000000 0.89 -1.27 -1.04 -3.94 -0.47
## gdpgrowth 2.07469455 (diff) 0.20629699 7.43 1.92 1.90 1.50 -0.09
## do matching
mat <- cem(treatment="ETS", data=data_ets, drop="decoup")
## The data contain missing values. CEM will match on them; see the manual for other options.
mat
## G0 G1
## All 304 266
## Matched 37 21
## Unmatched 267 245
Sample average treatment effect of the treated (SATT) in different models (Table 6)
ets_linear <- att(mat, decoup~ETS, data=data_ets, model="linear")
ets_linear_control <- att(mat, decoup~ETS + carbontax + co2inten + epdtloss +
consumere + consumeff + urbanpopper + gdpgrowth, data=data_ets,
model="linear")
ets_linearRE_control <- att(mat, decoup~ETS +carbontax + co2inten + epdtloss +
consumere + consumeff + urbanpopper + gdpgrowth, data=data_ets,
model="linear-RE")
ets_linear ## first row of table
##
## G0 G1
## All 304 266
## Matched 37 21
## Unmatched 267 245
##
## Linear regression model on CEM matched data:
##
## SATT point estimate: -53.187619 (p.value=0.458782)
## 95% conf. interval: [-192.925617, 86.550379]
ets_linear_control ## second row of the table
##
## G0 G1
## All 304 266
## Matched 37 21
## Unmatched 267 245
##
## Linear regression model on CEM matched data:
##
## SATT point estimate: -43.987407 (p.value=0.294288)
## 95% conf. interval: [-125.311959, 37.337144]
ets_linearRE_control ## third row of the table
##
## G0 G1
## All 304 266
## Matched 37 21
## Unmatched 267 245
##
## Linear random effect model on CEM matched data:
##
## SATT point estimate: -36.363530 (p.value=2.000000)
## 95% conf. interval: [-44.066542, -28.660518]
Though not included in the paper, we can draw a plot of the output of the SATT derived above. For instance, our finding is based on the linear random effects model with control variables, which exhibits statistically significant and negative coefficient estimate of the effect of ETS on emission intensity, can be plotted as below:
plot(ets_linearRE_control, mat, data_ets, vars_ets)
data <- data[-c(571,572),]
## Warning: The `i` argument of ``[.tbl_df`()` must lie in [-rows, 0] if negative, as of tibble 3.0.0.
## Use `NA` as row index to obtain a row full of `NA` values.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## Figure 1
plot1 <- ggplot(data, aes(year)) +
geom_point(aes(y=emission1996)) +
geom_line(aes(y=gdp1996)) +
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)) +
facet_wrap(~countrycode, nrow=5)
plot1 + theme_gray()
## Figure 2
plot2 <- ggplot(data = data, aes(year,decoup)) +
geom_point() +
labs(x="Year", y="Decoupling (Emission (kgCO2eq) per GDP $1,000)") +
theme(axis.title.x=element_text(size=14)) +
theme(axis.title.y=element_text(size=14)) +
facet_wrap(~countrycode, nrow=5)
plot2 + theme_gray()
dataplot <- data %>%
filter(countrycode=="AUT" | countrycode=="SPN" | countrycode=="TUR")
plot3 <- ggplot(dataplot, aes(year)) +
geom_point(aes(y=emission1996)) +
geom_line(aes(y=gdp1996)) +
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)) +
facet_wrap(~countrycode, nrow=1)
plot3+theme_gray()
HC2_1f <- coef_test(model1f, vcov = "CR2",
cluster = "individual", test = "Satterthwaite")
HC2_1r <- coef_test(model1r, vcov = "CR2",
cluster = "individual", test = "Satterthwaite")
HC2_2f <- coef_test(model2f, vcov = "CR2",
cluster = "individual", test = "Satterthwaite")
HC2_2r <- coef_test(model2r, vcov = "CR2",
cluster = "individual", test = "Satterthwaite")
Plotting the results (not included in the paper)
HC2_1f # cluster-robust standard error model for Model 1 (fixed effects)
## Coef. Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 ETS -119.21 29.96 -3.9795 25.19 <0.001 ***
## 2 carbontax -4.90 80.69 -0.0607 5.54 0.954
## 3 co2inten 71.62 229.78 0.3117 9.37 0.762
## 4 epdtloss 17.05 9.82 1.7368 3.88 0.160
## 5 consumere -12.47 11.64 -1.0711 9.34 0.311
## 6 consumeff -6.82 11.50 -0.5930 6.26 0.574
## 7 urbanpopper 4.46 9.38 0.4754 5.20 0.654
## 8 gdpgrowth -3.00 1.80 -1.6723 14.68 0.116
HC2_1r # cluster-robust standard error model for Model 1 (random effects)
## Coef. Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 (Intercept) 847.860 1003.94 0.8445 13.48 0.4131
## 2 ETS -113.900 26.25 -4.3394 24.68 <0.001 ***
## 3 carbontax -3.821 77.02 -0.0496 5.89 0.9621
## 4 co2inten 125.954 166.60 0.7560 5.82 0.4791
## 5 epdtloss 17.732 9.54 1.8580 4.14 0.1343
## 6 consumere -11.550 9.67 -1.1941 12.18 0.2552
## 7 consumeff -7.962 7.96 -0.9996 4.11 0.3727
## 8 urbanpopper 0.924 6.17 0.1497 9.32 0.8842
## 9 gdpgrowth -3.134 1.78 -1.7641 14.91 0.0982 .
HC2_2f # cluster-robust standard error model for Model 2 (fixed effects)
## Coef. Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 ETS -107.00 26.17 -4.088 24.51 <0.001 ***
## 2 carbontax -40.29 73.30 -0.550 4.18 0.611
## 3 co2inten 94.79 222.88 0.425 9.02 0.681
## 4 epdtloss 16.07 10.25 1.568 3.76 0.196
## 5 consumere -16.81 11.25 -1.495 8.63 0.171
## 6 consumeff -8.02 10.38 -0.773 5.95 0.469
## 7 polity -21.30 30.28 -0.703 1.44 0.578
## 8 urbanpopper 5.30 9.29 0.570 5.10 0.593
## 9 gdpgrowth -3.31 1.79 -1.856 13.78 0.085 .
HC2_2r # cluster-robust standard error model for Model 2 (random effects)
## Coef. Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 (Intercept) 1108.12 1035.70 1.070 13.31 0.3037
## 2 ETS -102.50 22.81 -4.493 23.82 <0.001 ***
## 3 carbontax -33.84 73.06 -0.463 4.58 0.6644
## 4 co2inten 141.08 165.34 0.853 5.71 0.4279
## 5 epdtloss 16.79 9.77 1.718 3.98 0.1613
## 6 consumere -15.46 9.64 -1.603 11.62 0.1357
## 7 consumeff -8.71 7.50 -1.161 3.97 0.3107
## 8 polity -21.41 31.47 -0.680 1.43 0.5893
## 9 urbanpopper 1.34 6.46 0.208 8.62 0.8402
## 10 gdpgrowth -3.43 1.84 -1.864 13.99 0.0834 .
##
data3 <- subset(data, subset=(data$countrycode!="ICE")) ## data without ICELAND
data3 <- pdata.frame(data3, index=c("countrycode","year"))
data3 <- data3[-c(1:2),]
## re-extract necessary variables
cordata <- data3[, c(17,28,29,23,24,22,21,6,16,27)]
## correlation and its p-value table
corp <- rcorr(as.matrix(cordata))
## save them seperately into two variables
corp1 <- data.frame(corp$r)
corp2 <- data.frame(corp$P)
## allow round for p-value table up to 10^-3
corp2<-round(corp2, 3)
## save them in a different excel file
write.csv(corp1, "corp1.csv")
## Warning in close.connection(file): Problem closing connection: Invalid argument
write.csv(corp2, "corp2.csv")
model4f <- plm(decoup ~ ETS*consumeff + ETS*consumere + carbontax +
co2inten + epdtloss +
consumere +
polity + urbanpopper + gdpgrowth,
data=data2, model="within")
summary(model4f)
## Oneway (individual) effect Within Model
##
## Call:
## plm(formula = decoup ~ ETS * consumeff + ETS * consumere + carbontax +
## co2inten + epdtloss + consumere + polity + urbanpopper +
## gdpgrowth, data = data2, model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -322.345 -53.123 1.754 45.955 564.312
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ETS -299.30181 59.57139 -5.0243 6.999e-07 ***
## consumeff -10.80941 2.74703 -3.9350 9.473e-05 ***
## consumere -21.06944 2.43682 -8.6463 < 2.2e-16 ***
## carbontax -38.67256 25.83441 -1.4969 0.13503
## co2inten 101.13140 72.17377 1.4012 0.16176
## epdtloss 17.74214 2.20781 8.0361 6.469e-15 ***
## polity -22.26374 4.12389 -5.3987 1.029e-07 ***
## urbanpopper 3.60355 2.98537 1.2071 0.22796
## gdpgrowth -3.14324 1.37270 -2.2898 0.02244 *
## ETS:consumeff 1.69328 0.67191 2.5201 0.01204 *
## ETS:consumere 4.69500 0.86500 5.4277 8.832e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 10837000
## Residual Sum of Squares: 4951700
## R-Squared: 0.54306
## Adj. R-Squared: 0.50819
## F-statistic: 55.2101 on 11 and 511 DF, p-value: < 2.22e-16
Interaction terms indicate that both consumeff and consumerr increases the effect of ETS on decoupling as they increase. However, this is not what we intended to show by including interaction term.
model5f <- plm(decoup ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
urbanpopper + gdpgrowth,
data=data1, model="within",
effect="twoways")
summary(model5f, vcov=vcovHC(model5f))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovHC(model5f)
##
## Call:
## plm(formula = decoup ~ ETS + carbontax + co2inten + epdtloss +
## consumere + consumeff + urbanpopper + gdpgrowth, data = data1,
## effect = "twoways", model = "within")
##
## Balanced Panel: n = 30, T = 19, N = 570
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -341.0816 -43.7484 1.4782 42.0734 549.6071
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ETS -75.7439 34.4958 -2.1957 0.02856 *
## carbontax 20.4793 65.5501 0.3124 0.75485
## co2inten -19.7444 209.7003 -0.0942 0.92502
## epdtloss 12.2780 7.0726 1.7360 0.08316 .
## consumere -6.4864 9.6467 -0.6724 0.50163
## consumeff -5.0824 7.5931 -0.6693 0.50358
## urbanpopper 16.5074 10.1800 1.6215 0.10551
## gdpgrowth -5.6174 2.3594 -2.3808 0.01764 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 5668800
## Residual Sum of Squares: 4696200
## R-Squared: 0.17158
## Adj. R-Squared: 0.082938
## F-statistic: 4.64778 on 8 and 29 DF, p-value: 0.0009821
model6f <- plm(decoup ~ ETS + carbontax +
co2inten + epdtloss +
consumere + consumeff +
polity + urbanpopper + gdpgrowth,
data=data2, model="within",
effect="twoways")
summary(model6f, vcov=vcovHC(model6f))
## Twoways effects Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovHC(model6f)
##
## Call:
## plm(formula = decoup ~ ETS + carbontax + co2inten + epdtloss +
## consumere + consumeff + polity + urbanpopper + gdpgrowth,
## data = data2, effect = "twoways", model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -318.21348 -42.39077 0.61598 42.20795 519.65350
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ETS -86.2785 45.1050 -1.9128 0.05635 .
## carbontax -15.0902 62.2078 -0.2426 0.80843
## co2inten -8.7459 211.0802 -0.0414 0.96697
## epdtloss 12.6415 7.3951 1.7095 0.08799 .
## consumere -11.9211 10.6687 -1.1174 0.26437
## consumeff -5.5261 7.6139 -0.7258 0.46831
## polity -11.8671 13.2158 -0.8980 0.36965
## urbanpopper 13.6176 10.0029 1.3614 0.17402
## gdpgrowth -5.6629 2.2830 -2.4804 0.01345 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 5574300
## Residual Sum of Squares: 4410600
## R-Squared: 0.20876
## Adj. R-Squared: 0.12085
## F-statistic: 3.85523 on 9 and 28 DF, p-value: 0.0028391
Meanwhile, two-way fixed effects model for the model 1 (without polity) indicates that ETS is still effective even if considering the panel-corrected standard errors (0.0285). The same model for the model 2 (with polity) also indicates the same, with a slightly higher p-value for ETS (0.05635).
indpergdp - industry, % of total GDP elecprodfromfossil - electricity production from fossil fuel (coal, oil, gas), % of total production
model7f <- plm(decoup ~ ETS*elecprodfromfossil + carbontax +
co2inten + epdtloss +
consumere + consumeff + indpergdp + polity +
urbanpopper + gdpgrowth,
data=data2, model="within",
effect="individual")
summary(model7f)
## Oneway (individual) effect Within Model
##
## Call:
## plm(formula = decoup ~ ETS * elecprodfromfossil + carbontax +
## co2inten + epdtloss + consumere + consumeff + indpergdp +
## polity + urbanpopper + gdpgrowth, data = data2, effect = "individual",
## model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -323.2079 -45.8814 -4.0736 46.6626 506.4044
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ETS -71.08191 20.31007 -3.4998 0.0005063 ***
## elecprodfromfossil -4.23722 1.00868 -4.2008 3.140e-05 ***
## carbontax -67.27169 25.16016 -2.6737 0.0077416 **
## co2inten 270.24455 71.29199 3.7907 0.0001682 ***
## epdtloss 16.50072 2.09295 7.8840 1.938e-14 ***
## consumere -16.52153 2.24389 -7.3629 7.270e-13 ***
## consumeff -3.12803 2.95861 -1.0573 0.2908932
## indpergdp -20.71782 2.59187 -7.9934 8.839e-15 ***
## polity -19.90780 3.98265 -4.9986 7.951e-07 ***
## urbanpopper 0.62786 2.90565 0.2161 0.8290094
## gdpgrowth -1.06426 1.35784 -0.7838 0.4335283
## ETS:elecprodfromfossil -0.55883 0.31005 -1.8024 0.0720771 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 10837000
## Residual Sum of Squares: 4547900
## R-Squared: 0.58032
## Adj. R-Squared: 0.54741
## F-statistic: 58.7685 on 12 and 510 DF, p-value: < 2.22e-16
Interaction term between ETS and elecprodfromfossil has a statistically significant coefficient, but elecprodfromfossil per se does not. This means that the effect of ETS on emission intensity decreases as electprodfromfossil increases. Finally, % of industry in total GDP is negatively associated with emission intensity.
summary(model7f, vcov=vcovHC(model7f))
## Oneway (individual) effect Within Model
##
## Note: Coefficient variance-covariance matrix supplied: vcovHC(model7f)
##
## Call:
## plm(formula = decoup ~ ETS * elecprodfromfossil + carbontax +
## co2inten + epdtloss + consumere + consumeff + indpergdp +
## polity + urbanpopper + gdpgrowth, data = data2, effect = "individual",
## model = "within")
##
## Balanced Panel: n = 29, T = 19, N = 551
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -323.2079 -45.8814 -4.0736 46.6626 506.4044
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ETS -71.08191 42.15148 -1.6863 0.092341 .
## elecprodfromfossil -4.23722 1.69713 -2.4967 0.012850 *
## carbontax -67.27169 62.16141 -1.0822 0.279671
## co2inten 270.24455 156.93518 1.7220 0.085673 .
## epdtloss 16.50072 7.06561 2.3354 0.019912 *
## consumere -16.52153 6.97273 -2.3694 0.018186 *
## consumeff -3.12803 7.12298 -0.4391 0.660742
## indpergdp -20.71782 7.03962 -2.9430 0.003398 **
## polity -19.90780 11.55044 -1.7236 0.085395 .
## urbanpopper 0.62786 7.77493 0.0808 0.935669
## gdpgrowth -1.06426 1.73769 -0.6125 0.540510
## ETS:elecprodfromfossil -0.55883 0.71474 -0.7819 0.434656
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 10837000
## Residual Sum of Squares: 4547900
## R-Squared: 0.58032
## Adj. R-Squared: 0.54741
## F-statistic: 6.06858 on 12 and 28 DF, p-value: 4.235e-05
When considering panel corrected heteroskedasticitic standard errors, however, the statistical significance of the ETS decreases.