Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • twr1m15/fridayFagPackets
  • ba1e12/fridayFagPackets
  • SERG/fridayFagPackets
3 results
Show changes
Commits on Source (94)
Showing
with 41781 additions and 5053 deletions
......@@ -38,633 +38,350 @@ library(kableExtra)
library(readxl)
```
# Energy Performance Certificates (EPCs)
# fridayFagPackets
Apart from a few exempted buildings, a dwelling must have an EPC when constructed, sold or let. This means that over time we will have an EPC for an increasing number of properties and we should _already_ have EPCs for all rented properties.
Numbers that could have been done on the back of one and should probably come with a similar health warning...
EPCs are not necessarily up to date. For example if a property has not been sold or let since a major upgrade, the effects of that upgrade may not be visible in the data.
>Find out [more](https://dataknut.github.io/fridayFagPackets/).
Further reading:
# Preamble
* https://epc.opendatacommunities.org/docs/guidance#technical_notes
* https://en.wikipedia.org/wiki/Energy_Performance_Certificate_(United_Kingdom)#Procedure
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.
> check what feeds in automatically e.f. RHI installs etc
But what if we did? How much would it raise and from whom?
We have to assume the data we have is the _current state of play_ for these dwellings.
There is no simple answer to this hypothetical question since it depends what [scope of emissions](https://www.carbontrust.com/resources/briefing-what-are-scope-3-emissions) we consider, in what detail and our assumptions of taxation levels per kg of CO2. Broadly speaking the scopes are:
# Southampton EPCs
* 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](https://www.carbonintensity.org.uk/);
* Scope 3 - All Other Indirect Emissions from things you do - e.g. the things you buy (food, clothes, gadgets etc etc)
```{r, loadSoton}
df <- path.expand("~/data/EW_epc/domestic-E06000045-Southampton/certificates.csv")
allEPCs_DT <- data.table::fread(df)
```
Estimating the emissions from [Scope 3](https://www.carbontrust.com/resources/briefing-what-are-scope-3-emissions) is [notably difficult](https://www.sciencedirect.com/science/article/pii/S0921800913000980) 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.
The EPC data file has `r nrow(allEPCs_DT)` records for Southampton and `r ncol(allEPCs_DT)` variables. We're not interested in all of these, we want:
# How?
* PROPERTY_TYPE: Describes the type of property such as House, Flat, Maisonette etc. This is the type differentiator for dwellings;
* BUILT_FORM: The building type of the Property e.g. Detached, Semi-Detached, Terrace etc. Together with the Property Type, the Build Form produces a structured description of the property;
* ENVIRONMENT_IMPACT_CURRENT: A measure of the property's current impact on the environment in terms of carbon dioxide (CO₂) emissions. The higher the rating the lower the CO₂ emissions. (CO₂ emissions in tonnes / year) **NB this is a categorised scale calculated from CO2_EMISSIONS_CURRENT**;
* ENERGY_CONSUMPTION_CURRENT: Current estimated total energy consumption for the property in a 12 month period (**kWh/m2**). Displayed on EPC as the current primary energy use per square metre of floor area. **Nb: this covers heat and hot water (and lightng?)**
* CO2_EMISSIONS_CURRENT: CO₂ emissions per year in tonnes/year **NB: this is calculated from the modelled kWh energy input using (possibly) outdated carbon intensity values**;
* TENURE: Describes the tenure type of the property. One of: Owner-occupied; Rented (social); Rented (private).
We're also going to keep:
* WIND_TURBINE_COUNT: Number of wind turbines; 0 if none;
* PHOTO_SUPPLY: Percentage of photovoltaic area as a percentage of total roof area. 0% indicates that a Photovoltaic Supply is not present in the property;
* TOTAL_FLOOR_AREA: The total useful floor area is the total of all enclosed spaces measured to the internal face of the external walls, i.e. the gross floor area as measured in accordance with the guidance issued from time to time by the Royal Institute of Chartered Surveyors or by a body replacing that institution. (m²) - to allow for the calculation of total energy demand;
* POSTCODE - to allow linkage to other datasets
* LOCAL_AUTHORITY_LABEL - for checking
These may indicate 'non-grid' energy inputs.
If an EPC has been updated or refreshed, the EPC dataset will hold multiple EPC records for that property. We will just select the most recent.
```{r, checkData}
# select just these vars
dt <- allEPCs_DT[, .(BUILDING_REFERENCE_NUMBER, LMK_KEY, LODGEMENT_DATE, PROPERTY_TYPE, BUILT_FORM,
ENVIRONMENT_IMPACT_CURRENT, ENERGY_CONSUMPTION_CURRENT, CO2_EMISSIONS_CURRENT, TENURE,
PHOTO_SUPPLY, WIND_TURBINE_COUNT, TOTAL_FLOOR_AREA,
POSTCODE, LOCAL_AUTHORITY_LABEL)]
# select most recent record within BUILDING_REFERENCE_NUMBER - how?
# better check this is doing so
setkey(dt,BUILDING_REFERENCE_NUMBER, LODGEMENT_DATE) # sort by date within reference number
sotonUniqueEPCsDT <- unique(dt, by = "BUILDING_REFERENCE_NUMBER",
fromLast = TRUE) # which one does it take?
test1 <- allEPCs_DT[, .(min1 = min(LODGEMENT_DATE),
nRecords = .N),
keyby = .(BUILDING_REFERENCE_NUMBER)]
test2 <- sotonUniqueEPCsDT[, .(min2 = min(LODGEMENT_DATE)),
keyby = .(BUILDING_REFERENCE_NUMBER)]
t <- test1[test2]
t[, diff := min2 - min1]
summary(t[nRecords > 1]) # diff is always >= 0 so min2 (after unique) is always > min1
# confirms fromLast = TRUE has selected the most recent within BUILDING_REFERENCE_NUMBER
skimr::skim(sotonUniqueEPCsDT)
```{r, loadMSOAData}
msoaDT <- data.table::fread(here::here("data", "sotonMSOAdata.csv"))
```
As we can see that we have `r uniqueN(dt$BUILDING_REFERENCE_NUMBER)` unique property reference numbers. We can also see some strangeness. In some cases we seem to have:
* negative energy consumption;
* negative emissions;
* 0 floor area
This is not surprising since the kWh/y and TCO2/y values are estimated using a model but before we go any further we'd better check if these are significant in number.
## Check 'missing' EPC rates
We will do this mostly at MSOA level as it allows us to link to other MSOA level datasets. Arguably it would be better to do this at LSOA level but...
First we'll use the BEIS 2018 MSOA level annual electricity data to estimate the number of meters (not properties) - some addresses can have 2 meters (e.g. standard & economy 7). This is more useful than the number of gas meters since not all dwellings have mains gas but all have an electricity meter.
```{r, checkBEIS}
beisElecDT <- data.table::fread("~/data/beis/MSOA_DOM_ELEC_csv/MSOA_ELEC_2018.csv")
sotonElecDT <- beisElecDT[LAName %like% "Southampton", .(nElecMeters = METERS,
beisElecMWh = KWH/1000,
MSOACode, LAName)
]
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](https://serl.ac.uk) 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'](https://www.sciencedirect.com/science/article/pii/S0921800913000980) 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:
beisGasDT <- data.table::fread("~/data/beis/MSOA_DOM_GAS_csv/MSOA_GAS_2018.csv")
sotonGasDT <- beisGasDT[LAName %like% "Southampton", .(nGasMeters = METERS,
beisGasMWh = KWH/1000,
MSOACode)]
setkey(sotonElecDT, MSOACode)
setkey(sotonGasDT, MSOACode)
sotonEnergyDT <- sotonGasDT[sotonElecDT]
sotonEnergyDT[, beisEnergyMWh := beisElecMWh + beisGasMWh]
#head(sotonEnergyDT)
```
* Use the most recent [BEIS sub-national electricity and gas demand data](https://www.gov.uk/government/publications/regional-energy-data-guidance-note) 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](https://epc.opendatacommunities.org/docs/guidance) for Southampton to do the same thing. Modelling carbon emissions from the built form is [a well known](https://www.sciencedirect.com/science/article/pii/S2212609015000333) 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](epcChecks.html). In summary:
Next we'll check for the number of households reported by the 2011 Census.
* 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](epcChecks.html#36_Data_summary).
> would be better to use dwellings but this gives us tenure
This means that both datasets are imperfect for the job. But they're about as close as we can currently get.
```{r, checkCensus}
#censusDT <- data.table::fread(path.expand("~/data/"))
# IMD ----
deprivationDT <- data.table::fread(path.expand("~/data/census2011/2011_MSOA_deprivation.csv"))
deprivationDT[, totalHouseholds := `Household Deprivation: All categories: Classification of household deprivation; measures: Value`]
deprivationDT[, MSOACode := `geography code`]
setkey(deprivationDT, MSOACode)
setkey(sotonElecDT, MSOACode)
# link LA name from Soton elec for now
sotonDep_DT <- deprivationDT[sotonElecDT[, .(MSOACode, LAName)]]
sotonDep_DT[, nHHs_deprivation := `Household Deprivation: All categories: Classification of household deprivation; measures: Value`]
So with the usual #backOfaFagPacket health warning, let's try.
#sotonDep_DT[, .(nHouseholds = sum(totalHouseholds)), keyby = .(LAName)]
# Current estimated annual CO2 emmisions
# census tenure ----
sotonTenureDT <- data.table::fread(path.expand("~/data/census2011/2011_MSOA_householdTenure_Soton.csv"))
In this #fridayFagPacket we're going to use these datasets to estimate the annual CO2 emissions at MSOA level for Southampton using:
sotonTenureDT[, census2011_socialRent := `Tenure: Social rented; measures: Value`]
sotonTenureDT[, census2011_privateRent := `Tenure: Private rented; measures: Value`]
sotonTenureDT[, census2011_ownerOccupy := `Tenure: Owned; measures: Value`]
sotonTenureDT[, census2011_other := `Tenure: Living rent free; measures: Value`]
sotonTenureDT[, MSOACode := `geography code`]
* BEIS observed data
* aggregated EPC data
sotonTenureDT[, hhCheck := census2011_socialRent + census2011_privateRent + census2011_ownerOccupy + census2011_other]
sotonTenureDT[, nHHs_tenure := `Tenure: All households; measures: Value`]
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](epcChecks.html#31_Check_‘missing’_EPC_rates)).
# summary(sotonTenureDT[, .(hhCheck, nHHs_tenure)])
# might not quite match due to cell perturbation etc?
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.
# join em ----
setkey(sotonDep_DT, MSOACode)
setkey(sotonTenureDT, MSOACode)
## Method
sotonCensus2011_DT <- sotonTenureDT[sotonDep_DT]
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:
t <- sotonCensus2011_DT[, .(sum_Deprivation = sum(nHHs_deprivation),
sum_Tenure = sum(nHHs_tenure)), keyby = .(LAName)]
kableExtra::kable(t, caption = "Census derived household counts")
```{r, setCarbonFactors, echo = TRUE}
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
```
That's lower (as expected) but doesn't allow for dwellings that were empty on census night.
```{r, checkPostcodes}
# Postcodes don't help - no count of addresses in the data (there used to be??)
# but we can use it to check which Soton postcodes are missing from the EPC file
soPostcodesDT <- data.table::fread(path.expand("~/data/UK_postcodes/NSPL_AUG_2020_UK/Data/multi_csv/NSPL_AUG_2020_UK_SO.csv"))
soPostcodesDT <- soPostcodesDT[is.na(doterm)] # keep current
* electricity: `r elecCF` g CO2e/kWh
* gas: `r gasCF` g CO2e/kWh
sotonPostcodesDT <- soPostcodesDT[laua == "E06000045"] # keep Southampton City
Clearly if we change these assumptions then we change the results...
sotonPostcodesReducedDT <- sotonPostcodesDT[, .(pcd, pcd2, pcds, laua, msoa11, lsoa11)]
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](https://www.passivhaustrust.org.uk/guidance_detail.php?gId=44) and since the EPC data does not provide gas and electricity kWh data separately, we cannot correct it.
sotonPostcodesReducedDT[, c("pc_chunk1","pc_chunk2" ) := tstrsplit(pcds,
split = " "
)
]
sotonPostcodesReducedDT[, .(nEPCs = .N), keyby = .(pc_chunk1)]
```
We should not have single digit postcodes in the postcode data - i.e. S01 should not be there (since 1993). Southampton City is unusual in only having [double digit postcodes](https://en.wikipedia.org/wiki/SO_postcode_area).
```{r, aggregateEPCsToPostcodes}
# EPC
# set up counters
sotonUniqueEPCsDT[, epcIsSocialRent := ifelse(TENURE == "rental (social)", 1, 0)]
sotonUniqueEPCsDT[, epcIsPrivateRent := ifelse(TENURE == "rental (private)", 1, 0)]
sotonUniqueEPCsDT[, epcIsOwnerOcc := ifelse(TENURE == "owner-occupied", 1, 0)]
sotonUniqueEPCsDT[, epcIsUnknownTenure := ifelse(TENURE == "NO DATA!" |
TENURE == "" , 1, 0)]
# aggregate EPCs to postcodes
sotonEpcPostcodes_DT <- sotonUniqueEPCsDT[, .(nEPCs = .N,
sumEPC_tCO2 = sum(CO2_EMISSIONS_CURRENT, na.rm = TRUE),
n_epcIsSocialRent = sum(epcIsSocialRent, na.rm = TRUE),
n_epcIsPrivateRent = sum(epcIsPrivateRent, na.rm = TRUE),
n_epcIsOwnerOcc = sum(epcIsOwnerOcc, na.rm = TRUE),
n_epcIsUnknownTenure = sum(epcIsUnknownTenure, na.rm = TRUE),
sumEpcMWh = sum(ENERGY_CONSUMPTION_CURRENT* TOTAL_FLOOR_AREA)/1000), # crucial as ENERGY_CONSUMPTION_CURRENT = kWh/m2
keyby = .(POSTCODE, LOCAL_AUTHORITY_LABEL)]
sotonEpcPostcodes_DT[, c("pc_chunk1","pc_chunk2" ) := tstrsplit(POSTCODE,
split = " "
)
]
sotonEpcPostcodes_DT[, .(nEPCs = .N), keyby = .(pc_chunk1)]
# check original EPC data for Soton - which postcodes are covered?
allEPCs_DT[, c("pc_chunk1","pc_chunk2" ) := tstrsplit(POSTCODE,
split = " "
)
]
allEPCs_DT[, .(nEPCs = .N), keyby = .(pc_chunk1)]
```
It looks like we have EPCs for each postcode sector which is good.
```{r, matchPostcodesToEPCPostcodes}
# match the EPC postcode summaries to the postcode extract
sotonPostcodesReducedDT[, POSTCODE_s := stringr::str_remove(pcds, " ")]
setkey(sotonPostcodesReducedDT, POSTCODE_s)
sotonPostcodesReducedDT[, MSOACode := msoa11]
message("Number of postcodes: ",uniqueN(sotonPostcodesReducedDT$POSTCODE_s))
sotonEpcPostcodes_DT[, POSTCODE_s := stringr::str_remove(POSTCODE, " ")]
setkey(sotonEpcPostcodes_DT, POSTCODE_s)
message("Number of postcodes with EPCs: ",uniqueN(sotonEpcPostcodes_DT$POSTCODE_s))
dt <- sotonEpcPostcodes_DT[sotonPostcodesReducedDT]
# aggregate to MSOA - watch for NAs where no EPCs in a given postcode
sotonEpcMSOA_DT <- dt[, .(nEPCs = sum(nEPCs, na.rm = TRUE),
sumEPC_tCO2 = sum(sumEPC_tCO2, na.rm = TRUE),
n_epcIsSocialRent = sum(n_epcIsSocialRent, na.rm = TRUE),
n_epcIsPrivateRent = sum(n_epcIsPrivateRent, na.rm = TRUE),
n_epcIsOwnerOcc = sum(n_epcIsOwnerOcc, na.rm = TRUE),
n_epcIsUnknownTenure = sum(n_epcIsUnknownTenure, na.rm = TRUE),
sumEpcMWh = sum(sumEpcMWh, na.rm = TRUE)
),
keyby = .(MSOACode) # change name on the fly for easier matching
]
#summary(sotonEpcMSOA_DT)
```{r, co2BEIS}
msoaDT[, sumBEIS_gCO2 := (beisElecMWh*1000)*elecCF + (beisGasMWh*1000)*gasCF] # calculate via g & kWh
msoaDT[, sumBEIS_tCO2 := sumBEIS_gCO2/1000000] # tonnes
```
So we have some postcodes with no EPCs.
```{r, co2MSOAPlot, fig.cap="Home energy related CO2 emissions comparison for each MSOA in Southampton"}
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")
Join the estimates together at MSOA level for comparison. There are `r uniqueN(sotonElecDT$MSOACode)` MSOAs 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")
summary(msoaDT$tCO2_diff_pc)
```{r, joinMSOA}
# 32 LSOAs in Soton
# add deprivation
setkey(sotonEnergyDT, MSOACode)
setkey(sotonCensus2011_DT, MSOACode)
setkey(sotonEpcMSOA_DT, MSOACode)
```
sotonMSOA_DT <- sotonCensus2011_DT[sotonEnergyDT]
#names(sotonMSOA_DT)
sotonMSOA_DT <- sotonEpcMSOA_DT[sotonMSOA_DT]
#names(sotonMSOA_DT)
Figure \@ref(fig:co2MSOAPlot) shows that the BEIS derived estimates are generally larger than the EPC derived totals (mean difference = `r round(mean(msoaDT$tCO2_diff_pc),1)`%) and in one case `r round(max(msoaDT$tCO2_diff_pc),1)`% larger.
# add MSOA names from the postcode LUT
There are a number of potential reasons for this which are discussed in [more detail elsewhere](epcChecks.html#fig:energyMSOAPlot) but relate to:
msoaNamesDT <- data.table::as.data.table(readxl::read_xlsx(path.expand("~/data/UK_postcodes/NSPL_AUG_2020_UK/Documents/MSOA (2011) names and codes UK as at 12_12.xlsx")))
msoaNamesDT[, MSOACode := MSOA11CD]
msoaNamesDT[, MSOAName := MSOA11NM]
setkey(msoaNamesDT, MSOACode)
* 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)
sotonMSOA_DT <- msoaNamesDT[sotonMSOA_DT]
```{r, sotonCO2}
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)]
#names(sotonMSOA_DT)
kableExtra::kable(t, caption = "Total domestic energy related CO2 emissions for Southampton (tonnes)") %>%
kable_styling()
```
```{r, compareEpcEstimates}
t <- sotonMSOA_DT[, .(nHouseholds_2011 = sum(nHHs_tenure),
nElecMeters_2018 = sum(nElecMeters),
nEPCs_2020 = sum(nEPCs),
sumEPCMWh = sum(sumEpcMWh),
sumBEISMWh = sum(beisEnergyMWh),
sumEPC_tCO2 = sum(sumEPC_tCO2)
)]
With this in mind the total t CO2e values shown in Table \@ref(tab:sotonCO2) shows the BEIS figures to be around 16% higher than those estimated using the EPC data. The figure of `r prettyNum(round(t$sumBEIS_tCO2), big.mark = ",")` is very close to that calculated via the [Southampton Green City Tracker](https://soton-uni.maps.arcgis.com/apps/opsdashboard/index.html#/c3041574a8794439a39045b7ee341cfa) for Domestic Carbon Emissions in 2018.
kableExtra::kable(t, caption = "Comparison of different estimates of the number of dwellings and energy demand") %>%
kable_styling()
nHouseholds_2011f <- sum(sotonMSOA_DT$nHHs_tenure)
nElecMeters_2018f <- sum(sotonMSOA_DT$elecMeters)
nEPCs_2020f <- sum(sotonMSOA_DT$nEPCs)
# Carbon Tax Scenarios
makePC <- function(x,y,r){
# make a percent of x/y and round it to r decimal places
pc <- round(100*(x/y),r)
return(pc)
}
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](https://www.carbonintensity.org.uk/) by 2030 (an [entirely feasible level](https://www.nationalgrideso.com/future-energy/future-energy-scenarios/fes-2020-documents)) 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.
We can see that the number of EPCs we have is:
In all cases we assume:
* `r makePC(nEPCs_2020f,nHouseholds_2011f,1)`% of Census 2011 households
* `r makePC(nEPCs_2020f,nElecMeters_2018f,1)`% of the recorded 2018 electricity meters
* no emissions allowances (unlike the ETS and also [current UK government proposals](https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/828824/Carbon_Emissions_Tax_-_Technical_Note__1_.pdf))
* [Carbon tax rate of £16/TCO2](https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/828824/Carbon_Emissions_Tax_-_Technical_Note__1_.pdf) (currently only proposed for [businesses](https://www.gov.uk/government/publications/changes-to-tax-provisions-for-carbon-emissions-tax/changes-to-tax-provisions-for-carbon-emissions-tax))
* no other behavioural or building fabric related changes (highly unlikely)
We can also see that despite having 'missing' EPCs, the estimated total EPC-derived energy demand is marginally higher than the BEIS-derived weather corrected energy demand data. Given that the BEIS data accounts for all heating, cooking, hot water, lighting and appliance use we would expect the EPC data to be lower _even if no EPCs were missing..._
## No change to carbon intensity
```{r, missingEPCbyMSOA, fig.cap="% 'missing' rates comparison"}
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.
sotonMSOA_DT[, dep0_pc := 100*(`Household Deprivation: Household is not deprived in any dimension; measures: Value`/nHHs_deprivation)]
sotonMSOA_DT[, socRent_pc := 100*(census2011_socialRent/nHHs_tenure)]
sotonMSOA_DT[, privRent_pc := 100*(census2011_privateRent/nHHs_tenure)]
sotonMSOA_DT[, ownerOcc_pc := 100*(census2011_ownerOccupy/nHHs_tenure)]
```{r, msoaScenario1}
carbonTaxRate <- 16
t <- sotonMSOA_DT[, .(MSOAName, MSOACode, nHHs_tenure,nElecMeters,nEPCs,
dep0_pc, socRent_pc, privRent_pc, ownerOcc_pc,sumEpcMWh, beisEnergyMWh )]
msoaDT[, ct_BEIS := sumBEIS_tCO2 * carbonTaxRate]
msoaDT[, ct_EPCs := sumEPC_tCO2 * carbonTaxRate]
t[, pc_missingHH := makePC(nEPCs,nHHs_tenure,1)]
t[, pc_missingMeters := makePC(nEPCs,nElecMeters,1)]
t[, pc_energyBEIS := makePC(sumEpcMWh,beisEnergyMWh,1)]
t <- msoaDT[, .(CarbonTaxBEIS_GBP = prettyNum(sum(ct_BEIS), big.mark = ","),
CarbonTaxEPCs_GBP = prettyNum(sum(ct_EPCs), big.mark = ",")),
keyby = .(LAName)]
kableExtra::kable(t[order(-pc_missingHH)], digits = 2, caption = "EPC records as a % of n census households and n meters per MSOA") %>%
kableExtra::kable(t, caption = "Estimated baseline Carbon Tax liability for Southampton households/properties") %>%
kable_styling()
ggplot2::ggplot(t, aes(x = pc_missingHH,
y = pc_missingMeters,
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 = "EPCs 2020 as % of Census 2011 households",
y = "EPCs 2020 as % of electricity meters 2018",
caption = "x = y line included for clarity")
outlierMSOA <- t[pc_missingHH > 100]
ct_perHH <- sum(msoaDT$ct_BEIS)/sum(msoaDT$nHHs_tenure)
```
Figure \@ref(tab:missingEPCbyMSOA) suggests that rates vary considerably by MSOA but are relatively consistent across the two baseline 'truth' estimates with the exception of `r outlierMSOA$MSOACode` which appears to have many more EPCs than Census 2011 households. It is worth noting that [this MSOA](https://www.localhealth.org.uk/#c=report&chapter=c01&report=r01&selgeo1=msoa_2011.E02003577&selgeo2=eng.E92000001) covers the city centre and dock areas which have had substantial new build since 2011 and so may have households inhabiting dwellings that did not exist at Census 2011. This is also supported by the considerably higher EPC derived energy demand data compared to BEIS's 2018 data - although it suggests the dwellings are either very new (since 2018) or are yet to be occupied.
As we would expect those MSOAs with the lowest EPC coverage on both baseline measures tend to have higher proportions of owner occupiers.
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 ~ £`r round(ct_perHH,2)` 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?
We can use the same approach to compare estimates of total energy demand at the MSOA level. To do this we compare:
```{r, councilTax}
councilTax_perHH <- 102000000/sum(msoaDT$nHHs_tenure)
```
* estimated total energy demand in MWh/year derived from the EPC estimates. This energy only relates to `current primary energy` (space heating, hot water and lighting) and of course also suffers from missing EPCs (see above)
* observed electricity and gas demand collated by BEIS for their sub-national statistical series. This applies to all domestic energy demand but the most recent data is for 2018 so will suffer from the absence of dwellings that are present in the most recent EPC data (see above).
For context, Southampton City Council project a `Council Tax Requirement` of £102m in Council Tax in [2020-2021](https://www.southampton.gov.uk/council-tax/information/how-much-we-spend.aspx). That's a mean of ~ £ `r round(councilTax_perHH)` per household per year...
We should therefore not expect the values to match but we might reasonably expect a correlation.
```{r, energyMSOAPlot, fig.cap="Energy demand comparison"}
ggplot2::ggplot(t, aes(x = sumEpcMWh,
y = beisEnergyMWh,
However, as we would expect given Figure \@ref(fig:co2MSOAPlot), if we look at the values by MSOA (Figure \@ref(fig:carbonTaxMSOAPlot)), 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.
```{r, carbonTaxMSOAPlot, fig.cap="Energy demand comparison"}
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 MWh/year",
y = "BEIS 2018 derived total MWh/year",
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")
outlier <- t[sumEpcMWh > 70000]
```
\@ref(fig:energyMSOAPlot) shows that both of these are true. MSOAs with a high proportion of owner occupiers (and therefore more likely to have missing EPCs) tend to have higher observed energy demand than the EOC data suggests - they are above the reference line. MSOAs with a lower proportion of owner occupiers (and therefore more likely to have more complete EPC coverage) tend to be on or below the line. As before we have the same notable outlier (`r outlier$MSOACode`) and for the same reasons... In this case this produces a much higher energy demand estimate than the BEIS 2018 data records
## Check ENERGY_CONSUMPTION_CURRENT
We recode the current energy consumption into categories for comparison with other low values and the presence of wind turbines/PV. We use -ve, 0 and 1 kWh as the thresholds of interest.
```{r, checkEnergy, fig.cap="Histogram of ENERGY_CONSUMPTION_CURRENT"}
ggplot2::ggplot(sotonUniqueEPCsDT, aes(x = ENERGY_CONSUMPTION_CURRENT)) +
geom_histogram(binwidth = 5) +
facet_wrap(~TENURE) +
geom_vline(xintercept = 0)
underZero <- nrow(sotonUniqueEPCsDT[ENERGY_CONSUMPTION_CURRENT < 0])
t <- with(sotonUniqueEPCsDT[ENERGY_CONSUMPTION_CURRENT < 0],
table(BUILT_FORM,TENURE))
kableExtra::kable(t, caption = "Properties with ENERGY_CONSUMPTION_CURRENT < 0")
# do we think this is caused by solar/wind?
sotonUniqueEPCsDT[, hasWind := ifelse(WIND_TURBINE_COUNT > 0, "Yes", "No")]
#table(sotonUniqueEPCsDT$hasWind)
sotonUniqueEPCsDT[, hasPV := ifelse(PHOTO_SUPPLY >0, "Yes", "No")]
#table(sotonUniqueEPCsDT$hasPV)
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT < 0, "-ve kWh/y", NA)]
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT == 0, "0 kWh/y", consFlag)]
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT > 0 &
ENERGY_CONSUMPTION_CURRENT <= 1, "0-1 kWh/y", consFlag)]
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT > 1, "1+ kWh/y", consFlag)]
t <- sotonUniqueEPCsDT[, .(nObs = .N), keyby = .(consFlag, hasWind, hasPV)]
kableExtra::kable(t, caption = "Properties in ENERGY_CONSUMPTION_CURRENT category by presence of microgeneration")
```
There are only `r underZero` dwellings where ENERGY_CONSUMPTION_CURRENT < 0 and none of them seem to have PV or a wind turbine so we can probably ignore them.
```{r, energyTenure, fig.cap="Comparing distributions of ENERGY_CONSUMPTION_CURRENT by tenure and built form"}
# repeat with a density plot to allow easy overlap
# exclude those with no data
ggplot2::ggplot(sotonUniqueEPCsDT[TENURE != "NO DATA!" &
TENURE != "unknown" &
TENURE != ""], aes(x = ENERGY_CONSUMPTION_CURRENT,
fill = TENURE, alpha = 0.2)) +
geom_density() +
facet_wrap(~BUILT_FORM) +
guides(alpha = FALSE) +
theme(legend.position = "bottom")
#outlier <- t[sumEpcMWh > 70000]
```
## Check CO2_EMISSIONS_CURRENT
Next we do the same for current emissions. Repeat the coding for total floor area using 0 and 1 TCO2/y as the threshold of interest.
```{r, checkEmissions, fig.cap="Histogram of CO2_EMISSIONS_CURRENT"}
ggplot2::ggplot(sotonUniqueEPCsDT, aes(x = CO2_EMISSIONS_CURRENT)) +
geom_histogram(binwidth = 1)
nZeroEmissions <- nrow(sotonUniqueEPCsDT[CO2_EMISSIONS_CURRENT < 0])
Perhaps of more interest however is the relationship between estimated Carbon Tax £ per household and levels of deprivation. Figure \@ref(fig:carbonTaxMSOAPlotDep) 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](https://www.nomisweb.co.uk/census/2011/qs119ew). 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.
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT < 0, "-ve CO2/y", NA)]
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT == 0, "0 CO2/y", emissionsFlag)]
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT > 0 &
CO2_EMISSIONS_CURRENT <= 1, "0-1 TCO2/y", emissionsFlag)]
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT > 1, "1+ TCO2/y", emissionsFlag)]
```{r, carbonTaxMSOAPlotDep, fig.cap="Carbon Tax comparison by MSOA deprivation levels"}
t <- sotonUniqueEPCsDT[, .(nObs = .N), keyby = .(emissionsFlag, hasWind, hasPV)]
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"]
kableExtra::kable(t, caption = "Properties with CO2_EMISSIONS_CURRENT < 0 by presence of microgeneration")
plotDT <- rbind(epcBaseline,beisBaseline)
kableExtra::kable(round(100*(prop.table(table(sotonUniqueEPCsDT$emissionsFlag,
sotonUniqueEPCsDT$consFlag,
useNA = "always")
)
)
,2)
, caption = "% properties in CO2_EMISSIONS_CURRENT categories by ENERGY_CONSUMPTION_CURRENT categories")
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")
#outlier <- t[sumEpcMWh > 70000]
```
There are `r nZeroEmissions` properties with 0 or negative emissions. It looks like they are also the properties with -ve kWh as we might expect. So we can safely ignore them.
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](https://www.sciencedirect.com/science/article/pii/S0921800913000980) highlighted by recent [ONS data on family energy expenditures](https://twitter.com/dataknut/status/1312855327491133441/photo/1).
## Check ENVIRONMENT_IMPACT_CURRENT
## Reducing electricity carbon intensity
`Environmental impact` should decrease as emissions increase.
```{r, checkImpact, fig.cap="Histogram of ENVIRONMENT_IMPACT_CURRENT"}
ggplot2::ggplot(allEPCs_DT, aes(x = ENVIRONMENT_IMPACT_CURRENT)) +
geom_histogram()
```{r, elecScenario}
elecCF_scen1 <- 100
```
So what is the relationship between ENVIRONMENT_IMPACT_CURRENT and CO2_EMISSIONS_CURRENT? It is not linear... (Figure \@ref(fig:checkEmissionsImpact)) and there are some interesting outliers.
```{r, checkEmissionsImpact, fig.cap="PLot of ENVIRONMENT_IMPACT_CURRENT vs CO2_EMISSIONS_CURRENT"}
ggplot2::ggplot(allEPCs_DT, aes(x = CO2_EMISSIONS_CURRENT,
y = ENVIRONMENT_IMPACT_CURRENT,
colour = TENURE)) +
geom_point() +
facet_wrap(TENURE~.) +
theme(legend.position = "bottom")
```
Under this scenario we repeat the preceding analysis but use:
## Check TOTAL_FLOOR_AREA
Repeat the coding for total floor area using 5 m2 as the threshold of interest.
```{r, checkFloorArea, fig.cap="Histogram of TOTAL_FLOOR_AREA"}
ggplot2::ggplot(sotonUniqueEPCsDT, aes(x = TOTAL_FLOOR_AREA)) +
geom_histogram(binwidth = 1)
nZeroFloorArea <- nrow(sotonUniqueEPCsDT[TOTAL_FLOOR_AREA < 0])
sotonUniqueEPCsDT[, floorFlag := ifelse(TOTAL_FLOOR_AREA == 0, "0 m2", NA)]
sotonUniqueEPCsDT[, floorFlag := ifelse(TOTAL_FLOOR_AREA > 0 &
TOTAL_FLOOR_AREA <= 10, "0-5 m2", floorFlag)]
sotonUniqueEPCsDT[, floorFlag := ifelse(TOTAL_FLOOR_AREA > 10, "5+ m2", floorFlag)]
* electricity: `r elecCF_scen1` g CO2e/kWh
* gas: `r gasCF` g CO2e/kWh
t <- with(sotonUniqueEPCsDT, table(floorFlag, consFlag))
kableExtra::kable(round(100*prop.table(t),2), caption = "% properties with TOTAL_FLOOR_AREA category by ENERGY_CONSUMPTION_CURRENT category")
```{r, msoaScenario1Table}
kableExtra::kable(head(sotonUniqueEPCsDT[, .(BUILDING_REFERENCE_NUMBER, PROPERTY_TYPE, TOTAL_FLOOR_AREA,
ENERGY_CONSUMPTION_CURRENT)][order(-TOTAL_FLOOR_AREA)], 10),
caption = "Top 10 by floor area (largest)")
msoaDT[, sumBEIS_gCO2_scen1 := (beisElecMWh*1000)*elecCF_scen1 + (beisGasMWh*1000)*gasCF] # calculate via g & kWh
msoaDT[, sumBEIS_tCO2_scen1 := sumBEIS_gCO2_scen1/1000000] # tonnes
kableExtra::kable(head(sotonUniqueEPCsDT[, .(BUILDING_REFERENCE_NUMBER, PROPERTY_TYPE, TOTAL_FLOOR_AREA,
ENERGY_CONSUMPTION_CURRENT)][order(TOTAL_FLOOR_AREA)], 10),
caption = "Bottom 10 by floor area (smallest)")
msoaDT[, ct_BEIS_scen1 := sumBEIS_tCO2_scen1 * 16]
kableExtra::kable(round(100*prop.table(t),2), caption = "% properties with TOTAL_FLOOR_AREA category by ENERGY_CONSUMPTION_CURRENT category")
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()
```
\@ref(tab:checkEmissions) shows that the properties with floor area of < 10m2 are not necessarily the ones with 0 or negative kWh values. Nevertheless they represent a small proportion of all properties.
Table \@ref(tab:msoaScenario1) suggests this will result in a `r t[, reduction_pc]` % reduction in Carbon Tax.
The scale of the x axis also suggests a few very large properties.
Figure \@ref(fig:carbonTaxMSOAPlotDepSecen1) 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](https://www.nomisweb.co.uk/census/2011/qs119ew). 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.
## Data summary
```{r, carbonTaxMSOAPlotDepSecen1, fig.cap="Carbon tax by deprivation under Scenario 1"}
We have identified some issues with a small number of the properties in the EPC dataset. These are not unexpected given that much of the estimates rely on partial or presumed data. Data entry errors are also quite likely. As a result we exclude:
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)
* any property where ENERGY_CONSUMPTION_CURRENT <= 0
* any property where TOTAL_FLOOR_AREA <= 5
* any property where CO2_EMISSIONS_CURRENT <= 0
```{r, finalData}
finalDT <- sotonUniqueEPCsDT[ENERGY_CONSUMPTION_CURRENT > 0 &
TOTAL_FLOOR_AREA > 5 &
CO2_EMISSIONS_CURRENT > 0]
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")
skimr::skim(finalDT)
#outlier <- t[sumEpcMWh > 70000]
```
This leaves us with a total of `r prettyNum(nrow(finalDT), big.mark = ",")` properties.
`
# Current estimated annual CO2 emmisions
We can now use the cleaned data to estimated the annual CO2 emissions at:
```{r, carbonTaxMSOAPlotDepChange, fig.cap="Carbon tax by deprivation under Scenario 1"}
* MSOA level for Southampton using
* BEIS observed data
* aggregated EPC data
* Dwelling level for Southampton using
* 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).
setkey(beisBaseline, MSOACode)
setkey(scen1, MSOACode)
plotDT <- beisBaseline[scen1]
plotDT[, delta := i.ctSum-ctSum]
## MSOA estimates
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")
Method:
outlier <- plotDT[delta < -40000]
outlier$MSOACode
```{r, setCarbonFactors, echo = TRUE}
elecCF <- 200 # CO2e/kWh https://www.icax.co.uk/Grid_Carbon_Factors.html
gasCF <- 215 # https://www.icax.co.uk/Carbon_Emissions_Calculator.html
```
BEIS: apply 2019 mean grid carbon intensity for:
* electricity: `r elecCF` g
* gas: `r gasCF` g CO2e/kWh
EPC: use estimated CO2 values - note based on 'old' electricity grid carbon intensity values ()
However if we analyse the total change by MSOA (\@ref(fig:carbonTaxMSOAPlotDepChange)) we see that one area (`r outlier$MSOACode`) shows a marked reduction. We have seen this area before - it has the [highest electricity demand](epcChecks.html#5_Check_BEIS_data) so no surprises there.
```{r, co2BEIS}
sotonMSOA_DT[, sumBEIS_tCO2 := (beisElecMWh/1000)*elecCF + (beisGasMWh/1000)*gasCF]
```
## But are we missing the point?
```{r, co2MSOAPlot, fig.cap="Energy demand comparison"}
ggplot2::ggplot(sotonMSOA_DT, aes(x = sumBEIS_tCO2,
y = sumEPC_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")
While the mean carbon tax might be £ `r round(mean(epcDT$carbonTax),2)` 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?
#outlier <- t[sumEpcMWh > 70000]
```
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 (£`r carbonTaxRate` per tonne/year).
\@ref(fig:energyMSOAPlot) shows that
```{r, epcCarbonBox, fig.cap= "Boxplot of dwelling level Carbon Tax by area deprivation level (% of households with 3 dimensions of deprivation)"}
epcDT <- data.table::fread(path.expand("~/data/EW_epc/domestic-E06000045-Southampton/EPCs_liveFinalClean.csv.gz"))
# Carbon Tax Scenarios
epcDT[, carbonTax := carbonTaxRate * CO2_EMISSIONS_CURRENT]
## No change to carbon intensity
# check
message("The sum should match the EPC aggregate above")
prettyNum(sum(epcDT$carbonTax), big.mark = ",")
* no emissions allowances (unlike the ETS and also [current UK government proposals](https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/828824/Carbon_Emissions_Tax_-_Technical_Note__1_.pdf))
* [Carbon tax rate of £16/T](https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/828824/Carbon_Emissions_Tax_-_Technical_Note__1_.pdf) (currently only proposed for [businesses](https://www.gov.uk/government/publications/changes-to-tax-provisions-for-carbon-emissions-tax/changes-to-tax-provisions-for-carbon-emissions-tax))
epcDT[, dep3_cuts := cut(dep3_pc, 5)]
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.
plotDT <- epcDT[epcIsUnknownTenure != 1 & TENURE != "unknown" &
carbonTax < 1000 &
!is.na(dep3_cuts)]
```{r, msoaScenario1}
sotonMSOA_DT[, ct_BEIS := sumBEIS_tCO2 * 16]
sotonMSOA_DT[, ct_EPCs := sumEPC_tCO2 * 16]
myCaption <- paste0("Exclusions: \n",
"EPCs with uknown tenure \n",
nrow(epcDT[carbonTax > 1000]), " EPCs where Carbon Tax > £1000")
t <- sotonMSOA_DT[, .(CarbonTaxBEIS_GBP = prettyNum(sum(ct_BEIS), big.mark = ","),
CarbonTaxEPCs_GBP = prettyNum(sum(ct_EPCs), big.mark = ",")),
keyby = .(LAName)]
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)
kableExtra::kable(t, caption = "Estimated Carbon tax liability for Southampton households/properties under Scenario 1") %>%
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()
```
As we would expect the values are relatively close due to the similar total emissions values estimated above.
Figure \@ref(fig:epcCarbonBox) 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.
If we look at the values by MSOA (\@ref(fig:carbonTaxMSOAPlot)), 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.
This is shown more clearly in Figure \@ref(fig:medianPlot) 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 £`r carbonTaxRate`per tCO2/year.
```{r, carbonTaxMSOAPlot, fig.cap="Energy demand comparison"}
ggplot2::ggplot(sotonMSOA_DT, aes(x = ct_BEIS/1000,
y = ct_EPCs/1000,
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 £k/year",
y = "BEIS 2018 derived total Carbon Tax £k/year",
caption = "x = y line included for clarity")
```{r, medianPlot, fig.cap="Median Carbon Tax by tenure and deprivation level"}
aggDT <- plotDT[, .(median = median(carbonTax),
p25 = quantile(carbonTax)[[2]],
p75 = quantile(carbonTax)[[4]]), keyby = .(TENURE, dep3_cuts)]
#outlier <- t[sumEpcMWh > 70000]
```
myCaption <- paste0(myCaption, "\nBars show 25% and 75% quantiles"
)
Perhaps of more interest however is the relationship between estimated Carbon Tax £ and levels of deprivation. Figure \@ref(fig:carbonTaxMSOAPlotDep) shows the estimated total Carbon Tax (in £k per year) per 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](https://www.nomisweb.co.uk/census/2011/qs119ew). As we can see the higher the proportion of households with no deprivation, the higher the total MSOA 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.
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)
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](https://twitter.com/dataknut/status/1312855327491133441/photo/1).
```{r, carbonTaxMSOAPlotDep, fig.cap="Energy demand comparison"}
t1 <- sotonMSOA_DT[, .(MSOACode, ctSum = ct_EPCs, dep0_pc)]
t1[, source := "BEIS 2018"]
t2 <- sotonMSOA_DT[, .(MSOACode, ctSum = ct_BEIS, dep0_pc)]
t2[, source := "EPC 2020"]
plotDT <- rbind(t1,t2)
```
ggplot2::ggplot(plotDT, aes(x = dep0_pc, y = ctSum, colour = source)) +
geom_point() +
geom_smooth() +
#theme(legend.position = "bottom") +
labs(x = "% with no deprivation dimensions \n(Census 2011)",
y = "Carbon Tax £k/year",
caption = "x = y line included for clarity")
#outlier <- t[sumEpcMWh > 70000]
```
# So what?
Several things are clear from these #backOfaFagPacket estimates:
## National Grid’s Future Energy Scenarios:
* 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 ~ £`r round(ct_perHH,2)` to ~ £`r round(mean(epcDT$carbonTax),2)` 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](https://serl.ac.uk/) 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](https://idioms.thefreedictionary.com/can+of+worms)...
* 2030 emissions level for electricity of 0.102 kgCO2/kWh
* gas unchanged
# R packages used
* rmarkdown [@rmarkdown]
......
---
params:
subtitle: ""
title: ""
authors: ""
title: '`r params$title`'
subtitle: '`r params$subtitle`'
author: '`r params$authors`'
date: 'Last run at: `r Sys.time()`'
output:
bookdown::html_document2:
self_contained: true
fig_caption: yes
code_folding: hide
number_sections: yes
toc: yes
toc_depth: 2
toc_float: TRUE
bookdown::pdf_document2:
fig_caption: yes
number_sections: yes
bookdown::word_document2:
fig_caption: yes
number_sections: yes
toc: yes
toc_depth: 2
fig_width: 5
bibliography: '`r path.expand("~/github/dataknut/refs/refs.bib")`'
always_allow_html: true
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(data.table)
library(ggplot2)
library(GGally)
library(kableExtra)
library(readxl)
library(stringr)
```
# Energy Performance Certificates (EPCs)
Apart from a few exempted buildings, a dwelling must have an EPC when constructed, sold or let. This means that over time we will have an EPC for an increasing number of properties and we should _already_ have EPCs for all rented properties.
EPCs are not necessarily up to date. For example if a property has not been sold or let since a major upgrade, the effects of that upgrade may not be visible in the data.
Further reading:
* https://epc.opendatacommunities.org/docs/guidance#technical_notes
* https://en.wikipedia.org/wiki/Energy_Performance_Certificate_(United_Kingdom)#Procedure
> check what feeds in automatically e.f. RHI installs etc
We have to assume the data we have is the _current state of play_ for these dwellings.
# Data loading
## EPCs
Load the data for the area of interest - in this case the City of Southampton.
```{r, loadSoton}
df <- path.expand("~/data/EW_epc/domestic-E06000045-Southampton/certificates.csv")
sotonEPCsDT <- data.table::fread(df)
```
The EPC data file has `r nrow(sotonEPCsDT)` records for Southampton and `r ncol(sotonEPCsDT)` variables. We're not interested in all of these, we want:
* PROPERTY_TYPE: Describes the type of property such as House, Flat, Maisonette etc. This is the type differentiator for dwellings;
* BUILT_FORM: The building type of the Property e.g. Detached, Semi-Detached, Terrace etc. Together with the Property Type, the Build Form produces a structured description of the property;
* ENVIRONMENT_IMPACT_CURRENT (**numeric**): A measure of the property's current impact on the environment in terms of carbon dioxide (CO₂) emissions. The higher the rating the lower the CO₂ emissions. *NB: Unclear how this is calculated*;
* ENERGY_CONSUMPTION_CURRENT (**kWh/m2**): Current estimated total energy consumption for the property in a 12 month period. Displayed on EPC as the current primary energy use per square metre of floor area. *NB: this covers heat and hot water (and lighting)*
* CO2_EMISSIONS_CURRENT (**tCO₂/year**): CO₂ emissions per year *NB: this is calculated from the modeled kWh energy input using (possibly) outdated carbon intensity values*;
* TENURE: Describes the tenure type of the property. One of: Owner-occupied; Rented (social); Rented (private).
We're also going to keep:
* WIND_TURBINE_COUNT (**n**): Number of wind turbines; 0 if none <- indicates 'non-grid' energy inputs;
* PHOTO_SUPPLY (**%**): Percentage of photovoltaic area as a percentage of total roof area. 0% indicates that a Photovoltaic Supply is not present in the property <- indicates 'non-grid' energy inputs;
* TOTAL_FLOOR_AREA (**m²**): The total useful floor area is the total of all enclosed spaces measured to the internal face of the external walls, i.e. the gross floor area as measured in accordance with the guidance issued from time to time by the Royal Institute of Chartered Surveyors or by a body replacing that institution. We need this to calculate total energy demand;
* POSTCODE - to allow linkage to other datasets
* LOCAL_AUTHORITY_LABEL - for checking
* INSPECTION_DATE - so we can select the most recent if there are duplicates
### Select most recent records
If an EPC has been updated or refreshed, the EPC dataset will hold multiple EPC records for that property (see Table \@ref(tab:tableAllRecords) for some examples). For the current purposes we only want the most recent record for each dwelling.
```{r, tableAllRecords}
uniqBRN_DT <- sotonEPCsDT[, .(nRecords = .N,
firstEPC = min(INSPECTION_DATE),
lastEPC = max(INSPECTION_DATE)), keyby = .(BUILDING_REFERENCE_NUMBER)]
kableExtra::kable(head(uniqBRN_DT[nRecords > 1]), cap = "Examples of multiple records") %>%
kable_styling()
```
We select the most recent within BUILDING_REFERENCE_NUMBER and then check that this matches the maximum (most recent) INSPECTION_DATE from the original dataset.
```{r, checkData}
# select just these vars
dt <- sotonEPCsDT[, .(BUILDING_REFERENCE_NUMBER, LMK_KEY, LODGEMENT_DATE,INSPECTION_DATE, PROPERTY_TYPE, BUILT_FORM,
ENVIRONMENT_IMPACT_CURRENT, ENERGY_CONSUMPTION_CURRENT, CO2_EMISSIONS_CURRENT, TENURE,
PHOTO_SUPPLY, WIND_TURBINE_COUNT, TOTAL_FLOOR_AREA,
POSTCODE, LOCAL_AUTHORITY_LABEL)]
# select most recent record within BUILDING_REFERENCE_NUMBER - how?
# better check this is doing so
setkey(dt,BUILDING_REFERENCE_NUMBER, INSPECTION_DATE) # sort by date within reference number
sotonUniqueEPCsDT <- unique(dt, by = "BUILDING_REFERENCE_NUMBER",
fromLast = TRUE) # takes the most recent as we have sorted by INSPECTION_DATE within BUILDING_REFERENCE_NUMBER using setkey
setkey(uniqBRN_DT, BUILDING_REFERENCE_NUMBER)
setkey(sotonUniqueEPCsDT, BUILDING_REFERENCE_NUMBER)
dt <- uniqBRN_DT[sotonUniqueEPCsDT]
dt[, diff := INSPECTION_DATE - lastEPC] # should be 0
message("Check difference between original max date and INSPECTION_DATE of selected record - should be 0")
summary(dt$diff)
nLatestEPCs <- uniqueN(sotonUniqueEPCsDT$BUILDING_REFERENCE_NUMBER)
```
This leaves us with `r prettyNum(nLatestEPCs, big.mark = ",")` EPCs. These are the most recent EPCs for the dwellings in the Southampton EPC dataset.
### Descriptives
Now check the distributions of the retained variables.
```{r, skimUniqueLatest}
skimr::skim(sotonUniqueEPCsDT)
```
As we would expect we have `r uniqueN(dt$BUILDING_REFERENCE_NUMBER)` unique property reference numbers. We can also see some strangeness. In some cases we seem to have:
* negative energy consumption;
* negative emissions;
* 0 floor area
This is not surprising since the kWh/y and tCO2/y values are estimated using a model but before we go any further we'd better check if these anomalies are significant in number.
## Postcode data
Load postcodes for Southampton (contains other geo-codes for linkage).
Source: https://geoportal.statistics.gov.uk/datasets/national-statistics-postcode-lookup-august-2020
```{r, loadPostcodes}
# Load the postcode based MSOA codes
soPostcodesDT <- data.table::fread(path.expand("~/data/UK_postcodes/NSPL_AUG_2020_UK/Data/multi_csv/NSPL_AUG_2020_UK_SO.csv"))
#soPostcodesDT <- soPostcodesDT[is.na(doterm)] # keep current
# keep all as some of the defunct ones will be in the EPC data (!)
sotonPostcodesDT <- soPostcodesDT[laua == "E06000045"] # keep Southampton City
sotonPostcodesReducedDT <- sotonPostcodesDT[, .(pcd, pcd2, pcds, laua, msoa11, lsoa11)]
message("Example data")
head(sotonPostcodesReducedDT)
```
## BEIS data
Load BEIS energy demand data.
Source: https://geoportal.statistics.gov.uk/datasets/national-statistics-postcode-lookup-august-2020
```{r, loadBEIS}
beisElecDT <- data.table::fread("~/data/beis/MSOA_DOM_ELEC_csv/MSOA_ELEC_2018.csv")
sotonElecDT <- beisElecDT[LAName %like% "Southampton", .(nElecMeters = METERS,
beisElecMWh = KWH/1000,
MSOACode, LAName)
]
beisGasDT <- data.table::fread("~/data/beis/MSOA_DOM_GAS_csv/MSOA_GAS_2018.csv")
sotonGasDT <- beisGasDT[LAName %like% "Southampton", .(nGasMeters = METERS,
beisGasMWh = KWH/1000,
MSOACode)]
setkey(sotonElecDT, MSOACode)
setkey(sotonGasDT, MSOACode)
sotonEnergyDT <- sotonGasDT[sotonElecDT]
sotonEnergyDT[, beisEnergyMWh := beisElecMWh + beisGasMWh]
#head(sotonEnergyDT)
message("Example data (retained variables)")
head(sotonEnergyDT)
```
## Census data
Load Census 2011 tenure data.
Source: https://www.nomisweb.co.uk/census/2011/ks402ew
```{r, loadCensus}
# census tenure ----
dt <- data.table::fread(path.expand("~/data/census2011/2011_MSOA_householdTenure_Soton.csv"))
dt[, census2011_socialRent := `Tenure: Social rented; measures: Value`]
dt[, census2011_privateRent := `Tenure: Private rented; measures: Value`]
dt[, census2011_ownerOccupy := `Tenure: Owned; measures: Value`]
dt[, census2011_other := `Tenure: Living rent free; measures: Value`]
dt[, MSOACode := `geography code`]
dt[, hhCheck := census2011_socialRent + census2011_privateRent + census2011_ownerOccupy + census2011_other]
dt[, nHHs_tenure := `Tenure: All households; measures: Value`]
dt[, socRent_pc := 100*(census2011_socialRent/nHHs_tenure)]
dt[, privRent_pc := 100*(census2011_privateRent/nHHs_tenure)]
dt[, ownerOcc_pc := 100*(census2011_ownerOccupy/nHHs_tenure)]
tenureDT <- dt[, .(MSOACode, nHHs_tenure, socRent_pc, privRent_pc, ownerOcc_pc)]
message("Example data (retained variables)")
head(tenureDT) # all tenure data
```
## Deprivation data
Load IMD data.
Source: https://www.nomisweb.co.uk/census/2011/qs119ew
```{r, loadDeprivation}
# add the deprivation data by MSOA
dt <- data.table::fread(path.expand("~/data/census2011/2011_MSOA_deprivation.csv"))
dt[, nHHs_deprivation := `Household Deprivation: All categories: Classification of household deprivation; measures: Value`]
dt[, MSOACode := `geography code`]
#sotonDep_DT[, .(nHouseholds = sum(totalHouseholds)), keyby = .(LAName)]
dt[, dep0_pc := 100*(`Household Deprivation: Household is not deprived in any dimension; measures: Value`/nHHs_deprivation)]
dt[, dep1_pc := 100*(`Household Deprivation: Household is deprived in 1 dimension; measures: Value`/nHHs_deprivation)]
dt[, dep2_pc := 100*(`Household Deprivation: Household is deprived in 2 dimensions; measures: Value`/nHHs_deprivation)]
dt[, dep3_pc := 100*(`Household Deprivation: Household is deprived in 3 dimensions; measures: Value`/nHHs_deprivation)]
dt[, dep4_pc := 100*(`Household Deprivation: Household is deprived in 4 dimensions; measures: Value`/nHHs_deprivation)]
deprivationDT <- dt[, .(MSOACode, nHHs_deprivation, dep0_pc, dep1_pc, dep2_pc, dep3_pc, dep4_pc)]
# sneak the LA name in there too
dt <- sotonEnergyDT[,.(MSOACode,LAName)]
setkey(dt, MSOACode)
setkey(deprivationDT, MSOACode)
sotonDeprivationDT <- deprivationDT[dt] # has the side effect of dropping non-Soton MSOAs
message("Example data (retained variables)")
head(sotonDeprivationDT)
# merge with census for future use
setkey(sotonDeprivationDT, MSOACode)
setkey(tenureDT, MSOACode)
sotonCensus2011_DT <- tenureDT[sotonDeprivationDT] # only Soton MSOAs
```
# Data checks
## EPC: Check ENERGY_CONSUMPTION_CURRENT
We recode the current energy consumption into categories for comparison with other low values and the presence of wind turbines/PV. We use -ve, 0 and 1 kWh as the thresholds of interest.
```{r, checkEnergy, fig.cap="Histogram of ENERGY_CONSUMPTION_CURRENT (reference line = 0)"}
ggplot2::ggplot(sotonUniqueEPCsDT, aes(x = ENERGY_CONSUMPTION_CURRENT)) +
geom_histogram(binwidth = 5) +
facet_wrap(~TENURE) +
geom_vline(xintercept = 0, alpha = 0.4)
underZero <- nrow(sotonUniqueEPCsDT[ENERGY_CONSUMPTION_CURRENT < 0])
t <- with(sotonUniqueEPCsDT[ENERGY_CONSUMPTION_CURRENT < 0],
table(BUILT_FORM,TENURE))
kableExtra::kable(t, caption = "Properties with ENERGY_CONSUMPTION_CURRENT < 0") %>%
kable_styling()
# do we think this is caused by solar/wind?
sotonUniqueEPCsDT[, hasWind := ifelse(WIND_TURBINE_COUNT > 0, "Yes", "No")]
#table(sotonUniqueEPCsDT$hasWind)
sotonUniqueEPCsDT[, hasPV := ifelse(PHOTO_SUPPLY >0, "Yes", "No")]
#table(sotonUniqueEPCsDT$hasPV)
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT < 0, "-ve kWh/y", NA)]
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT == 0, "0 kWh/y", consFlag)]
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT > 0 &
ENERGY_CONSUMPTION_CURRENT <= 1, "0-1 kWh/y", consFlag)]
sotonUniqueEPCsDT[, consFlag := ifelse(ENERGY_CONSUMPTION_CURRENT > 1, "1+ kWh/y", consFlag)]
t <- sotonUniqueEPCsDT[, .(nObs = .N), keyby = .(consFlag, hasWind, hasPV)]
kableExtra::kable(t, caption = "Properties in ENERGY_CONSUMPTION_CURRENT category by presence of microgeneration") %>%
kable_styling()
```
There are only `r underZero` dwellings where ENERGY_CONSUMPTION_CURRENT < 0 and none of them seem to have PV or a wind turbine so we can probably ignore them.
```{r, energyTenure, fig.cap="Comparing distributions of ENERGY_CONSUMPTION_CURRENT by tenure and built form (reference line = 0)"}
# repeat with a density plot to allow easy overlap
# exclude those with no data
ggplot2::ggplot(sotonUniqueEPCsDT[TENURE != "NO DATA!" &
TENURE != "unknown" &
TENURE != ""], aes(x = ENERGY_CONSUMPTION_CURRENT,
fill = TENURE, alpha = 0.2)) +
geom_density() +
facet_wrap(~BUILT_FORM) +
guides(alpha = FALSE) +
geom_vline(xintercept = 0, alpha = 0.4) +
theme(legend.position = "bottom")
```
> Recommendation: We should exclude any property where ENERGY_CONSUMPTION_CURRENT <= 0
## EPC: Check CO2_EMISSIONS_CURRENT
Next we do the same for current emissions. Repeat the coding for total floor area using 0 and 1 TCO2/y as the threshold of interest.
```{r, checkEmissions, fig.cap="Histogram of CO2_EMISSIONS_CURRENT"}
ggplot2::ggplot(sotonUniqueEPCsDT, aes(x = CO2_EMISSIONS_CURRENT)) +
geom_histogram(binwidth = 1)
nZeroEmissions <- nrow(sotonUniqueEPCsDT[CO2_EMISSIONS_CURRENT < 0])
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT < 0, "-ve CO2/y", NA)]
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT == 0, "0 CO2/y", emissionsFlag)]
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT > 0 &
CO2_EMISSIONS_CURRENT <= 1, "0-1 TCO2/y", emissionsFlag)]
sotonUniqueEPCsDT[, emissionsFlag := ifelse(CO2_EMISSIONS_CURRENT > 1, "1+ TCO2/y", emissionsFlag)]
t <- sotonUniqueEPCsDT[, .(nObs = .N), keyby = .(emissionsFlag, hasWind, hasPV)]
kableExtra::kable(t, caption = "Properties with CO2_EMISSIONS_CURRENT < 0 by presence of microgeneration") %>%
kable_styling()
kableExtra::kable(round(100*(prop.table(table(sotonUniqueEPCsDT$emissionsFlag,
sotonUniqueEPCsDT$consFlag,
useNA = "always")
)
)
,2)
, caption = "% properties in CO2_EMISSIONS_CURRENT categories by ENERGY_CONSUMPTION_CURRENT categories") %>%
kable_styling()
```
There are `r nZeroEmissions` properties with 0 or negative emissions. It looks like they are also the properties with -ve kWh as we might expect. So we can safely ignore them.
> Recommendation: we should exclude any property where CO2_EMISSIONS_CURRENT <= 0
## EPC: Check ENVIRONMENT_IMPACT_CURRENT
`Environmental impact` is some sort of numerical scale that unlikely to be normally distributed.
```{r, checkImpact, fig.cap="Histogram of ENVIRONMENT_IMPACT_CURRENT"}
ggplot2::ggplot(sotonEPCsDT, aes(x = ENVIRONMENT_IMPACT_CURRENT)) +
geom_histogram()
```
`Environmental impact` should decrease as emissions increase...
```{r, checkEmissionsImpact, fig.cap="Plot of ENVIRONMENT_IMPACT_CURRENT vs CO2_EMISSIONS_CURRENT"}
ggplot2::ggplot(sotonEPCsDT, aes(x = CO2_EMISSIONS_CURRENT,
y = ENVIRONMENT_IMPACT_CURRENT,
colour = TENURE)) +
geom_point() +
facet_wrap(TENURE~.) +
theme(legend.position = "bottom")
```
It does but what is the relationship between ENVIRONMENT_IMPACT_CURRENT and CO2_EMISSIONS_CURRENT? It is not linear... (Figure \@ref(fig:checkEmissionsImpact)) and there are some interesting outliers.
## EPC: Check TOTAL_FLOOR_AREA
Repeat the coding for total floor area using 5 m2 as the threshold of interest.
```{r, checkFloorArea, fig.cap="Histogram of TOTAL_FLOOR_AREA"}
ggplot2::ggplot(sotonUniqueEPCsDT, aes(x = TOTAL_FLOOR_AREA)) +
geom_histogram(binwidth = 1)
nZeroFloorArea <- nrow(sotonUniqueEPCsDT[TOTAL_FLOOR_AREA < 0])
sotonUniqueEPCsDT[, floorFlag := ifelse(TOTAL_FLOOR_AREA == 0, "0 m2", NA)]
sotonUniqueEPCsDT[, floorFlag := ifelse(TOTAL_FLOOR_AREA > 0 &
TOTAL_FLOOR_AREA <= 5, "0-5 m2", floorFlag)]
sotonUniqueEPCsDT[, floorFlag := ifelse(TOTAL_FLOOR_AREA > 5, "5+ m2", floorFlag)]
t <- with(sotonUniqueEPCsDT, table(floorFlag, consFlag))
kableExtra::kable(round(100*prop.table(t),3), caption = "% properties with TOTAL_FLOOR_AREA category by ENERGY_CONSUMPTION_CURRENT category") %>%
kable_styling()
kableExtra::kable(head(sotonUniqueEPCsDT[, .(BUILDING_REFERENCE_NUMBER, PROPERTY_TYPE, TOTAL_FLOOR_AREA,
ENERGY_CONSUMPTION_CURRENT)][order(-TOTAL_FLOOR_AREA)], 10),
caption = "Top 10 by floor area (largest)") %>%
kable_styling()
kableExtra::kable(head(sotonUniqueEPCsDT[, .(BUILDING_REFERENCE_NUMBER, PROPERTY_TYPE, TOTAL_FLOOR_AREA,
ENERGY_CONSUMPTION_CURRENT)][order(TOTAL_FLOOR_AREA)], 10),
caption = "Bottom 10 by floor area (smallest)") %>%
kable_styling()
kableExtra::kable(round(100*prop.table(t),3), caption = "% properties with TOTAL_FLOOR_AREA category by ENERGY_CONSUMPTION_CURRENT category") %>%
kable_styling()
```
Table \@ref(tab:checkFloorArea) shows that the properties with floor area of < 5m2 are not necessarily the ones with 0 or negative kWh values. Nevertheless they represent a small proportion of all properties.
The scale of the x axis in Figure \@ref(fig:checkFloorArea) also suggests a few very large properties.
> Recommendation: We should exclude any property where TOTAL_FLOOR_AREA <= 5
## EPC: Check 'missing' EPC rates
We know that we do not have EPC records for every dwelling. But how many are we missing? We will check this at MSOA level as it allows us to link to other MSOA level datasets that tell us how many households, dwellings or energy meters to expect. Arguably it would be better to do this at LSOA level but...
First we'll use the BEIS 2018 MSOA level annual electricity data to estimate the number of meters (not properties) - some addresses can have 2 meters (e.g. standard & economy 7). However this is more useful than the number of gas meters since not all dwellings have mains gas but all (should?) have an electricity meter.
```{r, checkBEISmeters}
message("Number of electricity & gas meters")
sotonEnergyDT[, .(nElecMeters = sum(nElecMeters),
nGasMeters = sum(nGasMeters)), keyby = .(LAName)]
```
Next we'll check for the number of households reported by the 2011 Census.
> would be better to use the Census dwellings counts but this gives us tenure which is useful
```{r, checkCensus}
#censusDT <- data.table::fread(path.expand("~/data/"))
t <- sotonCensus2011_DT[, .(nHouseholds = sum(nHHs_deprivation)), keyby = .(LAName)]
kableExtra::kable(t, caption = "Census derived household counts") %>%
kable_styling()
```
That's lower than the number of electricity meters (as expected) but note that as it is a count of households rather than dwellings, it doesn't allow for dwellings that were empty on census night.
```{r, checkPostcodes}
# Postcodes don't help - no count of addresses in the data (there used to be??)
# but we can use it to check which Soton postcodes are missing from the EPC file
sotonPostcodesReducedDT[, c("pc_chunk1","pc_chunk2" ) := tstrsplit(pcds,
split = " "
)
]
```
We should not have single digit postcodes in the postcode data - i.e. S01 should not be there (since 1993). Southampton City is unusual in only having [double digit postcodes](https://en.wikipedia.org/wiki/SO_postcode_area).
```{r, aggregateEPCsToPostcodes}
# EPC
# set up counters
# use final cleaned EPC data
sotonUniqueEPCsDT[, epcIsSocialRent := ifelse(TENURE == "rental (social)", 1, 0)]
sotonUniqueEPCsDT[, epcIsPrivateRent := ifelse(TENURE == "rental (private)", 1, 0)]
sotonUniqueEPCsDT[, epcIsOwnerOcc := ifelse(TENURE == "owner-occupied", 1, 0)]
sotonUniqueEPCsDT[, epcIsUnknownTenure := ifelse(TENURE == "NO DATA!" |
TENURE == "" , 1, 0)]
# aggregate EPCs to postcodes
sotonEpcPostcodes_DT <- sotonUniqueEPCsDT[, .(nEPCs = .N,
sumEPC_tCO2 = sum(CO2_EMISSIONS_CURRENT, na.rm = TRUE),
n_epcIsSocialRent = sum(epcIsSocialRent, na.rm = TRUE),
n_epcIsPrivateRent = sum(epcIsPrivateRent, na.rm = TRUE),
n_epcIsOwnerOcc = sum(epcIsOwnerOcc, na.rm = TRUE),
n_epcIsUnknownTenure = sum(epcIsUnknownTenure, na.rm = TRUE),
sumEpcMWh = sum(ENERGY_CONSUMPTION_CURRENT* TOTAL_FLOOR_AREA)/1000), # crucial as ENERGY_CONSUMPTION_CURRENT = kWh/m2
keyby = .(POSTCODE, LOCAL_AUTHORITY_LABEL)]
sotonEpcPostcodes_DT[, c("pc_chunk1","pc_chunk2" ) := tstrsplit(POSTCODE,
split = " "
)
]
# check original EPC data for Soton - which postcodes are covered?
sotonEPCsDT[, c("pc_chunk1","pc_chunk2" ) := tstrsplit(POSTCODE,
split = " "
)
]
t <- sotonEPCsDT[, .(nEPCs = .N), keyby = .(postcode_sector = pc_chunk1)]
kableExtra::kable(t, caption = "Count of most recent EPCs per postcode sector for Southampton") %>%
kable_styling()
```
It looks like we have EPCs for each postcode sector and we only have double digit postcodes which is good.
```{r, matchPostcodesToEPCPostcodes}
# match the EPC postcode summaries to the postcode extract
sotonPostcodesReducedDT[, POSTCODE_s := stringr::str_remove(pcds, " ")]
setkey(sotonPostcodesReducedDT, POSTCODE_s)
sotonPostcodesReducedDT[, MSOACode := msoa11]
message("Number of postcodes: ",uniqueN(sotonPostcodesReducedDT$POSTCODE_s))
sotonEpcPostcodes_DT[, POSTCODE_s := stringr::str_remove(POSTCODE, " ")]
setkey(sotonEpcPostcodes_DT, POSTCODE_s)
message("Number of postcodes with EPCs: ",uniqueN(sotonEpcPostcodes_DT$POSTCODE_s))
dt <- sotonEpcPostcodes_DT[sotonPostcodesReducedDT]
# aggregate to MSOA - watch for NAs where no EPCs in a given postcode
sotonEpcMSOA_DT <- dt[, .(nEPCs = sum(nEPCs, na.rm = TRUE),
sumEPC_tCO2 = sum(sumEPC_tCO2, na.rm = TRUE),
n_epcIsSocialRent = sum(n_epcIsSocialRent, na.rm = TRUE),
n_epcIsPrivateRent = sum(n_epcIsPrivateRent, na.rm = TRUE),
n_epcIsOwnerOcc = sum(n_epcIsOwnerOcc, na.rm = TRUE),
n_epcIsUnknownTenure = sum(n_epcIsUnknownTenure, na.rm = TRUE),
sumEpcMWh = sum(sumEpcMWh, na.rm = TRUE)
),
keyby = .(MSOACode) # change name on the fly for easier matching
]
#summary(sotonEpcMSOA_DT)
```
So we have some postcodes with no EPCs.
Join the estimates together at MSOA level for comparison. There are `r uniqueN(sotonElecDT$MSOACode)` MSOAs in Southampton.
```{r, joinMSOA}
# 32 LSOAs in Soton
# add census & deprivation to energy
setkey(sotonEnergyDT, MSOACode)
setkey(sotonCensus2011_DT, MSOACode)
setkey(sotonEpcMSOA_DT, MSOACode)
sotonMSOA_DT <- sotonCensus2011_DT[sotonEnergyDT]
#names(sotonMSOA_DT)
sotonMSOA_DT <- sotonEpcMSOA_DT[sotonMSOA_DT]
#names(sotonMSOA_DT)
# add MSOA names from the postcode LUT
msoaNamesDT <- data.table::as.data.table(readxl::read_xlsx(path.expand("~/data/UK_postcodes/NSPL_AUG_2020_UK/Documents/MSOA (2011) names and codes UK as at 12_12.xlsx")))
msoaNamesDT[, MSOACode := MSOA11CD]
msoaNamesDT[, MSOAName := MSOA11NM]
setkey(msoaNamesDT, MSOACode)
sotonMSOA_DT <- msoaNamesDT[sotonMSOA_DT]
#names(sotonMSOA_DT)
```
Table\@ref(tab:compareEpcEstimates) compares all three sources of counts. Clearly we have fewer EPCs in 2020 than both households in 2011 and electricity meters in 2018.
```{r, compareEpcEstimates}
t <- sotonMSOA_DT[, .(nHouseholds_2011 = sum(nHHs_tenure),
nElecMeters_2018 = sum(nElecMeters),
nEPCs_2020 = sum(nEPCs),
total_MWh_BEIS_2018 = sum(beisEnergyMWh),
total_kWh_EPCs_2020 = sum(sumEpcMWh)), keyby = .(LAName)]
kableExtra::kable(t, caption = "Comparison of different estimates of the number of dwellings and total energy use") %>%
kable_styling()
nHouseholds_2011f <- sum(sotonMSOA_DT$nHHs_tenure)
nElecMeters_2018f <- sum(sotonMSOA_DT$nElecMeters)
nEPCs_2020f <- sum(sotonMSOA_DT$nEPCs)
makePC <- function(x,y,r){
# make a percent of x/y and round it to r decimal places
pc <- round(100*(x/y),r)
return(pc)
}
```
The number of EPCs we have is:
* `r makePC(nEPCs_2020f,nHouseholds_2011f,1)`% of Census 2011 households
* `r makePC(nEPCs_2020f,nElecMeters_2018f,1)`% of the recorded 2018 electricity meters
We can also see that despite having 'missing' EPCs, the estimated total EPC-derived energy demand is marginally higher than the BEIS-derived weather corrected energy demand data. Given that the BEIS data accounts for all heating, cooking, hot water, lighting and appliance use we would expect the EPC data to be lower _even if no EPCs were missing..._
### Missing rates by MSOA
Figure \@ref(fig:pairsPlot) suggests that rates vary considerably by MSOA but are relatively consistent across the two baseline 'truth' estimates with the exception of `r outlierMSOA$MSOACode` which appears to have many more EPCs than Census 2011 households. It is worth noting that [this MSOA](https://www.localhealth.org.uk/#c=report&chapter=c01&report=r01&selgeo1=msoa_2011.E02003577&selgeo2=eng.E92000001) covers the city centre and dock areas which have had substantial new build since 2011 and so may have households inhabiting dwellings that did not exist at Census 2011. This is also supported by the considerably higher EPC derived energy demand data compared to BEIS's 2018 data - although it suggests the dwellings are either very new (since 2018) or are yet to be occupied.
```{r, pairsPlot, fig.cap = "Pairs plot of estimates of meters, households and EPCs by MSOA"}
ggpairs(sotonMSOA_DT[, .(nHHs_tenure, nElecMeters, nEPCs)])
```
Figure \@ref(fig:missingEPCbyMSOA) (see Table \@ref(tab:bigMSOATable) below for details) extends this analysis to show the % missing compared to the relevant baseline coloured by the % of owner-occupied dwellings in the MSOA according to Census 2011. As we would expect given the EPC inspection process, those MSOAs with the lowest EPC coverage on both baseline measures tend to have higher proportions of owner occupiers and therefore are likely to have more dwellings that have never required an EPC inspection.
```{r, missingEPCbyMSOA, fig.cap="% 'missing' rates comparison"}
t <- sotonMSOA_DT[, .(MSOAName, MSOACode, nHHs_tenure,nElecMeters,nEPCs,
dep0_pc, socRent_pc, privRent_pc, ownerOcc_pc,sumEpcMWh, beisEnergyMWh )]
t[, pc_missingHH := makePC(nEPCs,nHHs_tenure,1)]
t[, pc_missingMeters := makePC(nEPCs,nElecMeters,1)]
t[, pc_energyBEIS := makePC(sumEpcMWh,beisEnergyMWh,1)]
kt1 <- t
ggplot2::ggplot(t, aes(x = pc_missingHH,
y = pc_missingMeters,
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 = "EPCs 2020 as % of Census 2011 households",
y = "EPCs 2020 as % of electricity meters 2018",
caption = "x = y line included for clarity")
outlierMSOA <- t[pc_missingHH > 100]
```
We can use the same approach to compare estimates of total energy demand at the MSOA level. To do this we compare:
* estimated total energy demand in MWh/year derived from the EPC estimates. This energy only relates to `current primary energy` (space heating, hot water and lighting) and of course also suffers from missing EPCs (see above)
* observed electricity and gas demand collated by BEIS for their sub-national statistical series. This applies to all domestic energy demand but the most recent data is for 2018 so will suffer from the absence of dwellings that are present in the most recent EPC data (see above).
We should not expect the values to match but we might reasonably expect a correlation.
```{r, energyMSOAPlot, fig.cap="Energy demand comparison"}
ggplot2::ggplot(t, aes(x = sumEpcMWh,
y = beisEnergyMWh,
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 MWh/year",
y = "BEIS 2018 derived total MWh/year",
caption = "x = y line included for clarity")
outlier <- t[sumEpcMWh > 70000]
```
Figure \@ref(fig:energyMSOAPlot) shows that both of these are true. MSOAs with a high proportion of owner occupiers (and therefore more likely to have missing EPCs) tend to have higher observed energy demand than the EOC data suggests - they are above the reference line. MSOAs with a lower proportion of owner occupiers (and therefore more likely to have more complete EPC coverage) tend to be on or below the line. As before we have the same notable outlier (`r outlier$MSOACode`) and for the same reasons... In this case this produces a much higher energy demand estimate than the BEIS 2018 data records.
## BEIS: Check data
While we're here we'll also check the BEIS data. Table \@ref(tab:beisDesc) shows the five highest and lowest MSOAs by annual electricity use.
```{r, beisDesc}
t1 <- head(sotonMSOA_DT[, .(MSOA11NM, MSOA11CD, beisElecMWh, nElecMeters,
beisGasMWh, nGasMeters)][order(-beisElecMWh)],5)
kableExtra::kable(t1, caption = "Southampton MSOAs: BEIS 2018 energy data ordered by highest electricity (top 5)") %>%
kable_styling()
t2 <- tail(sotonMSOA_DT[, .(MSOA11NM, MSOA11CD, beisElecMWh, nElecMeters,
beisGasMWh, nGasMeters)][order(-beisElecMWh)],5)
kableExtra::kable(t2, caption = "Southampton MSOAs: BEIS 2018 energy data ordered by lowest electricity (bottom 5)") %>%
kable_styling()
```
# Summarise and save EPC data for re-use
We have identified some issues with a small number of the properties in the EPC dataset. These are not unexpected given that much of the estimates rely on partial or presumed data. Data entry errors are also quite likely. As a result we exclude:
* any property where ENERGY_CONSUMPTION_CURRENT <= 0
* any property where TOTAL_FLOOR_AREA <= 5
* any property where CO2_EMISSIONS_CURRENT <= 0
```{r, finalData}
finalEPCDT <- sotonUniqueEPCsDT[ENERGY_CONSUMPTION_CURRENT > 0 &
TOTAL_FLOOR_AREA > 5 &
CO2_EMISSIONS_CURRENT > 0]
skimr::skim(finalEPCDT)
```
This leaves us with a total of `r prettyNum(nrow(finalEPCDT), big.mark = ",")` properties.
```{r, saveFinalData}
finalEPCDT[, POSTCODE_s := stringr::str_remove_all(POSTCODE, " ")]
sotonPostcodesReducedDT[, POSTCODE_s := stringr::str_remove_all(pcds, " ")]
setkey(finalEPCDT, POSTCODE_s)
setkey(sotonPostcodesReducedDT, POSTCODE_s)
dt <- sotonPostcodesReducedDT[finalEPCDT]
dt[, MSOACode := msoa11]
setkey(dt, MSOACode)
setkey(sotonCensus2011_DT, MSOACode)
dt <- sotonCensus2011_DT[dt]
of <- path.expand("~/data/EW_epc/domestic-E06000045-Southampton/EPCs_liveFinalClean.csv")
data.table::fwrite(dt, file = of)
message("Gziping ", of)
# Gzip it
# in case it fails (it will on windows - you will be left with a .csv file)
try(system( paste0("gzip -f '", of,"'"))) # include ' or it breaks on spaces
message("Gzipped ", of)
```
NB: this failed to match an EPC postcode to an MSOA for `r nrow(dt[is.na(MSOACode)])` EPCs The table below shows which postcodes these were by date.
```{r, nonMatches}
dt[is.na(MSOACode), .(nEPCs = .N), keyby = .(POSTCODE_s, TENURE, INSPECTION_DATE)]
```
# Summarise and save MSOA aggregates for re-use
Finally we save the MSOA table into the repo data directory for future use. We don't usually advocate keeping data in a git repo but this is small, aggregated and [mostly harmless](https://en.wikipedia.org/wiki/Mostly_Harmless).
```{r, saveMSOA}
of <- here::here("data", "sotonMSOAdata.csv")
data.table::fwrite(sotonMSOA_DT, of)
message("Saved ", nrow(sotonMSOA_DT), " rows of data.")
```
# R packages used
* rmarkdown [@rmarkdown]
* bookdown [@bookdown]
* knitr [@knitr]
* data.table [@data.table]
* ggplot2 [@ggplot2]
* kableExtra [@kableExtra]
* readxl [@readxl]
# Annex
## Tables
```{r, bigMSOATable}
kableExtra::kable(kt1[order(-pc_missingHH)], digits = 2, caption = "EPC records as a % of n census households and n meters per MSOA") %>%
kable_styling()
```
# References
......@@ -7,19 +7,26 @@ makeReport <- function(f){
output_file = paste0(here::here("docs/"), f, ".html")
)
# word
rmarkdown::render(input = paste0(here::here("EPCsAndCarbon", f), ".Rmd"),
params = list(title = title,
subtitle = subtitle,
authors = authors),
output_file = paste0(here::here("docs/"), f, ".docx"),
output_format = "word_document"
)
# rmarkdown::render(input = paste0(here::here("EPCsAndCarbon", f), ".Rmd"),
# params = list(title = title,
# subtitle = subtitle,
# authors = authors),
# output_file = paste0(here::here("docs/"), f, ".docx"),
# output_format = "word_document"
# )
}
# >> run report ----
# >> run EPC data check & save data ----
rmdFile <- "epcChecks" # not the full path
title = "Checking EPC datasets for Southampton"
subtitle = "Data cleaning, outlier checks and coverage analysis"
authors = "Ben Anderson"
makeReport(rmdFile)
# >> run the report ----
rmdFile <- "carbonCosts" # not the full path
title = "What can EPC data tell us about the domestic cost of carbon?"
subtitle = ""
title = "Exploring #backOfaFagPacket scenarios for a residential dwellings Carbon Tax"
subtitle = "Southampton as a case study"
authors = "Ben Anderson"
makeReport(rmdFile)
\ No newline at end of file
makeReport(rmdFile)
# useful functions
# use source(here::here("R", "functions.R")) to load
require(flextable) # use require so it fails if not present & can't install
makeFlexTable <- function(df, cap = "caption"){
# makes a pretty flextable - see https://cran.r-project.org/web/packages/flextable/index.html
ft <- flextable::flextable(df)
ft <- flextable::colformat_double(ft, digits = 1)
ft <- flextable::fontsize(ft, size = 9)
ft <- flextable::fontsize(ft, size = 10, part = "header")
ft <- flextable::set_caption(ft, caption = cap)
return(flextable::autofit(ft))
}
\ No newline at end of file
# fridayFagPackets
A repo for our fridayFagPacket data notes (numbers that could have been done on the back of one and should probably come with a similar health warning).
A repo for our [fridayFagPacket](https://dataknut.github.io/fridayFagPackets/) data notes (numbers that could have been done on the back of one and should probably come with a similar health warning).
> git.soton does not support pages so for best viewing try [github](https://dataknut.github.io/fridayFagPackets/).
The repo is auto-mirrored from https://git.soton.ac.uk/SERG/fridayFagPackets (where we do the work) to https://github.com/dataknut/fridayFagPackets
* docs - where we keep outputs
* docs - where we (usually) keep outputs - these are published on:
* github [pages](https://dataknut.github.io/fridayFagPackets/)
* and some of them are also at [energy.soton](https://energy.soton.ac.uk/friday-fag-packets/) in a more refined form :-)
* data - where we keep (public) data we used
* R - where we keep useful R code for use across the repo
\ No newline at end of file
* R - where we keep useful R code for use across the repo
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
MSOA11CD,MSOA11NM,MSOACode,MSOAName,nEPCs,sumEPC_tCO2,n_epcIsSocialRent,n_epcIsPrivateRent,n_epcIsOwnerOcc,n_epcIsUnknownTenure,sumEpcMWh,nHHs_tenure,socRent_pc,privRent_pc,ownerOcc_pc,nHHs_deprivation,dep0_pc,dep1_pc,dep2_pc,dep3_pc,dep4_pc,LAName,nGasMeters,beisGasMWh,nElecMeters,beisElecMWh,i.LAName,beisEnergyMWh
E02003549,Southampton 001,E02003549,Southampton 001,1737,7361.5,156,502,966,49,41619.533339,2849,11.2320112320112,25.0614250614251,62.0568620568621,2849,52.3692523692524,32.8887328887329,12.2499122499123,2.31660231660232,0.175500175500176,Southampton,2557,38480.92752,2832,11196.00524,Southampton,49676.93276
E02003550,Southampton 002,E02003550,Southampton 002,1932,6448.3,434,288,1093,79,36605.553489,3216,21.0509950248756,11.0385572139303,66.0758706467662,3216,43.0970149253731,32.9291044776119,18.1902985074627,5.25497512437811,0.528606965174129,Southampton,2876,28049.7336,3527,13074.44004,Southampton,41124.17364
E02003551,Southampton 003,E02003551,Southampton 003,1456,4749.4,587,274,512,47,27395.685632,2256,38.9627659574468,15.2925531914894,42.9521276595745,2256,33.6879432624114,33.9982269503546,23.0053191489362,8.28900709219858,1.01950354609929,Southampton,1649,17358.86876,2446,8957.742376,Southampton,26316.611136
E02003552,Southampton 004,E02003552,Southampton 004,1653,5254.3,771,182,644,4,30104.336464,2646,47.4678760393046,9.25925925925926,40.9674981103553,2646,28.1179138321996,32.010582010582,29.2894935752079,9.90173847316705,0.680272108843537,Southampton,2009,17667.11557,2809,10383.88947,Southampton,28051.00504
E02003553,Southampton 005,E02003553,Southampton 005,1687,5658,290,820,483,41,31991.627421,2394,25.4385964912281,40.2673350041771,31.9966583124478,2394,39.0142021720969,32.9573934837093,19.8830409356725,6.97577276524645,1.16959064327485,Southampton,2303,24996.91283,2464,8479.992667,Southampton,33476.905497
E02003554,Southampton 006,E02003554,Southampton 006,1684,6260.8,249,455,893,43,35570.197615,2646,14.5502645502646,21.0506424792139,63.0007558578987,2646,46.4852607709751,32.3885109599395,17.2713529856387,3.51473922902494,0.340136054421769,Southampton,2378,29664.70715,2873,10048.0605,Southampton,39712.76765
E02003555,Southampton 007,E02003555,Southampton 007,2261,6179.1,540,244,1085,130,35181.898286,3140,30.9554140127389,11.1464968152866,56.1464968152866,3140,34.5859872611465,33.9171974522293,23.6624203821656,7.26114649681529,0.573248407643312,Southampton,2989,27670.86288,3763,12745.97142,Southampton,40416.8343
E02003556,Southampton 008,E02003556,Southampton 008,1339,4978.1,194,283,776,5,28093.9338712,2471,12.5050586806961,16.1473087818697,70.4168352893565,2471,42.5738567381627,34.5204370700121,17.5637393767705,4.49210845811412,0.84985835694051,Southampton,2295,26412.36043,2589,9199.673127,Southampton,35612.033557
E02003557,Southampton 009,E02003557,Southampton 009,2137,8330.9,122,979,920,10,47067.974377,2753,7.37377406465674,38.9756629131856,52.4881946966945,2753,50.7809662186705,33.0185252451871,13.4398837631675,2.57900472212132,0.181620050853614,Southampton,2354,32057.76788,3103,10784.46184,Southampton,42842.22972
E02003558,Southampton 010,E02003558,Southampton 010,2223,6686.5,641,612,756,91,38565.5508412,2924,32.3187414500684,25.8207934336525,39.8084815321477,2924,33.9603283173735,34.5075239398085,23.6320109439124,7.11354309165527,0.786593707250342,Southampton,2294,23530.15475,3222,10891.83831,Southampton,34421.99306
E02003559,Southampton 011,E02003559,Southampton 011,1678,7519.8,97,350,1176,13,42376.725845,3065,5.97063621533442,15.1386623164763,76.7047308319739,3065,53.3768352365416,30.3425774877651,13.768352365416,2.25122349102773,0.261011419249592,Southampton,2896,44023.67581,3165,11232.52733,Southampton,55256.20314
E02003560,Southampton 012,E02003560,Southampton 012,1952,5936.8,1046,168,670,43,33862.758635,3040,53.5197368421053,8.75,36.1184210526316,3040,26.9736842105263,34.4407894736842,27.796052631579,9.83552631578947,0.953947368421053,Southampton,2739,23190.35064,3191,11062.59208,Southampton,34252.94272
E02003561,Southampton 013,E02003561,Southampton 013,2663,8648.9,366,1207,888,58,49231.805891,3181,19.6793461175731,44.7343602640679,33.9830242062245,3181,39.7988054071047,32.945614586608,19.993712668972,6.13014775227916,1.13171958503615,Southampton,2473,26452.24976,3489,11978.59833,Southampton,38430.84809
E02003562,Southampton 014,E02003562,Southampton 014,2513,8291.7,208,787,1353,98,47128.063564,3636,9.13091309130913,29.2354235423542,59.1859185918592,3636,45.6820682068207,33.5808580858086,15.8690869086909,4.26292629262926,0.605060506050605,Southampton,2983,36532.47894,3921,14757.18363,Southampton,51289.66257
E02003563,Southampton 015,E02003563,Southampton 015,2553,8109.2,640,607,1082,163,46524.5676513,3483,21.7915590008613,24.1745621590583,51.7944300890037,3483,37.8122308354867,33.4194659776055,22.0499569336779,6.00057421762848,0.717772035601493,Southampton,2648,27516.54456,3818,12404.30615,Southampton,39920.85071
E02003564,Southampton 016,E02003564,Southampton 016,2164,7628.6,521,300,1154,81,43679.630169,3474,22.5388601036269,12.0898100172712,63.3851468048359,3474,39.3782383419689,33.9666090961428,20.1496833621186,5.4691997697179,1.03626943005181,Southampton,2777,30545.17042,3563,13173.31465,Southampton,43718.48507
E02003565,Southampton 017,E02003565,Southampton 017,2427,7507.80000000001,180,1291,553,277,42637.781023,2563,11.6269996098322,57.2376121732345,28.950448692938,2563,48.8099882949668,31.4865392118611,14.3191572376122,4.52594615684745,0.858369098712446,Southampton,2241,25810.92458,2840,9380.707441,Southampton,35191.632021
E02003566,Southampton 018,E02003566,Southampton 018,1617,4850.4,470,170,755,8,27441.646901,2607,29.8427311085539,8.36210203298811,59.4169543536632,2607,35.2128883774453,33.8319907940161,24.741081703107,5.90717299578059,0.30686612965094,Southampton,2607,26826.21743,2831,9221.544436,Southampton,36047.761866
E02003567,Southampton 019,E02003567,Southampton 019,1780,5939.5,464,277,978,41,33255.3013728,2991,27.2818455366098,14.1089936476095,56.8037445670344,2991,39.1842193246406,32.7983951855567,20.193915078569,7.28853226345704,0.534938147776663,Southampton,3036,32188.32713,3200,11259.88083,Southampton,43448.20796
E02003568,Southampton 020,E02003568,Southampton 020,2959,9363.80000000001,120,1451,1203,51,53468.7626998,3820,4.52879581151833,50.9162303664922,42.9319371727749,3820,50.0785340314136,32.4083769633508,13.4816753926702,3.19371727748691,0.837696335078534,Southampton,2757,33366.33693,3900,13657.7525,Southampton,47024.08943
E02003569,Southampton 021,E02003569,Southampton 021,2754,8298.1,334,1073,1062,71,47718.629898,3527,14.9985823646158,38.2761553728381,44.3152821094415,3527,40.7144882336263,32.7190246668557,19.960306209243,5.92571590586901,0.680464984406011,Southampton,2722,27661.45348,3999,13719.21685,Southampton,41380.67033
E02003570,Southampton 022,E02003570,Southampton 022,3429,10185.1,828,1320,775,165,58338.870496,3635,29.8211829436039,45.6946354883081,22.585969738652,3635,25.5570839064649,35.3507565337001,26.0247592847318,11.4167812929849,1.65061898211829,Southampton,3083,34730.59843,4142,14719.37189,Southampton,49449.97032
E02003571,Southampton 023,E02003571,Southampton 023,2958,8206.1,368,1396,725,258,47820.533587,3040,20.2302631578947,56.9736842105263,21.4802631578947,3040,47.9605263157895,31.4473684210526,14.8355263157895,5.03289473684211,0.723684210526316,Southampton,1808,21269.29383,3530,12216.39698,Southampton,33485.69081
E02003572,Southampton 024,E02003572,Southampton 024,1367,5343.1,79,280,946,13,30078.454331,2484,8.13204508856683,15.4589371980676,75.2818035426731,2484,45.6119162640902,32.2463768115942,17.5523349436393,4.14653784219002,0.442834138486312,Southampton,2381,30332.48776,2597,9347.892573,Southampton,39680.380333
E02003573,Southampton 025,E02003573,Southampton 025,2106,6896.5,954,131,759,152,38992.167058,3236,43.5414091470952,6.11866501854141,47.8368355995056,3236,29.5735475896168,35.4140914709518,25.5871446229914,8.18912237330037,1.23609394313968,Southampton,2996,29240.86974,3470,12474.04171,Southampton,41714.91145
E02003574,Southampton 026,E02003574,Southampton 026,1972,6642.13,260,283,1194,23,37589.530008,3412,11.7819460726846,13.6576787807737,71.7174677608441,3412,40.767878077374,33.2942555685815,21.3364595545135,3.92731535756155,0.674091441969519,Southampton,3070,33475.75318,3599,12086.88364,Southampton,45562.63682
E02003575,Southampton 027,E02003575,Southampton 027,2028,6363.2,1075,150,684,51,36550.735401,2808,51.1396011396012,8.22649572649573,37.6424501424501,2808,29.5940170940171,34.4729344729345,26.0683760683761,8.72507122507123,1.13960113960114,Southampton,2028,17956.65328,2987,10984.80626,Southampton,28941.45954
E02003576,Southampton 028,E02003576,Southampton 028,2121,6990.9,478,502,1090,16,39556.606899,3434,22.8305183459522,18.5789167152009,56.4065230052417,3434,38.9924286546302,32.4403028538148,21.432731508445,6.37740244612697,0.75713453698311,Southampton,2999,30840.23115,3614,13260.24734,Southampton,44100.47849
E02003577,Southampton 029,E02003577,Southampton 029,5917,13132.5,968,1999,1317,452,77383.230565,4908,27.6079869600652,43.0929095354523,24.6740016299919,4908,37.917685411573,35.920945395273,18.6430317848411,6.0920945395273,1.42624286878566,Southampton,2420,20108.63369,6734,27352.6982,Southampton,47461.33189
E02003578,Southampton 030,E02003578,Southampton 030,1519,4876.4,173,291,933,21,27644.407294,2641,10.6399091253313,15.6758803483529,72.1317682695949,2641,44.0742143127603,33.2071185157137,18.5157137447936,3.5592578568724,0.643695569859902,Southampton,2493,26525.49559,2830,10046.80627,Southampton,36572.30186
E02003579,Southampton 031,E02003579,Southampton 031,3137,8201.7,220,622,1253,321,46309.490616,3357,11.5579386356866,23.8010128090557,63.0920464700626,3357,44.9210604706583,32.3205242776288,17.3369079535299,4.85552576705392,0.565981531128984,Southampton,3068,34052.12047,4460,13860.93609,Southampton,47913.05656
E02003580,Southampton 032,E02003580,Southampton 032,1804,5424.2,901,115,689,16,31120.7755975,2617,55.4833779136416,6.64883454337027,35.6897210546427,2617,27.2067252579289,35.2693924340848,25.4489873901414,10.8139090561712,1.26098586167367,Southampton,1716,15056.06366,2825,9432.095361,Southampton,24488.159021
source diff could not be displayed: it is too large. Options to address this: view the blob.
# fridayFagPacket
# fridayFagPackets
A repo for our fridayFagPacket data notes (numbers that could have been done on the back of one and should probably come with a similar health warning)
A repo for our [fridayFagPacket](https://energy.soton.ac.uk/friday-fag-packets/) data notes (numbers that could have been done on the back of one and should probably come with a similar health warning)
* 2022-10-06 - [GDP & emissions - degrowthing or decoupling?](GDP_emissions_trends.html)
* 2020-10-16 - [retrofit or bust](retrofitOrBust.html)
* 2018-06-15 - [UK household power demand and #worldcup2018](https://energy.soton.ac.uk/uk-household-power-demand-and-worldcup2018/)
* 2018-05-30 - [Super Saturday and spikes in demand](https://energy.soton.ac.uk/super-saturday-and-spikes-in-demand/)
* 2017-01-20 - [A Most Unusual Sunday](https://energy.soton.ac.uk/a-most-unusual-sunday/)
\ No newline at end of file
* 2017-01-20 - [A Most Unusual Sunday](https://energy.soton.ac.uk/a-most-unusual-sunday/)
\ No newline at end of file
File deleted
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
File deleted
......@@ -12,7 +12,7 @@
<meta name="author" content="Ben Anderson" />
 
 
<title>Retrofit or bust?</title>
<title>#backOfaFagPacket: Retrofit or bust?</title>
 
<script>/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
......@@ -1628,18 +1628,24 @@ div.tocify {
 
 
 
<h1 class="title toc-ignore">Retrofit or bust?</h1>
<h1 class="title toc-ignore">#backOfaFagPacket: Retrofit or bust?</h1>
<h4 class="author">Ben Anderson</h4>
<h4 class="date">Last run at: 2020-10-30 15:55:52</h4>
<h4 class="date">Last run at: 2020-11-10 18:05:19</h4>
 
</div>
 
 
<hr>
<blockquote>
<p>This frdayFun note was first published as a <a href="https://dataknut.wordpress.com/2020/10/16/retrofit-or-bust/">blog</a></p>
<p>This fridayFagPacket was first published as a <a href="https://dataknut.wordpress.com/2020/10/16/retrofit-or-bust/">blog</a></p>
</blockquote>
<hr>
<div id="fridayfagpackets" class="section level1">
<h1><span class="header-section-number">1</span> fridayFagPackets</h1>
<p>Numbers that could have been done on the back of one and should probably come with a similar health warning…</p>
<blockquote>
<p>Find out <a href="https://dataknut.github.io/fridayFagPackets/">more</a>.</p>
</blockquote>
<p>It seems like we can’t snooze for a second without HM Govt announcing another ‘build back better’ initiative. The sentiment behind these is totally to be applauded: invest public £ in job (and skill) creating schemes which help fix our <a href="https://www.theccc.org.uk/publication/uk-housing-fit-for-the-future/">energy inefficient homes</a> thereby reducing energy demand (and carbon emissions), increasing thermal comfort and reducing poor health outcomes. Win4.</p>
<p>Schemes seen to date include:</p>
<ul>
......@@ -1649,12 +1655,13 @@ div.tocify {
</ul>
<p>These sound like big numbers.</p>
<p>But how much is it really going to cost to bring our homes up to standard, assuming we can even agree what standard is required for our <a href="https://www.theccc.org.uk/publication/uk-housing-fit-for-the-future/">greenhouse gas emissions reduction objectives</a>?</p>
</div>
<div id="ballparks" class="section level1">
<h1><span class="header-section-number">1</span> Ballparks</h1>
<h1><span class="header-section-number">2</span> Ballparks</h1>
<p>If we want a very ‘<a href="https://www.collinsdictionary.com/submission/11813/back+of+a+fag+packet">back of a fag packet</a>‘ estimate for England we can start with the excellent research provided by the English <a href="https://www.gov.uk/government/statistics/english-housing-survey-2018-energy-report">Housing Survey 2018</a> reports.</p>
</div>
<div id="how-big-is-the-problem" class="section level1">
<h1><span class="header-section-number">2</span> How big is the problem?</h1>
<h1><span class="header-section-number">3</span> How big is the problem?</h1>
<p>Pretty big.</p>
<p><a href="https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/898341/Energy_Chapter_1_Figures_and_Annex_Tables.xlsx">Table AT1.5</a> gives us the number of dwellings and the average SAP-modelled annual energy cost by EPC band. Note that modelled energy cost includes space heating, cooling and hot water but not appliances.</p>
<p>A quick calculation (see Table 1 below) shows that:</p>
......@@ -1683,19 +1690,19 @@ What about the costs?</p>
<p>Privately rented dwellings are in the same ball park – £46bn or £68bn depending if we include A-C. But the big problem is the 15.2m (63%) owner occupied homes of whom 70% are in band D-G. If we ignore the A-Cs someone needs to find £154bn for this sector and £214bn if we include them. Given emerging evidence on <a href="https://onlinelibrary.wiley.com/doi/full/10.1111/1753-6405.12895">why owners don’t improve their dwellings</a> this is going to be the big one.</p>
</div>
<div id="in-sum" class="section level1">
<h1><span class="header-section-number">3</span> In sum</h1>
<h1><span class="header-section-number">4</span> In sum</h1>
<p>Is all this enough to hit our carbon targets? Getting all dwellings up to A/B standard is one approach and it should mean we have a lot less heat energy to decarbonise. Scarily for some, £12bn would also be quite a big chunk out of the retail energy sector’s annual turnover.</p>
<p>To be sure, £332 bn sounds a lot but remember that the annual English NHS budget is <a href="https://fullfact.org/health/spending-english-nhs/">~£130 bn and rising</a> in a ‘normal’ year. In contrast, according to our fag packet we ‘just’ need to invest £11bn a year (at current prices) for 30 years in dwelling improvements. This co-incidentally also helps to <a href="https://jech.bmj.com/content/63/4/271.short?casa_token=QjmF0S0mRK4AAAAA:PH24tAPvDC7teVFPiOSwxksd2ZjSD91XTLV4rpZCl5DefSUWO_oPmfVlDa-uZjhKCdsRyaUEXxk">reduce the NHS budget</a> through improved health co-benefits. Ideally of course we’d want a front-loaded investment to ‘build back better’, help us deliver quickly on our <a href="https://www.gov.uk/government/topical-events/cop26">COP commitments</a> and <a href="https://www.theccc.org.uk/publication/reducing-uk-emissions-2020-progress-report-to-parliament/">regain at least some moral high ground</a>.</p>
</div>
<div id="but-are-we-barking-up-the-wrong-tree" class="section level1">
<h1><span class="header-section-number">4</span> But are we barking up the wrong tree?</h1>
<h1><span class="header-section-number">5</span> But are we barking up the wrong tree?</h1>
<p>However for reasons that are excellently explained in a recent <a href="https://www.passivhaustrust.org.uk/guidance_detail.php?gId=44">PassivHaus Trust report</a>, focusing on EPC bands might be a red herring. This is because ‘high’ EPC bands can be met by installing on-site low carbon generation (e.g. PV) without having to reduce energy inputs and the EPC rating uses energy-input carbon intensity values that are rapidly out of date, especially for electricity. As a result as ‘the carbon emissions associated with expensive electricity continue to reduce, this makes the EPC rating system increasingly inaccurate and means that a highly rated dwelling could potentially produce a very high rate of emissions‘ (p11).</p>
<p>The Trust instead recommends a focus on space conditioning energy intensity (kWh/m2) as a primary metric. This would mean deciding what kWh/m2 standards we want to hit and devising policy settings and support mechanisms to enable the industry to deliver them at speed and scale.</p>
<p>Intriguingly this is exactly what N<a href="https://www.mbie.govt.nz/dmsdocument/11793-transforming-operational-efficiency">ew Zealand’s Ministry of Business, Innovation and Employment (MBIE)</a> is currently consulting on with respect to new build dwellings as part of their Building for Climate Change: Transforming operational efficiency and reducing whole-of-life embodied carbon programme. Watch this space.</p>
</div>
<div id="detailed-tables" class="section level1">
<h1><span class="header-section-number">5</span> Detailed tables</h1>
<p>We did the original analysis in the excel workbooks we downloaded from gov.uk. You can find them <a href="https://git.soton.ac.uk/SERG/fridayfun/-/blob/master/2020-10-16-retrofOrBust/2018_EHS_Energy_Chapter_3_Figures_and_Annex_Tables.xlsx">here</a> (Tab: AT3.4 Edited). Hey, no-one’s perfect.</p>
<h1><span class="header-section-number">6</span> Detailed tables</h1>
<p>We did the original analysis in the excel workbooks we downloaded from gov.uk. You can find the workbook working <a href="2018_EHS_Energy_Chapter_3_Figures_and_Annex_Tables.xlsx">here (Tab: AT3.4 Edited))</a>. Hey, no-one’s perfect.</p>
<div class="figure">
<img src="data:image/png;base64,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3ft7Pp97d3bmzJmZ38488ztPnXZjx4wZGyRCQAgIASEgBISAEBACbRKBCdrkVeuihYAQEAJCQAgIASEgBCICIoO6EYSAEBACQkAICAEh0IYREBlswz++Ll0ICAEhIASEgBAQAiKDugeEgBAQAkJACAgBIdCGEWhf6NpHjR5daLXWCQEhIASEgBAQAkJACLQyBDpMNVXJM5ZlsCQ82igEhIAQEAJCQAgIgfpGQGSwvn9fXZ0QEAJCQAgIASEgBEoiIDJYEh5tFAJCQAgIASEgBIRAfSMgMljfv6+uTggIASEgBISAEBACJREQGSwJjzYKASEgBISAEBACQqC+ERAZrO/fV1cnBISAEBACQkAICIGSCIgMloRHG4WAEBACQkAICAEhUN8IiAzW9++rqxMCQkAICAEhIASEQEkERAZLwqONQkAICAEhIASEgBCobwREBuv799XVCQEhIASEgBAQAkKgJAIigyXh0UYhIASEgBAQAkJACNQ3AiKD9f376uqEgBAQAkJACAgBIVASAZHBkvBooxAQAkJACAgBISAE6hsBkcH6/n11dUJACAgBISAEhIAQKIlA+5JbtVEICAEhIAT+FQR++umn8NIrr8RjL/+f/4TJJpusrPMYM2ZMePLpp2PbRRZeOMw044xh5PffhzfefDOuW3XllcOEE05YVl/FGtEXfc4800xh4YUWKtZM64WAEGglCFRMBo/q3Tv88uuvRS9vjVVXDVtutlnR7dogBISAEGgtCLi+gzwdfeSRYdpppil66mcOGBA++vjjuH3fPfZoMkn6+JNPwq133BH7m2666cLiiy5a9Njphl9/+y2/H8sbrrdeePX118OQu+6KzRazfqa3/poinBdksEOHDqFvr15N6Ur7CgEh0AIQqNhN/JeNOkvJb7//XmqztgkBISAEWg0Cru+wtl17ww1Fz/vtd9/NE0Eajfn776JttUEICAEh0NIQqNgy6Bcw8cQTh712282/5j9nnGGG/LIWhIAQEAL1gsB7H3wQPvv88zD7bLONc0k33nzzOOu0QggIASHQWhComgxOOMEEYYH55it6nW+89VZo3759WMTiST7/4ovw2htvhEkmmSQstcQSYbpppx1nv08+/TS8O3x4mND26ZSLc/FG340cGT748MMw5xxzhFlmnjm8Y+2Gv/deWGn55cP0008fm71v21n3119/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xVpCzG4p3VPufYQVL42RTK+13GWsohDKQ7p1G2cXBiCF4p/HafgvrqiJZfBfPH8dWggIgRaAALEytQxmbgGXpFMQAkKgCAJYunDlt4TSPC1F95D4hCW10oSaIhDXfHVjlkGRwZpDrg6FgBAQAkJACAgBIdByEGiMDFZUZ7DlXJbORAgIASEgBISAEBACQqAWCIgM1gJF9SEEhIAQEAJCQAgIgVaKgMhgK/3hdNpCQAgIASEgBISAEKgFAiKDtUBRfQgBISAEhIAQEAJCoJUiIDLYSn84nbYQEAJCQAgIASEgBGqBgMhgLVBUH0JACAgBISAEhIAQaKUIiAy20h9Opy0EhIAQEAJCQAgIgVogIDJYCxTVhxAQAkJACAgBISAEWikCIoOt9IfTaQsBISAEhIAQEAJCoBYIiAzWAkX1IQSEgBAQAkJACAiBVoqAyGAr/eF02kJACAgBISAEhIAQqAUCBecmrkXH6kMICAEhIASEgBAQAkKg5SMgy2DL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYERAabDVp1LASEgBAQAkJACAiBlo+AyGDL/410hkJACAgBISAEhIAQaDYE2lfa84CLLgpvvPVWg93aTzhhmG666cLcc84ZOm+xRZimQ4cG2/VFCAiBlovAA488Em6+7bYwlz2/vQ47rOiJfvDhh+H0AQNCO2sx4PTTi7bzDb/++mu44NJLw/D33gu//f57mHSSScJiiy4a9t199zCh6QyXP/74I5x1wQXhQ+v/d1ueasopw2orrxx1ibfxzxtuuSU8+cwz4Zdffgnondlmmy0csM8+YXrTP5LWj0C598zP9vtfcuWVYejbb4c///wzTDTRRGHB+ecP++6x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j2aKgAiIgAiIgAiIQHUTkBis7vOroxMBERABERABERCBogQkBovi0UwREAEREAEREAERqG4CEoPVfX51dCIgAiIgAiIgAiJQlIDEYFE8mikCIiACIiACIiAC1U1AYrC6z6+OTgREQAREQAREQASKEpAYLIpHM0VABERABERABESguglIDFb3+dXRiYAIiIAIiIAIiEBRAu2z5o4dNy5rsqaJgAiIgAiIgAiIgAi0MAKdO3UqusfyDBbFo5kiIAIiIAIiIAIiUN0EJAar+/zq6ERABERABERABESgKAGJwaJ4NFMEREAEREAEREAEqpuAxGB1n18dnQiIgAiIgAiIgAgUJSAxWBSPZoqACIiACIiACIhAdROQGKzu86ujEwEREAEREAEREIGiBCQGi+LRTBEQAREQAREQARGobgISg9V9fnV0IiACIiACIiACIlCUgMRgUTyaKQIiIAIiIAIiIALVTUBisLrPr45OBERABERABERABIoSkBgsikczRUAEREAEREAERKC6CUgMVvf51dGJgAiIgAiIgAiIQFECEoNF8WimCIiACIiACIiACFQ3AYnB6j6/OjoREAEREAEREAERKEpAYrAoHs0UAREQAREQAREQgeom0L7cw7v0iivCu++/X3CxNVZdNay39toF52uGCIhAyyLw5VdfhWtuuCF88+23YcKECWGKyScPyy6zTNh0ww1DmzZtCh7MH3/8Ea645prw8SefhD/Hj4/LzdezZ+i9ww6hXbt2+eVY5y233x5eevXVMN7KMW/mmWYKu+y4Y5hpxhnz5ZJfPvjww0Bd9O+//4Z+++8fZpl55uRsfa8QAp9+9lk4/5JLAlfJ8GOPrXOvxv7yS7jy2mvDZ59/Hv7+++/QoUOHML9dMztsu228fpIruO2uu8LzL74YuM7ac83YNbB7795hummnTRaL3ylz6llnhZ9+/jkcsM8+Yc455qhVpjVM4P9ylfF957334n8SvosstFDYabvtCv6X+a9dNHJkmKZTp3BU//5FMb3w8svhnvvuC5zHdm3bhpnsf8w5mX666Wosh4a44eabYzn2aeqppgrrrLVWWHmFFWqU+93O2zXXXx/e/+CD/PUwV/fuobfVDR2nnLJG2eSPUq8jrp+bbrstuWj83tb2/fghQ/LTJ06cGO6243rq2WfDn3/+GZg/4wwzhJ233z50m3XW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LQIiIAIiIAIiIAIi0HQE5BlsOtbakgiIgAiIgAiIgAhUHAGJwYo7JdohERABERABERABEWg6AhKDTcdaWxIBERABERABERCBiiMgMVhxp0Q7JAIiIAIiIAIiIAJNR0BisOlYa0siIAIiIAIiIAIiUHEEJAYr7pRoh0RABERABERABESg6QhIDDYda21JBERABERABERABCqOgMRgxZ0S7ZAIiIAIiIAIiIAINB0BicGmY60tiYAIiIAIiIAIiEDFEZAYrLhToh0SAREQAREQAREQgaYjIDHYdKy1JREQAREQAREQARGoOAISgxV3SrRDIiACIiACIiACItB0BCQGm461tiQCIiACIiACIiACFUdAYrDiTol2SAREQAREQAREQASajoDEYNOx1pZEQAREQAREQAREoOIItC93j86+8MLwxltvFVxs/bXXDptttFHB+ZohAiLQOgi8+fbb4fJrrgk//fxz+Pfff0OnqacOm2y4YVhz1VVrAJgwYUK4+vrrwzMvvBDGjx8f2rVrF2bt2jX07dMnzDLzzPmyv/3+e7j48svD2+++G/7+++/QoUOH0HOeecI+Vm6qjh3z5fSl+Ql8/sUX4SI7V2O+/jpwfqecYoqw8oorhm232CK0adOm4A5+NWZMOOeii8K3330Xr5nppp02bL/VVmGJXr1qLPPXX3+F0887L3z88cdhvH3n2lp5hRXCVpttVqPc9z/8EM675JLw+eefh7//+SdMYfux9BJLhF122CFeZzUKt4If/A8vvPTS8Ib9N//488/4H1piscXCXrvtlnleHnz00XDTbbeFOWafPRx16KFlETrlrLPC+x98EBacf/7wv75947Kc32OPP77oeuade+5w6IEH1ijzxx9/xOV++PHHcMTBB4e5evSoMb/Qj4/s+jjl7LMDV9zZp5xSqFic/t7774ezLrggXq8DDz881kG+APXNJXY9v/bmm+FPq6Mmm2yy0H2OOULfPfYIXTp39mK1PidOnBhuvv328OgTTwSOoW3btmHmmWYKextvmGInnXFG+OCjj2otm5wwaMCA/P48/9JL4dqbbgq//PJLLNKpU6ew3ZZbhuWWXjq5SNnfy/YMUrHzR+QPzoGlX5NPPnnZO6EFREAEqosAQpCbATfjbrPOGuaea64w7tdfw1XXXRduv/vuGgc77KSTYmVJvTLjDDPEOuUz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BCQGq/v86uhEQAREQAREQAREoCgBicGieDRTBERABERABERABKqbgMRgdZ9fHZ0IiIAIiIAIiIAIFCUgMVgUj2aKgAiIgAiIgAiIQHUTkBis7vOroxMBERABERABERCBogQkBovi0UwREAEREAEREAERqG4CEoPVfX51dCIgAiIgAiIgAiJQlIDEYFE8mikCIiACIiACIiAC1U2gfX0P76+//grX33xz+PiTT8Iv48aFf/75J7Rr1y5MN+20Ya3VVw/LLr10fVet5URABKqAwJdffRWuueGG8M2334YJEyaEKSafPCy7zDJh0w03DG3atMkfIXXJRSNHhs8//zyMt+9TTzVVrD82Wn/9fJn0lw8+/DBcesUV4d9//w399t8/zDLzzOki+t2MBEo99+ld/OOPP8IV11wT7yt/jh8fr5n5evYMvXfYId5fvPyPP/0ULr/66vCVXWN/271niimmCIstskjYZost6lXO16vPbAL8z6669trwznvvBc5Lhw4dwiILLRR22m67Gv/l5NLnX3xx+Mj0Qc955gl77Lprclb++6effRbOv+SSQG0w/Nhj89MLfTnzvPPCF19+GbbcdNOSNcb9Dz0UHn3ssdCxY8cwcMCAGvtbTt1zy+23h5defTX8/vvvYXKry+bq0SP06d27xvWW3u+JEyeGu++7Lzz17LPhzz//DG3btg0zzjBD2Hn77UO3WWetUfyV114Lt911Vxhneor6sfM004RtttwyzG/Xf9IefvTR8Mjjj8f9YH1oru223jrMbfvTEGs3eNCgwekVUCEXs1dffz2cfvbZ4Qv7I/5hB8iOU9H/YxX+b7/9Ft58++1AZb3MUksVW43miYAIVCmBr7/5Jpx8xhnhl19+iXVDp6mnDuN+/TV88umnYczXX4fFF1ssHjk3/2OHD4+Csa01JqkAaVx+9PHHsexSSyxRixDLnHLmmfGmhLhcVvVMLUbNOaHUc5/eR27Mg4cNCyzfrn37MMP008cb3ld2vbz48sth1ZVXjotwjznu+OPDTyYIu3TuHLp16xbG2nWGsHj3/ffD8ssuW1a59H7od20CJ51+enj/gw9i4wvxwX8Qwc99Psvxc7uJGs4Z2mD/vfcOk002Wa2VIn4uuPTS8Pfff0ftsN7aa9cqk5xwx913h5dNjNGwRIj16N49OTvz+2jbPxqkaJOdTIDNNOOM+XLl1D1nnHNOeO2NN+K2p+3SJeoeGrlPP/dcWHmFFQoKwgvt+J5/8cW43PTTTRcmWMPl57Fjw7PPPx+WXnLJMOWUU8b9ue/BB8PNt90WxpvQhi9ikwYPDLvOMku+sUuZB00MIs57zDlnLMd+sI0F5psv/h/yB5j6gkYrZmV7Br1FhuLlz7p3nz5R6fpG2Knb7aTNMfvsPkmfIiACrYzAVdddFyusFezGTOsWo0WPQHz9zTfjPFq1tLZpUOLZ63/QQbHlTOXGzYcbO6KQij9pZ19wQUA40LLeevPNk7P0vQIIlHru07t67Y03RoHf3W5y/fbbL84m4jTsxBPjjfGpZ54JKy6/fODGyXRuftx/MATCUYMHh8/Mu/zDjz8Gbryllosr0FtBAh9+9FH4asyY0N4E+uAjjwxTW8PudxODnJcxJtzRAog+NwTio+a5wjg/lE8b3rp7H3ggPbngb0TdI+bdK8cQexdddllcZM3VVgsLLbBAjcVLrXveeued8LE1YhG0Aw45JIo1BOyIk0+O1+Wd99wTtjBPZdqox/CkdjBuRx1+eF6oISxZ32133hl2N88idRnXKnaQRTnmnGOO+P2lV14JV5o39vqbbopebybiYcSO6t8/7gffH3zkkeh9vNnq0oMPOIBJ9bKycwZRupx8FPbRdoC4PJOGN3DYoEFhEwsFyURABFonAW7ItG63trCd22zmwelsnhzsU7tpY4RdsD0tjIQ4xGaeaabY2uY7FVzS7rr33uiRoJV7QN++yVn6XiEESj336d0lpIgRQnNDgKy/zjrxJzdWDM8htsTii8dP3khR4vrCEIRYqeViYb0VJODcCVe6sOtoHi3u88NNgCeFIALswpwA47zNO/fctdb7tokrhCDL7bbzzgW9ar5gUtTRuCzVvNHY3cTVxhtsUGuxUusePJLY2muskRdghMnZdwzvYJa98dZbcfKaljaHB9tt9VVXjV/9+qTRi80x22x5IcjvJe36duFNYwcOeASJsuA9dFvJGkjYzz//7JPq9VmWZ5Ad8QPos8su9dqgFhIBEah+AiMK5P+MNy8gNoN5bhAN1ClUeNNblCFp66y5ZvQuUMYNL+FDFiLhJoIQrCvs4cvps2kJlHLus/YIbx/mjYJ0mV8tzQBbYP75A56itywdaelEGsGX5r3y+f5ZSrm4kN4KEiBtA0sKmkKFz7nwwujpQgSuu9ZamcUWNA/disstF1awVzpvLmsB8gTxnpFDTOOgFLvn/vtjoxHRuv8++9RapJy658dcHbRGTsT5ymY38UauKrmACDUP+fp8+k7wShvRVWwqy2HEWB5rk2sMxx+5NxxvGCk28KeB/aulSZAqMZXlVmMuahsajS2NbNzk/7fmcZfSepeJgAiIQKkEyBEi+ZxKrFOnTjFczLK0dNNGxYroI4fG7dIrr/Sv4dSzzorfSVWhc0EpN5X8wvrS5ATS5z5rB2axe8qHJvgJi+2zxx6xCDdZvMGYR6GWtzxROgSQu36q5Y5yDSD6KIsI8UZCqeXiyvVWJ4GkBzCrMClipIJgeP4Pts4aiBdy47bYZJMaiyQjBjVmpH7cescdMceY0CnCatQTT6RK1P5JTh6hU4xcwf5HHx1FJB7CXc2bh0Ak3xErpe6hgxKeZ15pY12IOfpPZHlB0+X57eHu5ew6xnrOO2/8xKNNaNm11ZOWFoHow1yIw4AOKceOGBE7llA/vjd6dGxA4blsiJUlBt39nlbA7AA5BMS43YiT+8H6NH2KgAi0TgK0hsklw7bL5RB+99138be3kOOPxBuVL94ivIcPjxoV3DOEkJzJ0lO+toqTypM8xCMPOywvFhKr0NcKIJB17rN2ix6Rw086KeaKDjjmmNir/CcLfREiw1ZbZZX4yf2HTiIPPPxw+OyLL+KLGQgP1uFWajkvr8+aBBAieOXcM/bCSy+Ft999N19oK8vXJW8Tw4PlKR2IRoQ9xvl5/MknA/91z++MM0p4Q+Q8ZsvifOq7554lLPFfkZFXXRX3h1909qDxyUgFdIAhz3GoXVul1j10gMPQM1k2pXkGsW+tHipFDF5tdSDrpAHjHW8QenAkHE8eIvmueELxBmLJhi49uJ94+um4DnKv3ejE4rmGPq3cz+wjLLAWV6we6kkWo4cgPV2SJjGYpKHvItA6CTBUwomnnhpv6rRsF1l44Qiii1XUGB6dLHMRQNiQ3ncYYcEdbTgLN/KCSFjHm5QVDvJy+mweAoXOfdbe4Pk7/OCDY+/P777/PnqR25qwQArSqcRviiT+P/7UUzFER+iwq3U+es1ujIgOehkf1q9fLFtquax90bT/HDyEZdtbfhzeMXr7ExbFEHz0/HfjP4iXigYcfQkQYRhpZcefckoUOvT4Ti7jy2Z9IkQvzuUe7r377nlvb1bZ9DR6lWPk9DHcEEaHj0FDh0ZPG97FUuseGp4YHsYs+8vWi/nxZpXxaXi4X7DewXiuGQ4raQhln8+xMwyO2w7bbBO/0iimYx314qJWhyIACRnTgQXRjLezIXVgWWJwnrnmijtFqCcdI6ebM5X0RNvh66xiZsdlIiACrZsA3jy8PdQZ5Aklxw70m/uvNm5X2qjw8Db4kBSEfrAdtt22RtFtzcvovRprzNCPZidQ7NwX2jl6lXuPSBLrGasOgUEHIzfPkUL04UXB5rZ7E/1ZuSmOsp6s3ItKLRdXoLdaBBDnMGZoFkLAS/bqFbbcbLNa5ZjgnUx6LbpoDWHE+aRjD+Hj9+x8ljrc3C0WHkaAYpfYeKJunld6r+UEkj+MUEx6xOj1TL2BOHMhyLJ0+FjJxBPeZISrdyipq+5B9HqEwvch+flbru4if7CYEdplf6nP+luDh7FU00bd6PUjHkIMh5rXkwwzQ71IuJteyG54Cw8fODCmWDCf/a2PtS1nIVoJ0+RaAwwMmjRa77TaOdmlJnkml9d3ERCB6iKAGECoMXQM9UI6T8gjDWNN6JFmkjTyZTD3JBCmoWLmlTTvbFDfCjC5Ln1vPAJ1nfu6toTH4+KRI2MxQr+eLM8EPCecdxeCsZC9zZPrucqwHVip5WJhvdVJIKuDgy/kHrSs/yHeXQxBVqr1Mo8ePWZ54Unzl6+LcSiZltYark/S9QTb9bqCZcqpe7wHNWHypJH+wADUbMuPPznfv9OZhRxG6rDDbfisZE9gL5P8vPHWW2P6C8ey3VZb5WcxfjOWFp4cD/uICPYe+fmFyvhSlhhkvYy4jdESuPGWW+L35BseQXkFk0T0XQRaH4EoBswjiBBkiAQPdSRJUInOa08nwK65/vr8LLyI9+fG3fKBaOltTGWXTiC/ySpOjGEZZJVBoJRzz54SznsjkfeU3HseaoAXiOsj2WOYMnhXuMe8mxtqxpfDe4V5R5NSy/ny+swm8G0ut5foXyGbL9cJgvOJd8qNcP/nuU4l6SdpeJmsT1JJjjniiFqv9XLDDDHaAPPxmiWvIzxuiCOEmo98wvrZJ3LtMMYbLKfuYYxC7E4L87pnkt9eZy284IL8jPNIZyEc7sYQOngj2afDTAimR03wcv6J4GM8TWzfVJ6ki0DGPUwaebWe2zhnA8Z3bjNxwoT/+i4n1j4215U8ManGV5QuB4iRtMufD7csO0XuIOBR4ada/oZMBESgdREgP+cYy8/xXEBawgi5pBEOQSQyxAPeQ27u1CO02AnjIAhZjgofIx+GfBmM/DESsBlqhkofb8QQ6zGY9B7FgnprcgKlnvslLOR4kOWWYQxTRqjLzcOSiDnGskt7lMit8iGGuLFz7+FaYGgZbvKH/u9/USSUWs63q8/aBPxcMAcxWPNf/F950j/oMXy6DabME4bIK6RDBL1sCfXz3yfcmfRy0dmUwawxH6fPxxDk2nAv739b+P93GoMM1sw4xgz1wrrT15EPwowGYT+4fmg4UKdQb5DTiJVa91D2mOOOi09GolMS6XLUR173HHvUUdEzxwDRHBdjqTKNx8YhIDF6HaOVkkY5H1yd6YjIIdZLGP1EI9gbwr4M9ekge0IPnUu45jk2chbpVY9IhRlPeylknXP5j4Xml5Uz6CvZYN11YzyeXjsAIR/Au5RTMfOMPH/qgC+jTxEQgdZBYLT12nMhyBFTR6SNyhkxSKiPUf0ZnwwvAi9vtffNDS/CsngA9rEka9JTuOHwwhCQe1nekIRgxNHsb+Wcex+jLelJYUBiPHxcA+RFpYUgB0hDghs9w8t46IzphNXwQHuOVanlWFaWTcC9rcz18Hu6pD/ZAyHC86I5JwwlhOERQ7ShGZJGByDv6OHTXRTSYaWQGOS6wDzky+/0dcQQK4hEHFbuRaMc4xvuuuOOvrmS6x4W4JnG1FHRC5kbTJrGKh02PIzMY+MwxBrmTwvhO2kw6VQYnGdJO8t6biMEuX7TQpByCNFDDjzwv2dyW8PHecFiCXu8Z7JjXXK9pX6vl2cwvXKSuwkN0EXawaTL6LcIiIAIFCNARUhrPfn80KzyVLaIxlm7do2iIauMplU+Ae8gMtS8f1kJ9aUcAY0OxCSNgqx8NV9HqeW8vD4bRoD/J8OuNIUeKHYdoUtIVeH6KGal1j2sg+GsWJ8L0uR68ewR3Sh3GJ3kOkr5jtiFMd5Gz6uua7lJ4hlMbxQR6IMipufptwiIgAiUQoCbeV1CkPUQPnTvTynrVZnKJDDSBhFfxsKL9RWCHBXeEl51Wanl6lqP5pdGoC7xVdpaSitV7DpCjJYiSEute9gj73yS3jsGk6ZhwvOFJ7Xh6SylrixnPxrFM1jOBlVWBERABERABMivIlVAJgINIVAp1xEdVsiZ9Y4eDTmmSbFsXZ5BicFJQV3rFAEREAEREAEREIEKIVCXGCx7aJkKOS7thgiIgAiIgAiIgAiIQCMQkBhsBIhahQiIgAiIgAiIgAi0VAISgy31zGm/RUAEREAEREAERKARCEgMNgJErUIEREAEREAEREAEWioBicGWeua03yIgAiIgAiIgAiLQCAQkBhsBolYhAiIgAiIgAiIgAi2VgMRgSz1z2m8REAEREAEREAERaAQCEoONAFGrEAEREAEREAEREIGWSkBisKWeOe23CIiACIiACIiACDQCAYnBRoCoVYiACIiACIiACIhASyUgMdhSz5z2WwREQAREQAREQAQagUDms4kbYb1ahQiIgAiIgAiIgAiIQAsgIM9gCzhJ2kUREAEREAEREAERmFQEJAYnFVmtVwREQAREQAREQARaAAGJwRZwkrSLIiACIiACIiACIjCpCEgMTiqyWq8IiIAIiIAIiIAItAACEoMt4CRpF0VABERABERABERgUhGQGJxUZLVeERABERABERABEWgBBCQGW8BJ0i6KgAiIgAiIgAiIwKQiIDE4qchqvSIgAiIgAiIgAiLQAghIDLaAk6RdFAEREAEREAEREIFJRUBicFKR1XpFQAREQAREQAREoAUQkBhsASdJuygCIiACIiACIiACk4qAxOCkIqv1ioAIiIAIiIAIiEALICAx2AJOknZRBERABERABERABCYVgfZZKx47blzWZE0TAREQAREQAREQARFoYQQ6d+pUdI/lGSyKRzNFQAREQAREQAREoLoJSAxW9/nV0YmACIiACIiACIhAUQISg0XxaKYIiIAIiIAIiIAIVDcBicHqPr86OhEQAREQAREQAREoSkBisCgezRQBERABERABERCB6iYgMVjd51dHJwIiIAIiIAIiIAJFCUgMFsWjmSIgAiIgAiIgAiJQ3QQkBqv7/OroREAEREAEREAERKAoAYnBong0UwREQAREQAREQASqm4DEYHWfXx2dCIiACIiACIiACBQlIDFYFI9mioAIiIAIiIAIiEB1E5AYrO7zq6MTAREQAREQAREQgaIEJAaL4tFMERABERABERABEahuAhKD1X1+dXQiIAIiIAIiIAIiUJRAixWDH3/6afj0s8+KHpxmioAIiIAIiIAIiIAIFCfQvvjsmnOPHTEi/PbbbzUnZvzavXfvMH/Pnhlz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oxJlIM+X5Qn54qHDC/eWiSGe7oHYIwcuaYhOtAC2T58+NaIBWXVPuetPbivr+wbW+/k5C8MTrj3KHqc5V/fu8ekjPjag5y7Si5o6D5blpM7AkXxJlufhHTjDOKeIS46FCE3SXGAXazgny5f6vdHFIHk8KF4EHoNF+8jaXc0FvI/1qOFicVvJ8gkeMyXuPZVwKTNEBK0L4uHeM5mLi2cSooZlIiACDSNAi5NKFEOkeTgiudYx1pArJAYRbUnjN61jcgmTzyXlGZwu4Ly8586Q9O5i0AXiSssvX8Or4MvwmfzvZ+2vp6Ekl9F3Eah2AuQKuvEkkSyjofRMLmeN+ThYeCXN/1P1qRtIC1vGBjxmWDly8fh0m8OGoupjET4PjzL9f/vuG6645prY8/j5xKMvKburDVCPk8gNDxk9ajE6pOBRS1pW3VPO+pPr4rvXbUmdgkA9+IADwsU21ioeTR/Am2Ni1BQfDgeNgxUa/zDOzL15OJqf29noDeglBKD3rmb7MN12yy2TiwU0EvmGbHurEvJDayxcx482EydM+O+ukCg41ro4N4Zxo2Hn/dl6WeukDF5DwstJ42KlyzzLJi+kZBl9FwERqAwC5OoQdh5qIRAPHVfGnmkvREAEJgUBOny9YR694YMH11g993xCn4WGXEkWRoT+axqgUMg6WbbQ92J1T2OsP7ldvHVf2biE5AMmQ9xehtxCHGJ7mwezXENUEyWhYV1sAPFy1+vlO9fRX+P/Jbgv0YifhKCKCUE2RZm0EGQ6oDva2GYyERCByicw0lq2y5hXX0Kw8s+V9lAEGkqAkClevXT+HuvlySOlWqHoQ6nLU65Y3dMY60/uC15LPJhZxmDUREYOKjJUT9ZyPg1vYCkC2ss39uck9Qw29s5qfSIgApVJgFyZrE4olbm32isREIGGEMBDxgDT6c4NDVlnfZetlLqHYXHwiHqHmvoez6Rari7PoMTgpCKv9YqACIiACIiACIhABRCoSwz+f2+OCthZ7YIIiIAIiIAIiIAIiEDTEpAYbFre2poIiIAIiIAIiIAIVBQBicGKOh3aGREQAREQAREQARFoWgISg03LW1sTAREQAREQAREQgYoiIDFYUadDOyMCIiACIiACIiACTUtAYrBpeWtrIiACIiACIiACIlBRBCQGK+p0aGdEQAREQAREQAREoGkJSAw2LW9tTQREQAREQAREQAQqioDEYEWdDu2MCIiACIiACIiACDQtAYnBpuWtrYmACIiACIiACIhARRGQGKyo06GdEQEREAEREAEREIGmJZD5bOKm3QVtTQREQAREQAREQAREoLkIyDPYXOS1XREQAREQAREQARGoAAISgxVwErQLIiACIiACIiACItBcBCQGm4u8tisCIiACIiACIiACFUBAYrACToJ2QQREQAREQAREQASai4DEYHOR13ZFQAREQAREQAREoAIISAxWwEnQLoiACIiACIiACIhAcxGQGGwu8tquCIiACIiACIiACFQAAYnBCjgJ2gUREAEREAEREAERaC4CEoPNRV7bFQEREAEREAEREIEKIPB/33rCSeTMGrAAAAAASUVORK5CYII=" alt />
<p class="caption">Table 1</p>
......@@ -1719,7 +1726,7 @@ What about the costs?</p>
</blockquote>
</div>
<div id="r-packages-used" class="section level1">
<h1><span class="header-section-number">6</span> R packages used</h1>
<h1><span class="header-section-number">7</span> R packages used</h1>
<ul>
<li>rmarkdown <span class="citation">(Allaire et al. 2018)</span></li>
<li>bookdown <span class="citation">(Xie 2016a)</span></li>
source diff could not be displayed: it is too large. Options to address this: view the blob.
---
title: "GDP & emissions - degrowthing or decoupling?"
author: "Ben Anderson & Tom Rushby"
date: "`r Sys.time()`"
format:
html:
self-contained: true
toc: true
code-fold: true
editor: visual
---
```{r}
#| label: setup
#| echo: false
#| warning: false
library(data.table)
library(here)
library(ggplot2)
library(kableExtra)
library(plotly)
library(skimr)
figCaption <- "Plots by: @dataknut & @tom_rushby\nData source: Our World In Data (https://ourworldindata.org/grapher/co2-emissions-and-gdp)"
```
# Friday fagpackets
One of a [series](https://dataknut.github.io/fridayFagPackets/)...
# What's all this about de-growth?
\<sigh\>
A follow-up to [\@tom_rushby's tweet](https://twitter.com/tom_rushby/status/1577752402798821410)
Updated after [another by \@JKSteinberger](https://twitter.com/JKSteinberger/status/1587562447795167233)
# Data
Downloaded from the awesome [OurWorldInData](https://ourworldindata.org/grapher/co2-emissions-and-gdp?country=~OWID_WRL):
- absolute and per capita GDP
- absolute and per capita Greenhouse Gas emissions in two flavours:
- production ('territorial') and
- consumption
```{r}
#| label: loasdData
# fix
dt_abs <- data.table::fread(here::here("data", "co2-emissions-and-gdp.csv"))
dt_pc <- data.table::fread(here::here("data", "co2-emissions-and-gdp-per-capita.csv"))
```
Where do we care about?
> Change these at will and for your purposes...
>
> This would make a really nice [shiny app](https://shiny.rstudio.com/gallery/)
```{r}
#| label: selectEntities
entities_of_interest <- c("United Kingdom", "United States", "New Zealand", "Australia",
"China", "India", "Norway", "Kenya", "Jamaica")
# check valid
t <- dt_pc[Entity %in% entities_of_interest, .(nObs = .N,
meanAnnualPerCapTerr = mean(`Annual CO2 emissions (per capita)`, na.rm = TRUE),
meanAnnualPerCapCons = mean(`Annual consumption-based CO2 emissions (per capita)`,na.rm = TRUE),
meanAnnualGDPperCap = mean(`GDP per capita, PPP (constant 2017 international $)`,na.rm = TRUE)), keyby = .(Entity)]
knitr::kable(t, digits = 2) %>%
kable_styling()
```
# Absolute GDP & emissions
## Absolute production emissions
First we'll try production ('territorial') emissions. We are not controlling for population size so countries with large populations will visually dominate.
```{r}
#| label: fig-SelectedProdPlot
#| fig-cap: GDP vs production emissions over time (selected entities).
#| warning: false
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP, PPP (constant 2017 international $)`)/1000000000,
y = as.numeric(`Annual CO2 emissions`)/1000000,
colour = Entity,
alpha = Year)) +
geom_point() +
labs(y = "Annual CO2 emissions (production-based, gT)",
x = "GDP $bn (constant 2017 $)",
caption = figCaption)
```
## Absolute consumption emissions
Note that 2020 consumption-based emissions data is missing so you don't see the 2020 COVID-19 downtick. Absolute emissions are falling in some places even as GDP is still increasing...
```{r}
#| label: fig-SelectedConsPlot
#| fig-cap: GDP vs consumotion emissions over time (selected entities).
#| warning: false
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP, PPP (constant 2017 international $)`)/1000000000,
y = as.numeric(`Annual consumption-based CO2 emissions`)/1000000,
colour = Entity,
alpha = Year)) +
geom_point() +
labs(y = "Annual CO2 emissions (consumption-based, gT)",
x = "GDP $bn (constant 2017 $)",
caption = figCaption)
```
# Per capita GDP & emissions
Since we'll be dividing everything pairwise by the same denominator, nothing much about the shapes should change... but the plots should be much clearer as we've removed the affect of population size. Countries with large populations will no longer visually dominate...
## Production emissions
First we'll try production emissions. @fig-SelectedProdPlotPcc shows change in this metric over time. Some interesting changes in direction (and otherwise)... basically they all need to be inverse U shaped, i.e. heading for y = 0.
```{r}
#| label: fig-SelectedProdPlotPcc
#| fig-cap: GDP vs production emissions over time (selected entities)
#| warning: false
entities_of_interest <- c(entities_of_interest, "World")
plotDT <- dt_pc[Entity %in% entities_of_interest]
p <-ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
y = as.numeric(`Annual CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
geom_line() +
labs(y = "Annual CO2 emissions per capita (production-based, T)",
x = "GDP per capita (constant 2017 $)",
caption = figCaption)
p
```
Let's repeat that. Hover over the dots to see which is which. This is [plotly](https://plotly.com/ggplot2/) in action #YMMV.
```{r}
#| label: fig-SelectedProdPlotPccPlotyly
#| fig-cap: GDP vs production emissions over time (selected entities)
#| warning: false
p <-ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
y = as.numeric(`Annual CO2 emissions (per capita)`),
colour = Entity)) +
geom_point() +
geom_line() +
labs(y = "Annual CO2 emissions per capita (production-based, T)",
x = "GDP per capita (constant 2017 $)",
caption = figCaption)
plotly::ggplotly(p)
```
Now let's have a look at all the countries but without the lines.
Quite interesting, Qatar for example. Perfect place for a winter sport's World Cup. Trinidad and Tobago also worth a look. Macao looks like the place to be?
```{r}
#| label: fig-ProdPlotPcc
#| fig-cap: GDP vs production emissions over time (all entities)
#| warning: false
#plotDT <- dt_pc[Entity %in% entities_of_interest]
plotDT <- dt_pc # for fun
p <- ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
y = as.numeric(`Annual CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
theme(legend.position = "none") +
labs(y = "Annual CO2 emissions per capita (production-based, T)",
x = "GDP per capita (constant 2017 $)",
caption = figCaption)
plotly::ggplotly(p)
```
## Consumption emissions
Next we'll try consumption emissions. This is shown in @fig-SelectedConsPlotPcc.
Note that 2020 consumption-based emissions data is missing so you don't see the down-tick.
```{r}
#| label: fig-SelectedConsPlotPcc
#| fig-cap: GDP vs consumption emissions over time (selected entities).
#| warning: false
plotDT <- dt_pc[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
y = as.numeric(`Annual consumption-based CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
geom_line() +
labs(y = "Annual CO2 emissions per capita (consumption-based, T)",
x = "GDP per capita (constant 2017 $)",
caption = figCaption)
```
Let's repeat that for all countries. Hover over the dots to see which is which #YMMV.
Well this time Luxembourg is out in the lead...
```{r}
#| label: fig-ConsPlotPcc
#| fig-cap: GDP vs consumption emissions over time (all entities)
#| warning: false
#plotDT <- dt_pc[Entity %in% entities_of_interest]
plotDT <- dt_pc # for fun
p <- ggplot2::ggplot(plotDT, aes(x = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
y = as.numeric(`Annual consumption-based CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
theme(legend.position = "none") +
labs(y = "Annual CO2 emissions per capita (consumption-based, T)",
x = "GDP per capita (constant 2017 $)",
caption = figCaption)
plotly::ggplotly(p)
```
# Efficiency
How about looking at efficiency: gC02e per \$ GDP?
Following <https://timjackson.org.uk/earth-vs-growth/> ...
```{r}
#| label: selectProduction
dt_abs[, `Emissions intensity (production-based)` := `Annual CO2 emissions`/`GDP, PPP (constant 2017 international $)`*1000*1000]
```
```{r}
#| label: selectAndPlotProduction
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(Year, `Emissions intensity (production-based)`, colour = Entity)) +
geom_line() +
labs(y = "gC02 per $ GDP",
colour = "Country",
caption = figCaption)
```
For the UK, let's say c. 300g/\$ in 1995 reducing to 200g/\$ in 2010. So 15 years. To go from 200g/\$ to zero at the same rate would take approx. 30 years. So net-zero by 2050?
Regardless of whether that aligns with [science-based targets](https://sciencebasedtargets.org/how-it-works) (i.e. absolute zero by 2044) ... what happens if the economy grows ... by say 2-3% per year? ... would that force total emissions up (fixed intensity) or result in efficiency gains (lower intensity)?
```{r}
#| label: selectCons
dt_abs[, `Emissions intensity (consumption-based)` := `Annual consumption-based CO2 emissions`/`GDP, PPP (constant 2017 international $)`*1000*1000]
```
```{r}
#| label: selectAndPlotConsumption
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(Year, `Emissions intensity (consumption-based)`, colour = Entity)) +
geom_line() +
labs(y = "gC02 per $ GDP",
caption = figCaption)
```
# Whom do we love?
[quarto](https://quarto.org/)
[data.table](https://www.rdocumentation.org/packages/data.table/versions/1.14.2)
[ggplot2](https://www.rdocumentation.org/packages/ggplot2/versions/3.3.6)
[here](https://www.rdocumentation.org/packages/here/versions/1.0.1)
[skimr](https://www.rdocumentation.org/packages/skimr/versions/2.1.4)
# Data descriptions
Check
Skim the absolute data:
```{r}
#| label: skimAbs
skimr::skim(dt_abs)
```
Skim the per capita data
```{r}
#| label: skimPC
skimr::skim(dt_pc)
```
```{r}
#| label: runToHere
# hidden chunk
```
# run quarto render
library(quarto)
quarto_render(input = here::here("gdpAndEmissions","GDP_emissions_trends.qmd")
)
# should not need this - render should be able to do it?
file.copy(from = here::here("gdpAndEmissions","GDP_emissions_trends.html"),
to = here::here("docs","GDP_emissions_trends.html"),overwrite = TRUE
)
\ No newline at end of file