There’s a lot of talk about Carbon Taxes right now and some early signs that the UK Government will apply them to (larger) businesses post-Brexit (i.e. post-ETS). There is currently not much noise on the idea of applying them to households but it is always a possibility given the acceptance of using tax-based incentives to attempt to suppress the consumption of bad stuff. Think tobacco, alcohol and sugar.
But what if we did? How much would it raise and from whom?
There is no simple answer to this hypothetical question since it depends what Scope of emissions we consider and in what detail. Bradky speaking the scopes are:
Estimating the emissions from Scope 3 is notably difficult so for now we’re going to make a #backOfaFagPacket estimate of the residential emissions from Scopes 1 and 2 in Southampton and see what a Carbon Tax applied to these emissions would look like.
msoaDT <- data.table::fread(here::here("data", "sotonMSOAdata.csv"))
In an ideal world we would know the fuel (gas, oil, coal, wood, electricity) inputs per year for each dwelling/household in Southampton together with details of how these are used (some methods release more carbon dioxide than others). But we don’t. Once the Smart Energy Research Laboratory really gets going we will have kWh gas and electricity data for a representative sample of British homes (but not a larger enough sample from Southampton to be helpful here). But not yet and even then it may not include other fuels… Other research has used UK data on family expenditures on Scope 1-3 ‘consumption’ but we can’t apply that directly to Southampton.
So what to do? There are a number of possible approaches and we’re going to compare two of them:
Unfortunately there are problems with both which we have reported in excessive detail elsewhere. In summary:
This means that both datasets are imperfect for the job. But they’re about as close as we can currently get.
So with the usual #backOfaFagPacket health warning, let’s try.
In this #fridayFagPacket we’re going to use these datasets to estimate the annual CO2 emissions at MSOA level for Southampton using * BEIS observed data * aggregated EPC data
Obviously the EPC-derived totals will not be the total CO2 emissions for all Southampton properties since we know not all dwellings are represented in the EPC data (see above and in more detail).
Note that we can also use the EPC estimated CO2 emissions data to look at dwelling level patterns if a Carbon Tax was applied. We leave that for a future #fridayFagPacket.
To calculate the MSOA level estimates from the BEIS data we need to apply conversion factors that convert the kWh numbers we have to CO2 emissions. We use the following:
elecCF <- 200 # g CO2e/kWh https://www.icax.co.uk/Grid_Carbon_Factors.html
gasCF <- 215 # g CO2e/kWh https://www.icax.co.uk/Carbon_Emissions_Calculator.html
Clearly if we change these assumptions then we change the results…
For the EPC we just use the estimated CO2 values - although we should note that these are based on ‘old’ electricity grid carbon intensity values (ref) and since the EPC data does not provide gas and electricity kWh data separately we cannot correct it.
msoaDT[, sumBEIS_gCO2 := (beisElecMWh*1000)*elecCF + (beisGasMWh*1000)*gasCF] # calculate via g & kWh
msoaDT[, sumBEIS_tCO2 := sumBEIS_gCO2/1000000] # tonnes
ggplot2::ggplot(msoaDT, aes(x = sumEPC_tCO2,
y = sumBEIS_tCO2,
colour = round(ownerOcc_pc))) +
geom_abline(alpha = 0.2, slope=1, intercept=0) +
geom_point() +
scale_color_continuous(name = "% owner occupiers \n(Census 2011)", high = "red", low = "green") +
#theme(legend.position = "bottom") +
labs(x = "EPC 2020 derived total T CO2/year",
y = "BEIS 2018 derived total T CO2/year",
caption = "x = y line included for clarity")
Figure 3.1: Home energy related CO2 emissions comparison for each MSOA in Southampton
#outlier <- t[sumEpcMWh > 70000]
msoaDT[, tCO2_diff_pc := 100 * ((sumBEIS_tCO2 - sumEPC_tCO2)/sumBEIS_tCO2)]
message("Distribution of % difference from BEIS derived value")
## Distribution of % difference from BEIS derived value
summary(msoaDT$tCO2_diff_pc)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -33.611 5.023 18.935 15.310 27.956 36.971
Figure 3.1 shows that the BEIS derived estimates are generally larger than the EPC derived totals (mean difference = 15.3%) and in one case 37% larger.
There are a number of potential reasons for this which are discussed in more detail elsewhere but relate to:
t <- msoaDT[, .(sumEPC_tCO2 = sum(sumEPC_tCO2),
sumBEIS_tCO2 = sum(sumBEIS_tCO2),
nMSOAs = .N), keyby = .(LAName)]
t[, pc_diff := 100 * ((sumBEIS_tCO2 - sumEPC_tCO2)/sumBEIS_tCO2)]
kableExtra::kable(t, caption = "Total domestic energy related CO2 emissions for Southampton (tonnes)") %>%
kable_styling()
LAName | sumEPC_tCO2 | sumBEIS_tCO2 | nMSOAs | pc_diff |
---|---|---|---|---|
Southampton | 225578.2 | 268800.5 | 32 | 16.0797 |
With this in mind the total t CO2e values shown in Table 3.1 shows the BEIS figures to be around 16% higher than those estimated using the EPC data. The figure of 268,801 is very close to that calculated via the Southampton Green City Tracker for Domestic Carbon Emissions in 2018.
We now use these MSOA level estimates to calculate the tax liability of these emissions if:
In all cases we assume:
Applying these rates enables us to calculate the Southampton and MSOA level Carbon Tax liability of households via the EPC and BEIS observed energy consumption methods.
msoaDT[, ct_BEIS := sumBEIS_tCO2 * 16]
msoaDT[, ct_EPCs := sumEPC_tCO2 * 16]
t <- msoaDT[, .(CarbonTaxBEIS_GBP = prettyNum(sum(ct_BEIS), big.mark = ","),
CarbonTaxEPCs_GBP = prettyNum(sum(ct_EPCs), big.mark = ",")),
keyby = .(LAName)]
kableExtra::kable(t, caption = "Estimated baseline Carbon Tax liability for Southampton households/properties") %>%
kable_styling()
LAName | CarbonTaxBEIS_GBP | CarbonTaxEPCs_GBP |
---|---|---|
Southampton | 4,300,808 | 3,609,251 |
ct_perHH <- sum(msoaDT$ct_BEIS)/sum(msoaDT$nHHs_tenure)
As we would expect the values are relatively close due to the similar total emissions values estimated above. Using the BEIS estimate this works out to a mean of £43.77 per household per year. Not a lot. Would you try to de-carbonise your energy supply to try to reduce a Carbon Tax liability of that scale?
ct_perHH <- 102000000/sum(msoaDT$nHHs_tenure)
For context, Southampton City Council project a Council Tax Requirement
of £102m in Council Tax in 2020-2021. That’s a mean of ~ £ 1038.1256743 per household per year…
However, as we would expect given Figure 3.1, if we look at the values by MSOA (4.1), we find that values differ quite substantially between the methods depending on the levels of EPC records (or missing households - see above) that we are likely to have.
ggplot2::ggplot(msoaDT, aes(x = ct_EPCs/nHHs_tenure,
y = ct_BEIS/nHHs_tenure,
colour = round(ownerOcc_pc))) +
geom_abline(alpha = 0.2, slope=1, intercept=0) +
geom_point() +
scale_color_continuous(name = "% owner occupiers \n(Census 2011)", high = "red", low = "green") +
#theme(legend.position = "bottom") +
labs(x = "EPC 2020 derived total Carbon Tax £/household/year",
y = "BEIS 2018 derived total Carbon Tax £/household/year",
caption = "x = y line included for clarity")
Figure 4.1: Energy demand comparison
#outlier <- t[sumEpcMWh > 70000]
Perhaps of more interest however is the relationship between estimated Carbon Tax £ per household and levels of deprivation. Figure 4.2 shows the estimated mean Carbon Tax per household (in £ per year) for each MSOA against the proportion of households in the MSOA who do not suffer from any dimension of deprivation as defined by the English Indices of Multiple Deprivation. As we can see the higher the proportion of households with no deprivation, the higher the mean household Carbon Tax. This suggests that a Carbon Tax will be regressive - those who pay the most are likely to be those who use more energy and thus are likely to be those who can afford to do so. Interestingly the BEIS-derived estimates show a much stronger trend than the EPC data which relies solely on building fabric model-based estimates of carbon emissions.
epcBaseline <- msoaDT[, .(MSOACode, ctSum = ct_EPCs, nHHs_tenure, dep0_pc)]
epcBaseline[, source := "EPCs 2020"]
beisBaseline <- msoaDT[, .(MSOACode, ctSum = ct_BEIS, nHHs_tenure, dep0_pc)]
beisBaseline[, source := "BEIS 2018"]
plotDT <- rbind(epcBaseline,beisBaseline)
ggplot2::ggplot(plotDT, aes(x = dep0_pc, y = ctSum/nHHs_tenure, colour = source)) +
geom_point() +
geom_smooth() +
#theme(legend.position = "bottom") +
labs(x = "% with no deprivation dimensions \n(Census 2011)",
y = "Carbon Tax £/household/year")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Figure 4.2: Carbon Tax comparison by MSOA deprivation levels
#outlier <- t[sumEpcMWh > 70000]
But we need to be very careful. Some deprived households might well spend a high proportion of their income on energy in order to heat very energy efficient homes. For them, a Carbon Tax would be similar to VAT - an additional burden that might be relatively small in £ terms (compared to a well-off high energy-using household) but high in terms of the % of their income (or expenditure). This is a well known issue highlighted by recent ONS data on family energy expenditures.
Under this scenario we repeat the preceding analysis but using:
elecCF_scen1 <- 100
msoaDT[, sumBEIS_gCO2_scen1 := (beisElecMWh*1000)*elecCF_scen1 + (beisGasMWh*1000)*gasCF] # calculate via g & kWh
msoaDT[, sumBEIS_tCO2_scen1 := sumBEIS_gCO2_scen1/1000000] # tonnes
msoaDT[, ct_BEIS_scen1 := sumBEIS_tCO2_scen1 * 16]
t <- msoaDT[, .(Baseline = sum(ct_BEIS),
Scenario_1 = sum(ct_BEIS_scen1)),
keyby = .(LAName)]
t[, reduction_pc := round(100*(1-(Scenario_1/Baseline)))]
kableExtra::kable(t, caption = "Estimated Carbon Tax liability for Southampton households/properties uner Scenario 1") %>%
kable_styling()
LAName | Baseline | Scenario_1 | reduction_pc |
---|---|---|---|
Southampton | 4300808 | 3687381 | 14 |
Table 4.1 suggests this will result in a 14 % reduction in Carbon Tax.
Figure 4.3 shows the estimated mean annual Carbon Tax per household (£ per household per year) per MSOA under the new scenario against the proportion of households in the MSOA who do not suffer from any dimension of deprivation as defined by the English Indices of Multiple Deprivation. It also shows the orioginal BEIS baseline for comparison. As we can see the shapes of the curves are similar but with an overall reduction. There do not appear to be any particular advantages for area with higher or lower deprivation levels.
scen1 <- msoaDT[, .(MSOACode, ctSum = ct_BEIS_scen1, dep0_pc,nHHs_tenure)]
scen1[, source := "BEIS 2018 (Scenario 1)"]
beisBaseline[, source := "BEIS 2018 (Baseline)"]
plotDT <- rbind(beisBaseline, scen1)
ggplot2::ggplot(plotDT, aes(x = dep0_pc, y = ctSum/nHHs_tenure, colour = source)) +
geom_point() +
geom_smooth() +
#theme(legend.position = "bottom") +
labs(x = "% with no deprivation dimensions \n(Census 2011)",
y = "Carbon Tax £/housheold/year")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Figure 4.3: Carbon tax by deprivation under Scenario 1
#outlier <- t[sumEpcMWh > 70000]
setkey(beisBaseline, MSOACode)
setkey(scen1, MSOACode)
plotDT <- beisBaseline[scen1]
plotDT[, delta := i.ctSum-ctSum]
ggplot2::ggplot(plotDT, aes(x = dep0_pc, y = delta/nHHs_tenure)) +
geom_point() +
geom_smooth() +
#theme(legend.position = "bottom") +
labs(x = "% with no deprivation dimensions \n(Census 2011)",
y = "Increase/decrease (-ve) in Carbon Tax £ per household/year")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Figure 4.4: Carbon tax by deprivation under Scenario 1
outlier <- plotDT[delta < -40000]
outlier$MSOACode
## [1] "E02003577"
However if we analyse the total change by MSOA (4.4) we see that one area (E02003577) shows a marked reduction. We have seen this area before - it has the highest electricity demand so no surprises there.
Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, and Winston Chang. 2018. Rmarkdown: Dynamic Documents for R. https://CRAN.R-project.org/package=rmarkdown.
Dowle, M, A Srinivasan, T Short, S Lianoglou with contributions from R Saporta, and E Antonyan. 2015. Data.table: Extension of Data.frame. https://CRAN.R-project.org/package=data.table.
Wickham, Hadley. 2009. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. http://ggplot2.org.
Wickham, Hadley, and Jennifer Bryan. 2017. Readxl: Read Excel Files. https://CRAN.R-project.org/package=readxl.
Xie, Yihui. 2016a. Bookdown: Authoring Books and Technical Documents with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://github.com/rstudio/bookdown.
———. 2016b. Knitr: A General-Purpose Package for Dynamic Report Generation in R. https://CRAN.R-project.org/package=knitr.
Zhu, Hao. 2018. KableExtra: Construct Complex Table with ’Kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.