1 fridayFagPackets

Numbers that could have been done on the back of one and should probably come with a similar health warning…

Find out more.

2 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.

3 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.

4 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.

4.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 4.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. 
## -34.089   4.248  18.134  15.049  27.962  36.771

Figure 4.1 shows that the BEIS derived estimates are generally larger than the EPC derived totals (mean difference = 15%) and in one case 36.8% 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 4.1: Total domestic energy related CO2 emissions for Southampton (tonnes)
LAName sumEPC_tCO2 sumBEIS_tCO2 nMSOAs pc_diff
Southampton 226263.3 268800.5 32 15.82481

With this in mind the total t CO2e values shown in Table 4.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.

5 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:

5.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.

carbonTaxRate <- 16

msoaDT[, ct_BEIS := sumBEIS_tCO2 * carbonTaxRate]
msoaDT[, ct_EPCs := sumEPC_tCO2 * carbonTaxRate]

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 5.1: Estimated baseline Carbon Tax liability for Southampton households/properties
LAName CarbonTaxBEIS_GBP CarbonTaxEPCs_GBP
Southampton 4,300,808 3,620,213
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?

councilTax_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 4.1, if we look at the values by MSOA (Figure 5.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 5.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 5.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 5.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.

5.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 5.2: Estimated Carbon Tax liability for Southampton households/properties under Scenario 1
LAName Baseline Scenario_1 reduction_pc
Southampton 4300808 3687381 14

Table 5.1 suggests this will result in a 14 % reduction in Carbon Tax.

Figure 5.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 5.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 5.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 (5.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.3 But are we missing the point?

While the mean carbon tax might be £ 50.65 per household per year under our baseline assumptions that is, after all, just the mean. Some households would pay a lot more and some a lot less. For the ones who pay a lot more there might just be an incentive to decarbonise. So what is the actual shape of the distribution?

Notwithstanding the caveats, we can get a sense of this from the EPC data if we use the modelled CO2 emissions per dwelling and multiply by our Carbon Tax rate (£16 per tonne/year).

epcDT <- data.table::fread(path.expand("~/data/EW_epc/domestic-E06000045-Southampton/EPCs_liveFinalClean.csv.gz"))

epcDT[, carbonTax := carbonTaxRate * CO2_EMISSIONS_CURRENT]

# check
message("The sum should match the EPC aggregate above")
## The sum should match the EPC aggregate above
prettyNum(sum(epcDT$carbonTax), big.mark = ",")
## [1] "3,621,725"
epcDT[, dep3_cuts := cut(dep3_pc, 5)]

plotDT <- epcDT[epcIsUnknownTenure != 1 & TENURE != "unknown" &
                  carbonTax < 1000 &
                  !is.na(dep3_cuts)]

myCaption <- paste0("Exclusions: \n",
                    "EPCs with uknown tenure \n",
                    nrow(epcDT[carbonTax > 1000]), " EPCs where Carbon Tax > £1000")

ggplot2::ggplot(plotDT, aes(x = carbonTax, y = TENURE, colour = dep3_cuts)) +
  geom_boxplot() +
  scale_color_discrete(name = "Deprivation") +
  theme(legend.position = "bottom") +
  guides(colour=guide_legend(nrow=2)) +
  labs(x = "Carbon Tax (£/year)",
       y = "Tenure",
       caption = myCaption)
Boxplot of dwelling level Carbon Tax by area deprivation level (% of households with 3 dimensions of deprivation)

Figure 5.5: Boxplot of dwelling level Carbon Tax by area deprivation level (% of households with 3 dimensions of deprivation)

t <- table(epcDT$TENURE, epcDT$dep3_cuts, useNA = "always")
kableExtra::kable(addmargins(t), caption = "Frequency counts of EPCs by Tenure and MSOA deprivation") %>%
  kable_styling()
Table 5.3: Frequency counts of EPCs by Tenure and MSOA deprivation
(2.24,4.08] (4.08,5.92] (5.92,7.75] (7.75,9.58] (9.58,11.4] NA Sum
156 839 627 189 89 5 1905
NO DATA! 48 272 402 50 139 0 911
owner-occupied 7284 8607 8740 1955 2778 9 29373
rental (private) 4311 5416 7341 555 1785 3 19411
rental (social) 1177 2671 4721 2616 3543 0 14728
unknown 703 1615 2088 214 499 55 5174
NA 0 0 0 0 0 0 0
Sum 13679 19420 23919 5579 8833 72 71502

Figure 5.5 suggest that in general owner-occupied dwellings will be liable for a higher Carbon Tax charge (compare across Tenure). In addition owner-occupied dwellings in areas with lower deprivation would generally pay slightly more.

This is shown more clearly in Figure 5.6 which shows the 25%, median (50%) and 75% Carbon Tax levels by deprivation and tenure. Nevertheless we can see that 75% of owner-occupier households in low deprivation areas would still be paying less than £80 a year in Carbon Tax. It seems clear therefore that to incentivise large-scale decarbonisation the Carbon Tax rate would need to be considerably higher than £16per tCO2/year.

aggDT <- plotDT[, .(median = median(carbonTax),
                    p25 = quantile(carbonTax)[[2]],
                    p75 = quantile(carbonTax)[[4]]), keyby = .(TENURE, dep3_cuts)]

myCaption <- paste0(myCaption, "\nBars show 25% and 75% quantiles"
                    )

dodge <- position_dodge(width=0.9) # https://ggplot2.tidyverse.org/reference/geom_linerange.html
ggplot2::ggplot(aggDT, aes(x = dep3_cuts, y = median, colour = TENURE, group = TENURE)) +
  geom_point(position = dodge) +
  geom_errorbar(aes(ymin = p25, ymax = p75), position = dodge, width = 0.45)+
  scale_color_discrete(name = "Tenure") +
  labs(x = "Deprivation",
       y = "Carbon Tax (£/year)",
       caption = myCaption)
Median Carbon Tax by tenure and deprivation level

Figure 5.6: Median Carbon Tax by tenure and deprivation level

6 So what?

Several things are clear from these #backOfaFagPacket estimates:

  • if the data we have is in any way remotely robust then:
    • a domestic Carbon Tax of £16/TCO2 implies a mean per household Carbon Tax for Southampton of ~ £43.77 to ~ £50.65 per year depending on calculation method;
    • in general owner-occupiers and those in low deprivation areas would pay more
    • some dwellings will incur a much higher Carbon Tax charge - but nevertheless 75% of owner-occupier households in low deprivation areas would still be paying less than £80 a year in Carbon Tax under our baseline assumptions;
    • we might need a much higher Carbon Tax rate to incetivise de-carbonisation;
    • the EPC-derived estimates show a much weaker relationship with deprivation at both area (MSOA) and dwelling level - indicating that they suppress the carbon emissions consequences of non-heat and hot water related (and non-modelled) energy use. This is not surprising - they were not intended to take account of occupant energy using practices but as a way to compare different dwellings;
  • we need smart meter data at the dwelling level to take this analysis much further!

Given that larger and wealthier households use more energy, a fixed rate Carbon Tax might be progressive but wealthier households would potentially have the capital to de-carbonise quicker. In addition social and private renters are not in a position to improve the fabric of their dwelling and so it seems unfair to penalise them for living in low energy efficiency dwellings. In this situation we might need to distinguish between unavoidable emissions (due to the built form) and avoidable ones due to occupant practices). This might open up a right can of worms

7 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.