1 Preamble

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, in what detail and our assumptions of taxation levels per kg of CO2. Broadly speaking the scopes are:

  • Scope 1 – All direct emissions caused by burning something (gas, oil, wood, coal etc);
  • Scope 2 - Indirect emissions from electricity purchased and used - the carbon intensity of these (kg CO2/kWh) depends on how it is generated and also, of course, on which tariff you have. A 100% renewable electrons tariff will have a carbon intensity of ~0. If you have a ‘normal’ tariff you will just have to take what the grid offers;
  • Scope 3 - All Other Indirect Emissions from things you do - e.g. the things you buy (food, clothes, gadgets etc etc)

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.

2 How?

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:

  • Use the most recent BEIS sub-national electricity and gas demand data for ~30 local areas (MSOAs) in Southampton and estimate the CO2 emissions at MSOA and (by summing them) at City level;
  • Use the modelled CO2 emissions per dwelling data in the Energy Performance Certificate data for Southampton to do the same thing. Modelling carbon emissions from the built form is a well known and much-criticised approach. Nevertheless it provides data suitable for a #backOfaFagPacket estimate.

Unfortunately there are problems with both which we have reported in excessive detail elsewhere. In summary:

  • the most recent BEIS data is from 2018. This will not include dwellings and households that did not exist (new builds) at that time, nor account for any building stock improvements since then;
  • the EPC records are incomplete since an EPC is only created when a dwelling is rented or sold (since 2007);
  • the EPC data have some oddities that mean we have to filter out a few ‘impossible’ values.

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.

3 Current estimated annual CO2 emmisions

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.

3.1 Method

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
  • electricity: 200 g CO2e/kWh
  • gas: 215 g CO2e/kWh

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 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")
Home energy related CO2 emissions comparison for each MSOA in Southampton

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:

  • inclusion of all energy use in the BEIS data (not just hot water, heating and lighting)
  • incomplete coverage of dwellings by the EPC data
  • dwellings missing from the BEIS 2018 data which are now present in the EPC data (new builds)
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()
Table 3.1: Total domestic energy related CO2 emissions for Southampton (tonnes)
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.

4 Carbon Tax Scenarios

We now use these MSOA level estimates to calculate the tax liability of these emissions if:

  • there is no change to carbon intensity - i.e. the current baseline. In this case we can use both the BEIS and EPC derived data although they will simply differ by the same % as reported above
  • the carbon intensity of electricity falls to 100 gCO2/kWh by 2030 (an entirely feasible level) and we assume no changes to the carbon intensity of gas. In this case we can only use the BEIS data since we are unable to separate fuel source in the EPC data.

In all cases we assume:

4.1 No change to carbon intensity

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()
Table 4.1: Estimated baseline Carbon Tax liability for Southampton households/properties
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 per household per year…

However, as we would expect given Figure 3.1, if we look at the values by MSOA (Figure 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")
Energy demand comparison

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 using Census 2011 household counts) 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 progressive - 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",
       caption = "Smoothed trend line via loess")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Carbon Tax comparison by MSOA deprivation levels

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.

4.2 Reducing electricity carbon intensity

elecCF_scen1 <- 100

Under this scenario we repeat the preceding analysis but use:

  • electricity: 100 g CO2e/kWh
    • gas: 215 g CO2e/kWh
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 under Scenario 1") %>%
  kable_styling()
Table 4.2: Estimated Carbon Tax liability for Southampton households/properties under Scenario 1
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 original 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 areas 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'
Carbon tax by deprivation under Scenario 1

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'
Carbon tax by deprivation under Scenario 1

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.

5 So what?

Several things are clear from these #backOfaFagPacket estimates:

  • we need much better data
  • if the data we have is in any way remotely robust then:
    • a domestic Carbon Tax of £16/TCO2 is not going to produce a large incentive to de-carbonise
    • given that larger and wealthier households use more energy, a fixed rate Carbon Tax might be progressive - but we need dwelling level analysis to confirm this
    • but wealthier households would potentially have the capital to de-carbonise quicker

6 R packages used

  • rmarkdown (Allaire et al. 2018)
  • bookdown (Xie 2016a)
  • knitr (Xie 2016b)
  • data.table (Dowle et al. 2015)
  • ggplot2 (Wickham 2009)
  • kableExtra (Zhu 2018)
  • readxl (Wickham and Bryan 2017)

References

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.