Newer
Older
title: "The energy and carbon inequality corridor for a 1.5 degree compatible and just Europe: Supplementary Information"
- PIK: Social Metabolism and Impacts, Potsdam Institute for Climate Impact Research,
Member of the Leibniz Association, PO Box 60 12 03, Potsdam, 14412, Germany
- HU: Department of Cultural History & Theory and Department of Social Sciences, Humboldt
University Berlin, Unter den Linden 6, Berlin, 10117, Germany
- GWS: Gesellschaft für Wirtschaftliche Strukturforschung (GWS) mbH, Heinrichstraße
30, 49080 Osnabrück, Germany
output:
word_document:
fig_caption: yes
reference_docx: ../templates/template.docx
pandoc_args:
- --lua-filter=../templates/scholarly-metadata.lua
- --lua-filter=../templates/author-info-blocks.lua
- --lua-filter=../templates/pagebreak.lua
csl: ../templates/vancouver.csl
content: |
x pages, x tables, x figures
always_allow_html: yes
```{r setup, echo = FALSE, include = FALSE, message = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
warning = FALSE,
message = FALSE,
echo = FALSE,
comment = "#>",
fig.path = "../figures/",
dpi = 300
)
if (!require("pacman")) install.packages("pacman")
pacman::p_load(tidyverse,
janitor,
here,
wbstats,
ISOcodes,
viridis,
hrbrthemes,
wesanderson,
glue,
ggridges,
patchwork,
pal <- wes_palette("Cavalcanti1", 5, type = "discrete")
extrafont::loadfonts()
# Supplementary Materials and Methods
In this paper our first aim was to decompose an Environmentally-Extended Multi-Regional Input-Output (EE-MRIO) model's household final demand expenditure by income quantile, and then multiply this income-stratified expenditure by 'direct and indirect supply chain' environmental intensities calculated in the EE-MRIO to estimate income-stratified national household environmental footprints. An EE-MRIO can calculate national environmental footprints from final demand expenditure. Final demand expenditure on different production sectors, in monetary units, is multiplied by 'direct and indirect supply chain' environmental intensities per production sector to calculate the environmental footprint (for one year). The 'direct and indirect supply chain' intensities per production sector estimate the total physical amount of environmental extension, whether emissions, energy use, etc., anywhere along the supply chain per monetary unit of final demand expenditure. In this way, the global amount of environmental pressure in that year is allocated to each country based on their final demand expenditure (this 'footprint' approach is also called consumption-based accounting as opposed to territorial-based accounting). The 'direct and indirect supply chain' intensities per production sector are calculated using standard EE-MRIO calculations.
The final demand expenditure, and thus the national footprint, is typically disaggregated into several final demand categories, including households, non-profits serving households, government, gross-fixed capital formation, change in inventories and valuables. To the authors' knowledge, current publicly available EE-MRIOs do not decompose their final demand expenditure by income quantile. The underlying distribution of final demand expenditure and footprint across income groups is therefore hidden. In order to decompose the EE-MRIO final demand expenditure and footprint by income quantile, a second data input is needed with information on the income/expenditure distribution. This could be a household budget survey (HBS) decomposed by income quantile or, at a more aggregate level, the national income distribution. In this paper we use:
1) EE-MRIO: EXIOBASE version3 ixi, from: https://zenodo.org/record/3583071#.XjC7kSN4wpY [accessed on 12.03.2020] [@stadler_exiobase_2018 @stadler_exiobase_2019]
2) HBS: European household budget survey from EUROSTAT, macro-data, from : https://ec.europa.eu/eurostat/web/household-budget-surveys/database [accessed on 22.05.2020] [@eurostat_database_nodate]
We discuss each of these in turn, including additional data inputs needed to complement the HBS. We then present our methodology for our results in the main paper, and data gaps and limitations. The final sub-section in 'supplementary materials and methods' presents an alternative methodology, and the final section of this supplementary information document presents supplementary results from the methodology used in the main paper and the alternative methodology. The whole analysis was performed in RStudio [@r_core_team_r:_2020], using a variety of R packages [@wickham_welcome_2019 @firke_janitor:_2021 @muller_here:_2020 @piburn_wbstats:_2020 @buchta_isocodes:_2020 @garnier_viridis:_2018 @rudis_hrbrthemes:_2020 @ram_wesanderson:_2018 @hester_glue:_2020 @wilke_ggridges:_2021 @pedersen_patchwork:_2020 @zhu_kableextra:_2020 @wickham_readxl:_2019 @gohel_flextable:_2021 @south_rworldmap:_2016 @arnold_ggthemes:_2021].
We use standard input-output calculations to calculate 'direct and indirect supply chain' intensity vectors in EXIOBASE [@miller_input-output_1985]. EXIOBASE publishes the A matrix, the final demand matrix, the satellite extensions matrix, and satellite extensions direct from final demand matrix. We use the industry-by-industry (ixi) EXIOBASE data tables from EXIOBASE version3. This means 163 industry production sectors and 6 final demand categories for 49 regions worldwide (44 countries and 5 rest-of-world regions), from 1995 - 2016. All monetary units are in million current Euros. Stadler et al. (2018) @stadler_exiobase_2018 describe the EXIOBASE version3 compilation procedure in detail, including nine supporting information documents with further detailed information on the compilation of the monetary tables (S1), energy (S2), emissions (S3), and others.
For each year, we first load the A matrix and calculate the Leontief inverse (the inverse of the A matrix). We load the final demand matrix and calculate total output ($x$) by pre-multiplying the Leontief inverse ($L$) by the row sums of the final demand matrix ($Y$):
$$
x = L ° sum(Y)
$$
We then load the satellite extensions matrix and extract the relevant extensions. To calculate direct intensity vectors ($DIV$) we divide the satellite extension vectors ($f$) by total output ($x$):
$$
DIV = f/x
$$
The 'direct and indirect supply chain' intensity vectors ($TIV$) are calculated by pre-multiplying the direct intensity vectors ($DIV$) by the Leontief inverse ($L$):
$$
TIV = DIV ° L
$$
The footprint is then calculated by row-wise multiplying the TIV by final demand:
$$
fp = TIV * Y
$$
Before that final step, however, we decompose national household final demand expenditure by income quintile according to the structure of the EUROSTAT household budget survey, explained in the 'EUROSTAT HBS' section below.
The results in the main paper also present the footprint broken down by its domestic, other European, and non-European parts. To calculate these domestic and foreign parts of the footprint, we row-wise multiply the direct intensity vectors ($DIV$) by the Leontief inverse ($L$):
$$
TIV breakdown = DIV * L
$$
The environmental extensions we use are emissions of CO2-equivalence (in kilograms) and gross total energy use (in terajoules). We create the CO2-equivalence extension by summing together the greenhouse gases CO2, CH4, N2O, SF6, HFCs, and PFCs, from combustion, noncombustion, agriculture and waste. We use Global Warming Potential (GWP) values for a 100-year time horizon taken from the IPCC Fifth Assessment Report [@myhre_g._anthropogenic_2013 (p.73-79)]: 28 for CH4, 265 for N2O and 23500 for SF6 (HFCs and PFCs are in CO2-equivalence already in the EXIOBASE environmental extensions).
The 'gross total energy use' extension in EXIOBASE converts final energy consumption in the IEA energy balance data from the territorial to residence principle following SEEA energy accounting principles. In their Supporting Information 2, Stadler et al. (2018) @stadler_exiobase_2018 describe the compilation of the energy extensions in EXIOBASE version3. Energy supply and use tables from the International Energy Agency (IEA) are converted from the territory to the residence principle, before being allocated to the EXIOBASE industries and final demand categories.
The conversion to the residence principle means that the EXIOBASE energy extensions refer to the functional border of a country's economy. In this case, the system border is defined by the 'residence' of the agent. This means that energy supply and use from international transport by ships, airplanes, fishing vessels, cars and trucks are allocated to the resident units of a country, independent from where these activities take place. In EXIOBASE version3, because emissions from these transport activities are estimated from the energy extensions via emission factors, the emissions extensions follow the residence principle as well.
### Environmental extensions direct from households
For CO2-equivalence emissions and energy use direct from households, the EXIOBASE extensions provide one number of physical emissions and energy use direct from households per country. This number is made up of some mix between, primarily, direct household vehicle fuel use and direct household fuel use for housing heating and cooling, along with some other, smaller miscellaneous uses. To estimate the split between these three activities, we use two further EUROSTAT emissions and energy tables to split 'Total activities by households' between heating/cooling (HH_HEAT), transport activities (HH_TRA), and other (HH_OTH). Full definitions of what is included in these can be found in EUROSTAT's 'manual for air emissions accounts' (2015, p.66) @eurostat_manual_2015. While this disaggregation exists for nearly all EUROSTAT HBS countries, 2015 is the earliest year in our sample with complete coverage (except for Turkey in energy, which we impute using the Bulgarian splits). Therefore, we also use the 2015 splits between these 3 categories for our 2005 and 2010 estimates (the 2005 and 2010 results are shown only in this SI document). The two data tables are:
1) For energy, the EUROSTAT data table 'Energy supply and use by NACE Rev. 2 activity' [env_ac_pefasu] at: http://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=env_ac_pefasu [accessed on 03.06.2020]. [@eurostat_eurostat_2020]
2) For emissions to air, we download the EUROSTAT data table 'Air emissions accounts by NACE Rev. 2 activity' [env_ac_ainah_r2] at: https://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=env_ac_ainah_r2&lang=en [accessed on 03.06.2020]. [@eurostat_eurostat_nodate]
## EUROSTAT HBS
The EUROSTAT HBS compiles national household budget surveys from European countries. Countries provide EUROSTAT with their HBSs in micro-data form, and EUROSTAT has aggregated and published these survey data in macro-data form every five years since 1988. Of the publicly available data tables, we use two:
1) 'Mean consumption expenditure by income quintile (hbs_exp_t133)'
2) 'Structure of consumption expenditure by income quintile and COICOP consumption purpose (hbs_str_t223)'
'Mean consumption expenditure by income quintile' is expressed in purchasing power standards (PPS) per year, country and income quintile, in two possible units; per household and per adult equivalent. Purchasing power standard (PPS) is a common currency measure that eliminates differences in national price-levels. The income quintiles are determined by household, ie. all households in the sample are ranked by income and evenly distributed into five quintiles, thus there are the same number of households in each income quintile. For per adult equivalent, the mean consumption expenditure by income quintile is adjusted for household size between countries, years, and income quintiles, using the modified OECD scale: the first adult in the household is given a weight of 1.0, each adult thereafter 0.5, and each child 0.3 @eurostat_description_2016.
The 'Structure of consumption expenditure by income quintile and COICOP consumption purpose' table gives the distribution of consumption expenditure across COICOP consumption categories in each income quintile, expressed in 'parts per mille (pm)'. There are three 'levels' of COICOP breakdown. All countries have level 1 (12 consumption categories) and 2, but there are only a few with level 3. For the current analysis, we select our own mix of COICOP level 1 and 2. We use COICOP level 1, except for the categories of food (CP01), housing (CP04) and mobility (CP07), where we use level 2.
This is primarily because of the diversity of level 2 categories, especially within those three aggregate level 1 categories. This is most clearly seen in the housing category, where, at level 2, housing is broken down into: 'Actual rentals for housing' (CP041), 'Imputed rentals for housing' (CP042), 'Maintenance and repair of the dwelling' (CP043), 'Water supply and miscellaneous services relating to the dwelling' (CP044), and 'Electricity, gas and other fuels' (CP045). Mapping all shelter-related EXIOBASE production sectors only to the HBS level 1 'housing' consumption category (CP04) would obscure the difference between level 2 categories with extremely different effects on the footprint (electricity production vs. rental payments). The COICOP consumption categories we thus use are: CP011 ('Food'), CP012 ('Non-alcoholic beverages'), CP02 ('Alcoholic beverages, tobacco and narcotics'), CP03 ('Clothing and footwear'), 'rent' (we collapse CP041 with CP042), CP043, CP044, CP045, CP05 ('Furnishings, household equipment and routine household maintenance'), CP06 ('Health'), CP071 ('Purchase of vehicles'), CP072 ('Operation of personal transport equipment'), CP073 ('Transport services'), CP08 ('Communications'), CP09 ('Recreation and culture'), CP10 ('Education'), CP11 ('Restaurants and hotels'), CP12 ('Miscellaneous goods and services').
National environmental footprints are often expressed in per capita terms; the national environmental footprint divided by total national population. This masks any underlying inequality in per capita footprints across income groups. As mentioned above, the EUROSTAT HBS 'mean consumption expenditure by income quintile' macro-data table is expressed only per household and per adult equivalent, but not per capita. We use per adult equivalent as our unit of analysis throughout the paper, and in order to express our footprint estimates per adult equivalent, we needed the total number of private households in each country and year, and for this, two additional data tables were needed. We used:
1) The 'lfst_hhnhtych' table from EUROSTAT, selecting all available years and total households [accessed on 04.05.2020]. [@eurostat_eurostat_nodate-1]
2) Norway is missing from the 'lfst_hhnhtych' EUROSTAT table. We download Norwegian data from the Norwegian statistical office: https://www.ssb.no/en/statbank/table/10986/. We select 'Private households', 'the whole country', no household type selection, all years (2005-2019), and continue with 'Table - Layout 1', then save the table as a 'Tab delimited without heading (csv)' file [accessed on 04.05.2020]. [@statistics_norway_10986:_nodate]
## Method for main paper results
For our results in the main paper, we first decompose the EXIOBASE national household final demand expenditure (before calculating the footprint) by income quintile, using the EUROSTAT HBS. We do this for 2005, 2010 and 2015, but only present 2015 in the main paper. The initial step is mapping the COICOP consumption categories in the HBS to the production sectors in EXIOBASE. Because the share of each consumption category/production sector in the total amount of expenditure is not identical between the HBS and EXIOBASE, there are two possible methods for decomposing the EXIOBASE household final demand expenditure: one that keeps the EXIOBASE production sector shares of total EXIOBASE expenditure intact (breaking the HBS consumption category shares), and one that keeps the HBS consumption category shares of total HBS expenditure intact (breaking the EXIOBASE production sector shares).
Our results in the main paper use the first method, keeping the EXIOBASE production sector shares of total EXIOBASE expenditure intact. This means that the total footprint is identical to when it is calculated in EXIOBASE without any decomposition by income quantile. The alternative method, on the other hand, results in a different total footprint because a different amount of final demand expenditure in each production sector is now multiplied by the same original 'direct and indirect supply chain' intensity for that production sector. We present the alternative method and some results in the last sections of this document.
In this current section we use a two sector toy model to illustrate the method behind the main paper results. In the two sector model, the term 'sector' represents HBS consumption categories/EXIOBASE production sectors that have already been mapped to each other.
Step 1) Multiply 'mean consumption expenditure by income quintile' in purchasing power standard per household (pps hh) by the 'structure of consumption expenditure by income quintile and COICOP consumption purpose' (in 'parts per mille' or pm) to calculate the consumption expenditure structure in 'pps hh'. Then calculate the shares of each income quintile within each sector. Table S1 shows the two sector example, where 'pps hh' is multiplied by the shares of each sector ('parts per mille' divided by 1000) to calculate the expenditure on each sector per income quintile in 'pps hh' ('s1 (pps hh)' and 's2 (pps hh)'). 's1 (q share)' and 's2 (q share)' are each income quintile's share of the total amount of expenditure (in 'pps hh') on that sector, according to the HBS.
```{r tableS1, tab.cap = "**Table S1: HBS structure with calculations of quintile shares per sector.**"}
#"HBS structure with calculations of quintile shares per sector."
quintile = c("q1","q2","q3","q4","q5")
pps_hh = c(10,13,20,33,40)
pm_sector1 = c(200,300,400,500,600)
pm_sector2 = c(800,700,600,500,400)
hbs = data.frame(quintile, pps_hh, pm_sector1, pm_sector2) %>%
mutate(pps_hh_sector1 = pps_hh*(pm_sector1/1000),
sector_1_shares = pps_hh_sector1/sum(pps_hh_sector1),
pps_hh_sector2 = pps_hh*(pm_sector2/1000),
sector_2_shares = pps_hh_sector2/sum(pps_hh_sector2)) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(hbs) %>%
autofit() %>%
set_header_labels(quintile = "quintile",
pps_hh = "pps hh",
pm_sector1 = "s1 (pm)",
pm_sector2 = "s2 (pm)",
pps_hh_sector1 = "s1 (pps hh)",
sector_1_shares = "s1 (q share)",
pps_hh_sector2 = "s2 (pps hh)",
sector_2_shares = "s2 (q share)") %>%
```
Step 2) Join the HBS income quintile shares per sector to the EE-MRIO by sector, and multiply these shares by the EE-MRIO household final demand expenditure per sector ('eemrio hh fd') to decompose it by income quintile (Table S2).
```{r tableS2, tab.cap = "**Table S2: HBS income quintile shares per sector multiplied by EE-MRIO household final demand expenditure vector to calculate EE-MRIO household final demand expenditure per income quintile and sector.**"}
q_share_of_sector = hbs %>%
select(quintile,pps_hh_sector1,pps_hh_sector2) %>%
gather(sector,value,-quintile) %>%
mutate(sector = dplyr::recode(sector,
"pps_hh_sector1" = 1,
"pps_hh_sector2" = 2)) %>%
group_by(sector) %>%
mutate(q_share_of_sector = value/sum(value)) %>%
select(-value) %>%
spread(quintile,q_share_of_sector)
eemrio_hh_fd = c(300,800)
eemrio = data.frame(q_share_of_sector, eemrio_hh_fd) %>%
mutate(q1_eemrio = q1*eemrio_hh_fd,
q2_eemrio = q2*eemrio_hh_fd,
q3_eemrio = q3*eemrio_hh_fd,
q4_eemrio = q4*eemrio_hh_fd,
q5_eemrio = q5*eemrio_hh_fd) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(eemrio) %>%
set_header_labels(sector = "sector",
q1 = "q1 share",
q2 = "q2 share",
q3 = "q3 share",
q4 = "q4 share",
q5 = "q5 share",
eemrio_hh_fd = "eemrio hh fd",
q1_eemrio = "q1 fd",
q2_eemrio = "q2 fd",
q3_eemrio = "q3 fd",
q4_eemrio = "q4 fd",
q5_eemrio = "q5 fd") %>%
Step 3) Once the EE-MRIO household final demand expenditure is decomposed by income quintile, it is multiplied by the EE-MRIO 'direct and indirect supply chain' intensities per sector to calculate the EE-MRIO household footprint per sector decomposed by income quintile (Table S3). The total footprint per sector ('total fp') is the same as if we had simply multiplied the non-decomposed EE-MRIO household final demand expenditure per sector ('eemrio hh fd') by the 'direct and indirect supply chain' intensity vector ('TIV').
```{r tableS3, tab.cap = "**Table S3: Calculation of EE-MRIO household footprint decomposed by income quintile, through multiplication of EE-MRIO household final demand expenditure per income quintile and sector by the 'direct and indirect supply chain' intensity vector (TIV) calculated in the EE-MRIO (with only one 'direct and indirect supply chain' intensity per sector).**"}
TIV = c(0.2,0.4)
footprint = data.frame(eemrio,TIV) %>%
select(sector,
eemrio_hh_fd,
q1_eemrio,
q2_eemrio,
q3_eemrio,
q4_eemrio,
q5_eemrio,
TIV) %>%
mutate(q1_footprint = q1_eemrio*TIV,
q2_footprint = q2_eemrio*TIV,
q3_footprint = q3_eemrio*TIV,
q4_footprint = q4_eemrio*TIV,
q5_footprint = q5_eemrio*TIV,
total_footprint = eemrio_hh_fd*TIV) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(footprint) %>%
autofit() %>%
set_header_labels(sector = "sector",
eemrio_hh_fd = "eemrio hh fd",
q1_eemrio = "q1 fd",
q2_eemrio = "q2 fd",
q3_eemrio = "q3 fd",
q4_eemrio = "q4 fd",
q5_eemrio = "q5 fd",
TIV = "TIV",
q1_footprint = "q1 fp",
q2_footprint = "q2 fp",
q3_footprint = "q3 fp",
q4_footprint = "q4 fp",
q5_footprint = "q5 fp",
total_footprint = "total fp") %>%
```
## Mapping between EXIOBASE and EUROSTAT HBS
Table S4 shows our mapping between the EUROSTAT HBS consumption categories and the EXIOBASE production sectors, along with our grouping of the EXIOBASE production sectors into the five aggregated consumption categories we present in the main paper.
```{r tableS4, tab.cap = "**Table S4: Mapping EXIOBASE industry production sectors to COICOP consumption categories and five aggregate consumption categories.**"}
labels = read.csv(here("/analysis/preprocessing/income-stratified-footprints/Exiobase_T_labels_ixi_w_coicop_mapping.csv")) %>%
select(V2,coicop,five_sectors) %>%
unique()
set_header_labels(V2 = "exiobase industry production sector",
coicop = "coicop consumption category",
five_sectors = "aggregate consumption category") %>%
```
## Country and year coverage
The EXIOBASE version3 industry-by-industry is available for the years 1995 to 2016, albeit with the caveat that the original data series ends in 2011, the 2012-2016 estimates are based on trade and macro-economic data, and caution is advised when analysing trends over time. The EUROSTAT HBS is available for the years: 1988, 1994, 1999, 2005, 2010 and 2015, although not all countries are available for all years, and the years 1988, 1994, and 1999, in particular, have many missing countries. Table S5 shows the country and year coverage between EXIOBASE and the EUROSTAT HBS for the years 2005, 2010 and 2015. Rows with black text show countries that are represented in EXIOBASE, and an 'x' for those years where EUROSTAT HBS data also exists for that country. Rows with red text show countries where EUROSTAT HBS data exists, but who are not represented individually in EXIOBASE (they are in 'rest-of-world' categories in EXIOBASE).
```{r tableS5, tab.cap = "**Table S5: Country and year coverage between EXIOBASE and the EUROSTAT HBS. Rows with black text show countries that are represented in EXIOBASE, and an 'x' for those years where EUROSTAT HBS data also exists for that country. Rows with red text show countries where EUROSTAT HBS data exists, but who are not represented individually in EXIOBASE (they are in 'rest-of-world' categories).**"}
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
geo = c("Austria",
"Belgium",
"Bulgaria",
"Cyprus",
"Czech Rep.",
"Germany",
"Denmark",
"Estonia",
"Greece",
"Spain",
"Finland",
"France",
"Croatia",
"Hungary",
"Ireland",
"Italy",
"Lithuania",
"Luxembourg",
"Latvia",
"Montenegro",
"North Macedonia",
"Malta",
"Netherlands",
"Norway",
"Poland",
"Portugal",
"Romania",
"Serbia",
"Sweden",
"Slovenia",
"Slovakia",
"Turkey",
"UK",
"Kosovo")
year_2015 = c("x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x")
year_2010 = c("x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"",
"x",
"",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"",
"x",
"x",
"x",
"x",
"x",
"")
year_2005 = c("x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"",
"x",
"x",
"x",
"x",
"x",
"x",
"x",
"",
"x",
"x",
"x",
"x",
"x",
"")
country_year_coverage = data.frame(geo,
year_2015,
year_2010,
year_2005)
flextable(country_year_coverage) %>%
autofit() %>%
year_2015 = "2015",
year_2010 = "2010",
year_2005 = "2005") %>%
```
## Limitations
While the EUROSTAT HBS is compiled for cross-country comparison purposes and aims for harmonization, there remains imperfect harmonization in the frequency of surveys, timing, content and structure between countries and years @eurostat_eu_2020. Some types of households may also be excluded from the samples, including super-rich households, for example Germany, which excludes households with over €18,000 monthly net income @eurostat_eu_2020. Sensitive goods and services, such as alcohol, may be under-reported in household budget surveys, while expenditure on infrequent purchases such as a vehicle may create artificially large expenditure differences between households depending on the timing of the survey @eurostat_eu_2020. The EUROSTAT HBS macro-data also does not report direct foreign purchases, and we assumed that the expenditure shares between income quintiles of direct final demand for foreign goods and services was the same as direct final demand for domestic goods and services.
We used EXIOBASE as the EE-MRIO for this study because of its European focus, with nearly all countries in the EUROSTAT HBS also found as stand-alone countries in EXIOBASE, its detailed satellite extension data, and its year coverage (specifically version3, industry-by-industry), but there are well known limitations when using and selecting an EE-MRIO [@moran_convergence_2014]. The production sectors in EXIOBASE are harmonized across countries and years, but needing to map the EUROSTAT HBS to EXIOBASE meant that the most recent year of 2015 could only use the industry-by-industry version of EXIOBASE version3. This version assumes fixed product sales. Furthermore, because EXIOBASE version3 is extrapolated beyond 2011, caution should be used when comparing results over time. This, and the fact that harmonization guidelines in the EUROSTAT HBS have changed over time, were the justification for presenting only the 2015 results in the main paper, and presenting 2005 and 2010 results only here in the SI and data file. We also show 2010 results using the product-by-product version of EXIOBASE version3 in the final section of this SI document.
Mapping the EUROSTAT HBS to EXIOBASE means mapping the COICOP consumption categories in the HBS to industry production sectors in EXIOBASE, which is not one-to-one. Both the EUROSTAT HBS and EXIOBASE are limited in their consumption category/production sector level of detail. The share of each consumption category/production sector in the total amount of expenditure is also not identical between the HBS and EXIOBASE. As discussed in the 'methods for main paper results' section of this SI document, there are alternative methods for decomposing the EXIOBASE household final demand expenditure: one that keeps the EXIOBASE production sector shares of total expenditure intact, and one that keeps the HBS consumption category shares of total expenditure intact. Our results in the main paper use the first method, keeping the EXIOBASE sectoral shares of total expenditure intact, which means that the total footprint is identical to when it is calculated in EXIOBASE without any decomposition by income quantile. The alternative method, on the other hand, results in a different total footprint because a different amount of final demand expenditure in each sector is multiplied by the same original 'direct and indirect supply chain' intensities, but stays faithful to the original HBS consumption category shares of total HBS expenditure. We show the alternative method and some results in the last sections of this SI document.
### Purchaser price versus base price
The EUROSTAT HBS is reported in purchaser price (consumers report their expenditure in the prices they paid) while we use EXIOBASE version3 in base price. Because we decided to keep the EXIOBASE production section shares the same (and just decompose by income quintile within each production sector), which also keeps the total footprint the same, this distinction between purchaser price and base price does not matter. The 'alternative method' section of this document shows that, in the alternative methodology where we break the EXIOBASE production sector shares and keep the consumption category shares of the HBS, the distinction between purchaser price and base price does matter.
In the methodology used for the main paper, once we have multiplied HBS 'pps hh' per income quintile by the sectoral shares in 'pm', to get sectoral expenditure per income quintile in 'pps hh', we include the fact that sector 1 and sector 2 have base price to purchaser price ratios that are different. The base price to purchaser price ratio for sector 1 ('s1 bp') is 0.5, whereas for sector 2 ('s2 bp') it is 1 (ie. there are no trade, transport, tax or subsidy margins in sector 2). This results in sectoral expenditure per income quintile in 'pps hh' now expressed in base price ('s1 pps hh bp' and 's2 pps hh bp') (Table S6).
```{r tableS6, tab.cap = "**Table S6: Same as Table S1 but now with base price shares of purchaser price per sector, and sectoral expenditure per quintile in pps hh base price.**"}
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
bp_share_in_pp_sector_1 = c(0.5,0.5,0.5,0.5,0.5)
bp_share_in_pp_sector_2 = c(1,1,1,1,1)
hbs_bp = data.frame(quintile,
pps_hh,
pm_sector1,
pm_sector2,
bp_share_in_pp_sector_1,
bp_share_in_pp_sector_2) %>%
mutate(pps_hh_sector1 = pps_hh*(pm_sector1/1000),
pps_hh_sector1_bp = pps_hh_sector1*bp_share_in_pp_sector_1,
sector_1_shares = pps_hh_sector1/sum(pps_hh_sector1),
sector_1_shares_bp = pps_hh_sector1_bp/sum(pps_hh_sector1_bp),
pps_hh_sector2 = pps_hh*(pm_sector2/1000),
pps_hh_sector2_bp = pps_hh_sector2*bp_share_in_pp_sector_2,
sector_2_shares = pps_hh_sector2/sum(pps_hh_sector2),
sector_2_shares_bp = pps_hh_sector2_bp/sum(pps_hh_sector2_bp),
pps_hh_bp = pps_hh_sector1_bp + pps_hh_sector2_bp)
hbs_bp_pps = hbs_bp %>%
select(quintile,
pps_hh,
pm_sector1,
pm_sector2,
pps_hh_sector1,
bp_share_in_pp_sector_1,
pps_hh_sector1_bp,
pps_hh_sector2,
bp_share_in_pp_sector_2,
pps_hh_sector2_bp) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(hbs_bp_pps) %>%
autofit() %>%
set_header_labels(quintile = "quintile",
pps_hh = "pps hh",
pm_sector1 = "s1 (pm)",
pm_sector2 = "s2 (pm)",
pps_hh_sector1 = "s1 (pps hh)",
bp_share_in_pp_sector_1 = "s1 bp",
pps_hh_sector1_bp = "s1 (pps hh bp)",
pps_hh_sector2 = "s2 (pps hh)",
bp_share_in_pp_sector_2 = "s2 bp",
pps_hh_sector2_bp = "s2 (pps hh bp)") %>%
```
Table S7 shows that even as the sectoral expenditure for sector 1 is 50% lower in base price than in purchaser price, because we only have one base price to purchaser price ratio per sector (ie. we assume that every income quintile in a country faces the same base price to purchaser price ratio when purchasing a good or service from a given sector), the sectoral shares per income quintile in base price are the same as they were in Table S1.
```{r tableS7, tab.cap = "**Table S7: Quintile shares per sector in base price, with new 'pps hh' per quintile in base price and new sectoral pm values in base price.**"}
hbs_bp_shares = hbs_bp %>%
select(quintile,
pps_hh_bp,
pps_hh_sector1_bp,
sector_1_shares_bp,
pps_hh_sector2_bp,
sector_2_shares_bp) %>%
mutate(pm_sector1_bp = (pps_hh_sector1_bp/(pps_hh_sector1_bp + pps_hh_sector2_bp))*1000,
pm_sector2_bp = (pps_hh_sector2_bp/(pps_hh_sector1_bp + pps_hh_sector2_bp))*1000) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(hbs_bp_shares) %>%
autofit() %>%
set_header_labels(quintile = "quintile",
pps_hh_bp = "pps hh bp",
pps_hh_sector1_bp = "s1 (pps hh bp)",
sector_1_shares_bp = "s1 (q share bp)",
pps_hh_sector2_bp = "s2 (pps hh bp)",
sector_2_shares_bp = "s2 (q share bp)",
pm_sector1_bp = "s1 (pm bp)",
pm_sector2_bp = "s2 (pm bp)") %>%
```
If we now do the same as in Table S3, joining these income quintile shares per sector to the EE-MRIO by sector, and multiplying them by the EE-MRIO household final demand expenditure per sector to decompose it by income quintile, we end up with the same decomposition which will result in the same decomposed footprint as before.
```{r tableS8, tab.cap = "**Table S8: Identical to Table 2.**"}
q_share_of_sector_bp = hbs_bp_shares %>%
select(quintile,pps_hh_sector1_bp,pps_hh_sector2_bp) %>%
gather(sector,value,-quintile) %>%
mutate(sector = dplyr::recode(sector,
"pps_hh_sector1_bp" = 1,
"pps_hh_sector2_bp" = 2)) %>%
group_by(sector) %>%
mutate(q_share_of_sector_bp = value/sum(value)) %>%
select(-value) %>%
spread(quintile,q_share_of_sector_bp)
eemrio_hh_fd = c(300,800)
eemrio_bp = data.frame(q_share_of_sector_bp, eemrio_hh_fd) %>%
mutate(q1_eemrio = q1*eemrio_hh_fd,
q2_eemrio = q2*eemrio_hh_fd,
q3_eemrio = q3*eemrio_hh_fd,
q4_eemrio = q4*eemrio_hh_fd,
q5_eemrio = q5*eemrio_hh_fd) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(eemrio_bp) %>%
autofit() %>%
set_header_labels(sector = "sector",
q1 = "q1 share bp",
q2 = "q2 share bp",
q3 = "q3 share bp",
q4 = "q4 share bp",
q5 = "q5 share bp",
eemrio_hh_fd = "eemrio hh fd",
q1_eemrio = "q1 fd",
q2_eemrio = "q2 fd",
q3_eemrio = "q3 fd",
q4_eemrio = "q4 fd",
q5_eemrio = "q5 fd") %>%
```
## European expenditure deciles
To calculate European household expenditure deciles we first ranked the national income quintiles from the HBS of 28 European countries (in total 140 national quintiles) according to their mean expenditure in PPS and aggregated the result to 10 European expenditure groups. This distribution allowed us to analyze the total European household energy and carbon footprints per these European expenditure deciles. We included only those countries with EUROSTAT HBS and EXIOBASE data in 2015, 2010, and 2005, which excludes Italy (no 2010 or 2015 EUROSTAT HBS data) and Luxembourg (no 2010 EUROSTAT HBS data), but includes the UK, Norway and Turkey.
This method uses average expenditure data from the national income quintiles, and so one limitation is that this aggregation cuts off the lower and higher tails of the respective national expenditure distributions.
Different levels of subsidy in different countries could alter pure comparisons between intensities of consumption between countries, although presumably less within countries.
Our methodology used for the main paper, and explained in the sections above, keeps the production sector shares of EE-MRIO household final demand expenditure (and subsequently the footprint) the same as they are found in the original EE-MRIO household final demand expenditure when not decomposed by income quantile. The alternative method is to keep the consumption category shares of total HBS expenditure the same as they are found in the HBS. This means taking the total sum of household final demand expenditure from the EE-MRIO and decomposing it first based on the share of each income quantile's consumption expenditure of the total consumption expenditure as found in the HBS, before decomposing into sectors as well using the HBS 'parts per mille' per sector. This leads to a different total footprint than the original EE-MRIO footprint (when not decomposed by income quantile), because a different amount of final demand expenditure in each sector is now multiplied by the same 'direct and indirect supply chain' intensities per sector that are originally calculated in the EE-MRIO.
Here the distinction between purchaser price and base price matters, as we directly take the HBS expenditure structure (which is reported in purchaser price) and apply it to the aggregated sum of EE-MRIO household final demand expenditure which is originally in base price. To correct for this, we can either convert the household budget survey to base price or take the total EE-MRIO household final demand expenditure in purchaser price, decompose it according to the HBS structure, then convert to base price. Here we show how we transform the household budget survey from purchaser price to base price using EUROSTAT margin data tables.
We use two data tables from the OECD statistics database, which are provided to the OECD by EUROSTAT (for European countries). The units here are: 'Trade and transport margins in percentage of final consumption expenditure by households' and 'Taxes less subsidies on product in percentage final consumption expenditure by households':
- Trade and Transport margin tables, Taxes less Subsidies tables (National Accounts > Annual National Accounts > Supply and Use Tables > SUT Indicators): https://stats.oecd.org/index.aspx?queryid=84864# [@oecd_sut_nodate]
1) Trade and transport margins in percentage of final consumption expenditure by households: Export as text file (csv) - customize to include years 2005 to 2015 [accessed on: 15-04-2020]
2) Taxes less subsidies on product in percentage of final consumption expenditure by households: Export as text file (csv) - customize to include years 2005 to 2015 [accessed on: 15-04-2020]
We first map the HBS COICOP consumption categories to the margin data 'PRODUCT' sectors. Most countries have margin data here starting only in 2010. We take the 2010 margin data and apply this to all three years in our sample (the margins do not change significantly over time). This was possible for 20 countries. There are then two countries with only 'rent' margins missing: the Czech Republic and Slovakia. Here we apply zero to both trade and transport, and taxes less subsidies margins. There are then five countries with some missing margin data (Estonia, Ireland, Lithuania, Norway and Sweden), and three countries with no margin data at all (Germany, Spain, Turkey). We impute their margin percentages using the margin percentages of a similar, neighboring country. For Estonia and Lithuania, we use the Latvian margin percentages. For Ireland we use the UK margin percentages. For Norway and Sweden we use the Finnish margin percentages. For Germany we use the Austrian margin percentages. For Spain we use the Portuguese margin percentages, and finally, for Turkey we use the Bulgarian margin percentages. These countries appear to be close approximations based on examination of the 2010 values of another table; 'trade and transport margins in percentage of total supply at purchaser's prices.' The need to apply margin percentage data is a potential limitation of this method. If we relied on this method to produce main paper results, acquiring and applying more precise margin percentage data would arguably be a requirement.
```{r tableS9, tab.cap = "**Table S9: Same as Table S1 but now with base price shares of purchaser price per sector, and sectoral expenditure per income quintile in pps hh base price.**"}
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
bp_share_in_pp_sector_1 = c(0.5,0.5,0.5,0.5,0.5)
bp_share_in_pp_sector_2 = c(1,1,1,1,1)
hbs_bp = data.frame(quintile,
pps_hh,
pm_sector1,
pm_sector2,
bp_share_in_pp_sector_1,
bp_share_in_pp_sector_2) %>%
mutate(pps_hh_sector1 = pps_hh*(pm_sector1/1000),
pps_hh_sector1_bp = pps_hh_sector1*bp_share_in_pp_sector_1,
sector_1_shares = pps_hh_sector1/sum(pps_hh_sector1),
sector_1_shares_bp = pps_hh_sector1_bp/sum(pps_hh_sector1_bp),
pps_hh_sector2 = pps_hh*(pm_sector2/1000),
pps_hh_sector2_bp = pps_hh_sector2*bp_share_in_pp_sector_2,
sector_2_shares = pps_hh_sector2/sum(pps_hh_sector2),
sector_2_shares_bp = pps_hh_sector2_bp/sum(pps_hh_sector2_bp),
pps_hh_bp = pps_hh_sector1_bp + pps_hh_sector2_bp)
hbs_bp_pps = hbs_bp %>%
select(quintile,
pps_hh,
pm_sector1,
pm_sector2,
pps_hh_sector1,
bp_share_in_pp_sector_1,
pps_hh_sector1_bp,
pps_hh_sector2,
bp_share_in_pp_sector_2,
pps_hh_sector2_bp) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(hbs_bp_pps) %>%
autofit() %>%
set_header_labels(quintile = "quintile",
pps_hh = "pps hh",
pm_sector1 = "s1 (pm)",
pm_sector2 = "s2 (pm)",
pps_hh_sector1 = "s1 (pps hh)",
pps_hh_sector1_bp = "s1 (pps hh bp)",
pps_hh_sector2 = "s2 (pps hh)",
```{r tableS10, tab.cap = "**Table S10: Income quintile shares per sector in base price, with new 'pps hh' per income quintile in base price and new sectoral pm values in base price ('pps hh bp' is the sum of 's1 (pps hh bp)' and 's2 (pps hh bp)').**"}
hbs_bp_shares = hbs_bp %>%
select(quintile,
pps_hh_bp,
pps_hh_sector1_bp,
pps_hh_sector2_bp) %>%
mutate(pm_sector1_bp = (pps_hh_sector1_bp/(pps_hh_sector1_bp + pps_hh_sector2_bp))*1000,
pm_sector2_bp = (pps_hh_sector2_bp/(pps_hh_sector1_bp + pps_hh_sector2_bp))*1000) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(hbs_bp_shares) %>%
autofit() %>%
set_header_labels(quintile = "quintile",
pps_hh_bp = "pps hh bp",
pps_hh_sector1_bp = "s1 (pps hh bp)",
pps_hh_sector2_bp = "s2 (pps hh bp)",
pm_sector1_bp = "s1 (pm bp)",
pm_sector2_bp = "s2 (pm bp)") %>%
fit_to_width(max_width = 7.5)
```
Table S11 shows the HBS data on the left-hand side ('pps hh', 's1 (pm)' and 's2 (pm)') as before, but now the income quintile shares of mean consumption expenditure (the sum of 'pps hh') are calculated and shown as 'mean exp'. These shares are multiplied by total EE-MRIO household final demand expenditure, which in this case is 1100 (300 in sector 1 plus 800 in sector 2) (see Table S2), to calculate the amount of EE-MRIO household final demand expenditure per income quintile. These are then multiplied by the sectoral parts per mille shares to calculate EE-MRIO household final demand expenditure per sector and income quintile ('hh fd s1' and 'hh fd s2').
```{r tableS11, tab.cap = "**Table S11: Same as Table S9 but with total EE-MRIO household final demand in purchaser price instead of base price.**"}
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
quintile = c("q1","q2","q3","q4","q5")
pps_hh = c(9,11,16,25,28)
pm_sector1 = c(111,176,250,333,429)
pm_sector2 = c(889,824,750,667,571)
hbs_alt_method = data.frame(quintile,
pps_hh,
pm_sector1,
pm_sector2,
bp_share_in_pp_sector_1,
bp_share_in_pp_sector_2) %>%
mutate(mean_expenditure_share = pps_hh/sum(pps_hh),
eemrio_hh_fd = 1100*mean_expenditure_share,
hh_sector1 = eemrio_hh_fd*(pm_sector1/1000),
hh_sector1_bp = hh_sector1*bp_share_in_pp_sector_1,
hh_sector2 = eemrio_hh_fd*(pm_sector2/1000),
hh_sector2_bp = hh_sector2*bp_share_in_pp_sector_2)
hbs_alt_method_fd = hbs_alt_method %>%
select(quintile,
pps_hh,
pm_sector1,
pm_sector2,
mean_expenditure_share,
eemrio_hh_fd,
hh_sector1,
hh_sector2) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(hbs_alt_method_fd) %>%
autofit() %>%
set_header_labels(quintile = "quintile",
pps_hh = "pps hh",
pm_sector1 = "s1 (pm)",
pm_sector2 = "s2 (pm)",
mean_expenditure_share = "mean exp",
eemrio_hh_fd = "eemrio hh fd",
hh_sector1 = "hh fd s1",
hh_sector2 = "hh fd s2") %>%
fit_to_width(max_width = 7.5)
```
Table S12 shows that we then have our EE-MRIO household final demand expenditure decomposed by income quintile.
```{r tableS12, tab.cap = "**Table S12: EE-MRIO household final demand per quintile and sector.**"}
eemrio_alt_method = hbs_alt_method %>%
select(quintile,hh_sector1,hh_sector2) %>%
gather(sector,value,-quintile) %>%
spread(quintile,value) %>%
mutate(sector = dplyr::recode(sector,
"hh_sector1" = "1",
"hh_sector2" = "2")) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(eemrio_alt_method) %>%
autofit() %>%
set_header_labels(sector = "sector",
q1 = "q1 fd",
q2 = "q2 fd",
q3 = "q3 fd",
q4 = "q4 fd",
q5 = "q5 fd") %>%
If we now multiply this by the 'direct and indirect supply chain' intensity vector ('TIV'), we calculate the footprint decomposed by income quintile, but our total footprint is different than in the other methodology because now different amounts of EE-MRIO household final demand expenditure per sector are being multiplied by the same 'direct and indirect supply chain' intensity vector as previously calculated inside the EE-MRIO (compare Table S13 with Table S3).
```{r tableS13, tab.cap = "**Table S13: EE-MRIO household final demand per quintile and sector multiplied by the TIV to calculate footprint per quintile and sector.**"}
footprint_alt_method = data.frame(eemrio_alt_method, TIV) %>%
mutate(q1_footprint = q1*TIV,
q2_footprint = q2*TIV,
q3_footprint = q3*TIV,
q4_footprint = q4*TIV,
q5_footprint = q5*TIV,
total_footprint = q1_footprint +
q2_footprint +
q3_footprint +
q4_footprint +
q5_footprint) %>%
mutate_if(is.numeric, round, digits = 2)
flextable(footprint_alt_method) %>%
autofit() %>%
set_header_labels(sector = "sector",
q1 = "q1 fd",
q2 = "q2 fd",
q3 = "q3 fd",
q4 = "q4 fd",
q5 = "q5 fd",
TIV = "TIV",
q1_footprint = "q1 fp",
q2_footprint = "q2 fp",
q3_footprint = "q3 fp",
q4_footprint = "q4 fp",
q5_footprint = "q5 fp",
total_footprint = "total fp") %>%
```
# Supplementary Results
We ran the same analysis for the years 2015, 2010 and 2005. We presented only 2015 in the main paper as we focused more on the distributional aspect of the environmental footprints and their relationship to decarbonisation scenarios and minimum energy, rather than the time component. As mentioned in the 'limitations' section above, caution is needed when comparing the EUROSTAT HBS data over time, as well as the version of EXIOBASE we used (version3, industry-by-industry). We also estimated the environmental footprints per European expenditure decile using the product-by-product version of EXIOBASE for the year 2010, and then the year 2015 again using the alternative methodology that was explained in the supplementary methods sections in this document above.
We show each of these in turn in the format of Figure 1 from the main paper: 1) the year 2005 using the main paper method and EXIOBASE industry-by-industry version, then 2) the year 2010 using the main paper method and EXIOBASE industry-by-industry version, 3) the year 2010 using the main paper method but EXIOBASE product-by-product version, and finally 4) the year 2015 using an alternative methodology and EXIOBASE industry-by-industry version.
## 2005 using main method, EXIOBASE industry-by-industry
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
## load result data for EU deciles
eu_q_count = 10
# summary countries aggregated by country quintiles and eu ntile
dat_country_summary_by_cquint_and_euntile = get_country_summary_by_cquint_and_euntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank")
pdat_country_summary_by_cquint_and_euntile =
pivot_results_longer_adorn(dat_country_summary_by_cquint_and_euntile, cols_ex)
# summary of countries by EU quantile without sectoral resolution
dat_country_summary_by_eu_ntile = get_country_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "eu_q_rank")
pdat_country_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_country_summary_by_eu_ntile, cols_ex)
# summary of countries by country quintile with aggregate sectoral resolution
dat_sector_summary_by_country_quintile = get_sector_summary_by_country_quintile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank", "sector_agg_id")
pdat_sector_summary_by_country_quintile =
pivot_results_longer_adorn(dat_sector_summary_by_country_quintile, cols_ex)
# summary of eu ntile with aggregate sectoral resolution
dat_sector_summary_by_eu_ntile = get_sector_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "eu_q_rank", "sector_agg_id")
pdat_sector_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_sector_summary_by_eu_ntile, cols_ex)
```
p1 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Expenditure (trn€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy footprint (EJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p3 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon footprint (MtCO2eq)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p1 = dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_co2eq_kg)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
group_by(eu_q_rank) %>%
summarise(pe_co2eq_kg = weighted.mean(pe_co2eq_kg,total_fd_me)),
aes(y=pe_co2eq_kg, yend=pe_co2eq_kg, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per expenditure (kgCO2eq/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_energy_use_mj)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me)),
aes(y=pe_energy_use_mj, yend=pe_energy_use_mj, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy intensity per expenditure (MJ/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
dat3 = dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj)
p3 = dat3 %>%
ggplot(aes(x=factor(eu_q_rank), y=intensity_e_c)) +
geom_violin(aes(weight=total_energy_use_tj), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat3 %>%
filter(year == 2005) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj)),
aes(y=intensity_e_c, yend=intensity_e_c, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per energy (gCO2eq/TJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
```{r values-in-text-2005-ixi}
# values in text
## inequality
exp = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name))
exp_10_10 = round((exp %>% filter(eu_q_rank == 10))$value/(exp %>% filter(eu_q_rank == 1))$value,digits = 1)
energy = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name))
energy_total = (energy %>% summarise(value = sum(value)))$value
energy_10_10 = round((energy %>% filter(eu_q_rank == 10))$value/(energy %>% filter(eu_q_rank == 1))$value,digits = 1)
co2eq = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name))
co2eq_total = (co2eq %>% summarise(value = sum(value)))$value
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
co2eq_10_10 = round((co2eq %>% filter(eu_q_rank == 10))$value/(co2eq %>% filter(eu_q_rank == 1))$value,digits = 1)
## total per decile
exp_bottom_decile = round((exp %>% filter(eu_q_rank == 1))$value, digits = 1)
exp_top_decile = round((exp %>% filter(eu_q_rank == 10))$value, digits = 1)
energy_bottom_decile = round((energy %>% filter(eu_q_rank == 1))$value, digits = 1)
energy_top_decile = round((energy %>% filter(eu_q_rank == 10))$value, digits = 1)
co2eq_bottom_decile = round((co2eq %>% filter(eu_q_rank == 1))$value, digits = 1)
co2eq_top_decile = round((co2eq %>% filter(eu_q_rank == 10))$value, digits = 1)
## per adult equivalent per decile
aeu = pdat_country_summary_by_eu_ntile %>%
filter(year == 2005,
indicator == "total_adult_eq") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value),
eu_ntile_name = first(eu_ntile_name))
exp_pae = exp %>%
rename(total_fd_me = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_fd_e = (total_fd_me/value)*1000000000000)
fd_pae_bottom_decile = round((exp_pae %>% filter(eu_q_rank == 1))$pae_fd_e, digits = 0)
fd_pae_top_decile = round((exp_pae %>% filter(eu_q_rank == 10))$pae_fd_e, digits = 0)
energy_pae = energy %>%
rename(total_energy_use_tj = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_energy_use_gj = (total_energy_use_tj/value)*1000000000)
energy_pae_bottom_decile = round((energy_pae %>% filter(eu_q_rank == 1))$pae_energy_use_gj, digits = 1)
energy_pae_top_decile = round((energy_pae %>% filter(eu_q_rank == 10))$pae_energy_use_gj, digits = 1)
co2eq_pae = co2eq %>%
rename(total_co2eq_kg = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_co2eq_t = (total_co2eq_kg/value)*1000000)
co2eq_pae_bottom_decile = round((co2eq_pae %>% filter(eu_q_rank == 1))$pae_co2eq_t, digits = 1)
co2eq_pae_top_decile = round((co2eq_pae %>% filter(eu_q_rank == 10))$pae_co2eq_t, digits = 1)
## intensities
mean_energy_intens = dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me))
mean_energy_intens_bottom_decile = round((mean_energy_intens %>% filter(eu_q_rank == 1))$pe_energy_use_mj, digits = 1)
mean_energy_intens_top_decile = round((mean_energy_intens %>% filter(eu_q_rank == 10))$pe_energy_use_mj, digits = 1)
mean_co2eq_of_energy_intens = dat_country_summary_by_eu_ntile %>%
filter(year == 2005) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj))
mean_co2eq_of_energy_intens_bottom_decile = round((mean_co2eq_of_energy_intens %>% filter(eu_q_rank == 1))$intensity_e_c, digits = 1)
mean_co2eq_of_energy_intens_top_decile = round((mean_co2eq_of_energy_intens %>% filter(eu_q_rank == 10))$intensity_e_c, digits = 1)
```
In 2005, total household final demand was `r exp_total` trn€, the energy footprint `r energy_total` EJ, and the carbon footprint `r co2eq_total` MtCO2eq. We estimated the 10:10 ratios at `r exp_10_10` for expenditure, `r energy_10_10` for the energy footprint, and `r co2eq_10_10` for the carbon footprint. Total expenditure ranged from `r exp_bottom_decile` trn€ to `r exp_top_decile` trn€ (or `r fd_pae_bottom_decile`€ to `r fd_pae_top_decile`€ per adult equivalent) across bottom and top decile, the energy footprint from `r energy_bottom_decile` EJ to `r energy_top_decile` EJ (or `r energy_pae_bottom_decile` GJ/ae to `r energy_pae_top_decile` GJ/ae), and the GHG footprint from `r co2eq_bottom_decile` MtCO2eq to `r co2eq_top_decile` MtCO2eq (or `r co2eq_pae_bottom_decile` tCO2eq/ae to `r co2eq_pae_top_decile` tCO2eq/ae). The average energy intensity of consumption was `r mean_energy_intens_bottom_decile` MJ/€ in the bottom decile and `r mean_energy_intens_top_decile` MJ/€ in the top decile. The GHG intensity of energy use was `r mean_co2eq_of_energy_intens_bottom_decile` gCO2eq/TJ in the bottom decile, and `r mean_co2eq_of_energy_intens_top_decile` gCO2eq/TJ in the top decile.
```{r figureS1-test, fig.width=12, fig.height=8, out.width="98%", fig.cap="**Figure S1: Expenditure and resource footprints and intensities across European expenditure deciles in 2005. Total expenditures (a), energy footprint (b), and GHG footprint (c) per decile. Energy intensity as energy footprint per expenditure (d), GHG intensity as GHG footprint per expenditure (e), and GHG intensity as GHG footprint per energy footprint (f).**"}
a = p_top / p_bottom + plot_annotation(tag_levels = 'a') +
plot_layout(guides = 'collect') &
theme(plot.margin = unit(c(0.25,0.25,0.25,0.25), "cm"),
legend.position = 'bottom',
axis.title.y = element_text(size=13, hjust = 0.5),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size=12),
legend.title = element_text(size=13))
a
ggsave(here("analysis", "figures", "figureS1.pdf"), device=cairo_pdf)
```
## 2010 using main method, EXIOBASE industry-by-industry
p1 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Expenditure (trn€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy footprint (EJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p3 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon footprint (MtCO2eq)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p1 = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_co2eq_kg)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(pe_co2eq_kg = weighted.mean(pe_co2eq_kg,total_fd_me)),
aes(y=pe_co2eq_kg, yend=pe_co2eq_kg, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per expenditure (kgCO2eq/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_energy_use_mj)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me)),
aes(y=pe_energy_use_mj, yend=pe_energy_use_mj, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy intensity per expenditure (MJ/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
dat3 = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj)
p3 = dat3 %>%
ggplot(aes(x=factor(eu_q_rank), y=intensity_e_c)) +
geom_violin(aes(weight=total_energy_use_tj), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat3 %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj)),
aes(y=intensity_e_c, yend=intensity_e_c, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per energy (gCO2eq/TJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
```{r values-in-text-2010-ixi}
# values in text
## inequality
exp = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name))
exp_total = (exp %>% summarise(value = sum(value)))$value
exp_10_10 = round((exp %>% filter(eu_q_rank == 10))$value/(exp %>% filter(eu_q_rank == 1))$value,digits = 1)
energy = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name))
energy_total = (energy %>% summarise(value = sum(value)))$value
energy_10_10 = round((energy %>% filter(eu_q_rank == 10))$value/(energy %>% filter(eu_q_rank == 1))$value,digits = 1)
co2eq = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name))
co2eq_total = (co2eq %>% summarise(value = sum(value)))$value
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
co2eq_10_10 = round((co2eq %>% filter(eu_q_rank == 10))$value/(co2eq %>% filter(eu_q_rank == 1))$value,digits = 1)
## total per decile
exp_bottom_decile = round((exp %>% filter(eu_q_rank == 1))$value, digits = 1)
exp_top_decile = round((exp %>% filter(eu_q_rank == 10))$value, digits = 1)
energy_bottom_decile = round((energy %>% filter(eu_q_rank == 1))$value, digits = 1)
energy_top_decile = round((energy %>% filter(eu_q_rank == 10))$value, digits = 1)
co2eq_bottom_decile = round((co2eq %>% filter(eu_q_rank == 1))$value, digits = 1)
co2eq_top_decile = round((co2eq %>% filter(eu_q_rank == 10))$value, digits = 1)
## per adult equivalent per decile
aeu = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_adult_eq") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value),
eu_ntile_name = first(eu_ntile_name))
exp_pae = exp %>%
rename(total_fd_me = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_fd_e = (total_fd_me/value)*1000000000000)
fd_pae_bottom_decile = round((exp_pae %>% filter(eu_q_rank == 1))$pae_fd_e, digits = 0)
fd_pae_top_decile = round((exp_pae %>% filter(eu_q_rank == 10))$pae_fd_e, digits = 0)
energy_pae = energy %>%
rename(total_energy_use_tj = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_energy_use_gj = (total_energy_use_tj/value)*1000000000)
energy_pae_bottom_decile = round((energy_pae %>% filter(eu_q_rank == 1))$pae_energy_use_gj, digits = 1)
energy_pae_top_decile = round((energy_pae %>% filter(eu_q_rank == 10))$pae_energy_use_gj, digits = 1)
co2eq_pae = co2eq %>%
rename(total_co2eq_kg = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_co2eq_t = (total_co2eq_kg/value)*1000000)
co2eq_pae_bottom_decile = round((co2eq_pae %>% filter(eu_q_rank == 1))$pae_co2eq_t, digits = 1)
co2eq_pae_top_decile = round((co2eq_pae %>% filter(eu_q_rank == 10))$pae_co2eq_t, digits = 1)
## intensities
mean_energy_intens = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me))
mean_energy_intens_bottom_decile = round((mean_energy_intens %>% filter(eu_q_rank == 1))$pe_energy_use_mj, digits = 1)
mean_energy_intens_top_decile = round((mean_energy_intens %>% filter(eu_q_rank == 10))$pe_energy_use_mj, digits = 1)
mean_co2eq_of_energy_intens = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj))
mean_co2eq_of_energy_intens_bottom_decile = round((mean_co2eq_of_energy_intens %>% filter(eu_q_rank == 1))$intensity_e_c, digits = 1)
mean_co2eq_of_energy_intens_top_decile = round((mean_co2eq_of_energy_intens %>% filter(eu_q_rank == 10))$intensity_e_c, digits = 1)
```
In 2010, total household final demand was `r exp_total` trn€, the energy footprint `r energy_total` EJ, and the carbon footprint `r co2eq_total` MtCO2eq. We estimated the 10:10 ratios at `r exp_10_10` for expenditure, `r energy_10_10` for the energy footprint, and `r co2eq_10_10` for the carbon footprint. Total expenditure ranged from `r exp_bottom_decile` trn€ to `r exp_top_decile` trn€ (or `r fd_pae_bottom_decile`€ to `r fd_pae_top_decile`€ per adult equivalent) across bottom and top decile, the energy footprint from `r energy_bottom_decile` EJ to `r energy_top_decile` EJ (or `r energy_pae_bottom_decile` GJ/ae to `r energy_pae_top_decile` GJ/ae), and the GHG footprint from `r co2eq_bottom_decile` MtCO2eq to `r co2eq_top_decile` MtCO2eq (or `r co2eq_pae_bottom_decile` tCO2eq/ae to `r co2eq_pae_top_decile` tCO2eq/ae). The average energy intensity of consumption was `r mean_energy_intens_bottom_decile` MJ/€ in the bottom decile and `r mean_energy_intens_top_decile` MJ/€ in the top decile. The GHG intensity of energy use was `r mean_co2eq_of_energy_intens_bottom_decile` gCO2eq/TJ in the bottom decile, and `r mean_co2eq_of_energy_intens_top_decile` gCO2eq/TJ in the top decile.
```{r figureS2-test, fig.width=12, fig.height=8, out.width="98%", fig.cap="**Figure S2: Expenditure and resource footprints and intensities across European expenditure deciles in 2010. Total expenditures (a), energy footprint (b), and GHG footprint (c) per decile. Energy intensity as energy footprint per expenditure (d), GHG intensity as GHG footprint per expenditure (e), and GHG intensity as GHG footprint per energy footprint (f).**"}
a = p_top / p_bottom + plot_annotation(tag_levels = 'a') +
plot_layout(guides = 'collect') &
theme(plot.margin = unit(c(0.25,0.25,0.25,0.25), "cm"),
legend.position = 'bottom',
axis.title.y = element_text(size=13, hjust = 0.5),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size=12),
legend.title = element_text(size=13))
ggsave(here("analysis", "figures", "figureS2.pdf"), device=cairo_pdf)
```
## 2010 using main method, EXIOBASE product-by-product
source(here("analysis", "R", "si", "wrangler_functions_pxp.R"))
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
## load result data for EU deciles
eu_q_count = 10
# summary countries aggregated by country quintiles and eu ntile
dat_country_summary_by_cquint_and_euntile = get_country_summary_by_cquint_and_euntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank")
pdat_country_summary_by_cquint_and_euntile =
pivot_results_longer_adorn(dat_country_summary_by_cquint_and_euntile, cols_ex)
# summary of countries by EU quantile without sectoral resolution
dat_country_summary_by_eu_ntile = get_country_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "eu_q_rank")
pdat_country_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_country_summary_by_eu_ntile, cols_ex)
# summary of countries by country quintile with aggregate sectoral resolution
dat_sector_summary_by_country_quintile = get_sector_summary_by_country_quintile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank", "sector_agg_id")
pdat_sector_summary_by_country_quintile =
pivot_results_longer_adorn(dat_sector_summary_by_country_quintile, cols_ex)
# summary of eu ntile with aggregate sectoral resolution
dat_sector_summary_by_eu_ntile = get_sector_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "eu_q_rank", "sector_agg_id")
pdat_sector_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_sector_summary_by_eu_ntile, cols_ex)
```
p1 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Expenditure (trn€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy footprint (EJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p3 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon footprint (MtCO2eq)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p1 = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_co2eq_kg)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(pe_co2eq_kg = weighted.mean(pe_co2eq_kg,total_fd_me)),
aes(y=pe_co2eq_kg, yend=pe_co2eq_kg, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per expenditure (kgCO2eq/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_energy_use_mj)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me)),
aes(y=pe_energy_use_mj, yend=pe_energy_use_mj, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy intensity per expenditure (MJ/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
dat3 = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj)
p3 = dat3 %>%
ggplot(aes(x=factor(eu_q_rank), y=intensity_e_c)) +
geom_violin(aes(weight=total_energy_use_tj), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat3 %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj)),
aes(y=intensity_e_c, yend=intensity_e_c, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per energy (gCO2eq/TJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
```{r values-in-text-2010-pxp}
# values in text
## inequality
exp = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name))
exp_total = (exp %>% summarise(value = sum(value)))$value
exp_10_10 = round((exp %>% filter(eu_q_rank == 10))$value/(exp %>% filter(eu_q_rank == 1))$value,digits = 1)
energy = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name))
energy_total = (energy %>% summarise(value = sum(value)))$value
energy_10_10 = round((energy %>% filter(eu_q_rank == 10))$value/(energy %>% filter(eu_q_rank == 1))$value,digits = 1)
co2eq = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name))
co2eq_total = (co2eq %>% summarise(value = sum(value)))$value
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
co2eq_10_10 = round((co2eq %>% filter(eu_q_rank == 10))$value/(co2eq %>% filter(eu_q_rank == 1))$value,digits = 1)
## total per decile
exp_bottom_decile = round((exp %>% filter(eu_q_rank == 1))$value, digits = 1)
exp_top_decile = round((exp %>% filter(eu_q_rank == 10))$value, digits = 1)
energy_bottom_decile = round((energy %>% filter(eu_q_rank == 1))$value, digits = 1)
energy_top_decile = round((energy %>% filter(eu_q_rank == 10))$value, digits = 1)
co2eq_bottom_decile = round((co2eq %>% filter(eu_q_rank == 1))$value, digits = 1)
co2eq_top_decile = round((co2eq %>% filter(eu_q_rank == 10))$value, digits = 1)
## per adult equivalent per decile
aeu = pdat_country_summary_by_eu_ntile %>%
filter(year == 2010,
indicator == "total_adult_eq") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value),
eu_ntile_name = first(eu_ntile_name))
exp_pae = exp %>%
rename(total_fd_me = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_fd_e = (total_fd_me/value)*1000000000000)
fd_pae_bottom_decile = round((exp_pae %>% filter(eu_q_rank == 1))$pae_fd_e, digits = 0)
fd_pae_top_decile = round((exp_pae %>% filter(eu_q_rank == 10))$pae_fd_e, digits = 0)
energy_pae = energy %>%
rename(total_energy_use_tj = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_energy_use_gj = (total_energy_use_tj/value)*1000000000)
energy_pae_bottom_decile = round((energy_pae %>% filter(eu_q_rank == 1))$pae_energy_use_gj, digits = 1)
energy_pae_top_decile = round((energy_pae %>% filter(eu_q_rank == 10))$pae_energy_use_gj, digits = 1)
co2eq_pae = co2eq %>%
rename(total_co2eq_kg = value) %>%
left_join(aeu, by = c("eu_q_rank", "eu_ntile_name")) %>%
mutate(pae_co2eq_t = (total_co2eq_kg/value)*1000000)
co2eq_pae_bottom_decile = round((co2eq_pae %>% filter(eu_q_rank == 1))$pae_co2eq_t, digits = 1)
co2eq_pae_top_decile = round((co2eq_pae %>% filter(eu_q_rank == 10))$pae_co2eq_t, digits = 1)
## intensities
mean_energy_intens = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me))
mean_energy_intens_bottom_decile = round((mean_energy_intens %>% filter(eu_q_rank == 1))$pe_energy_use_mj, digits = 1)
mean_energy_intens_top_decile = round((mean_energy_intens %>% filter(eu_q_rank == 10))$pe_energy_use_mj, digits = 1)
mean_co2eq_of_energy_intens = dat_country_summary_by_eu_ntile %>%
filter(year == 2010) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj))
mean_co2eq_of_energy_intens_bottom_decile = round((mean_co2eq_of_energy_intens %>% filter(eu_q_rank == 1))$intensity_e_c, digits = 1)
mean_co2eq_of_energy_intens_top_decile = round((mean_co2eq_of_energy_intens %>% filter(eu_q_rank == 10))$intensity_e_c, digits = 1)
```
In 2010 but using the product-by-product version of EXIOBASE, total household final demand was `r exp_total` trn€, the energy footprint `r energy_total` EJ, and the GHG footprint `r co2eq_total` MtCO2eq. We estimated the 10:10 ratios at `r exp_10_10` for expenditure, `r energy_10_10` for the energy footprint, and `r co2eq_10_10` for the carbon footprint. Total expenditure ranged from `r exp_bottom_decile` trn€ to `r exp_top_decile` trn€ (or `r fd_pae_bottom_decile`€ to `r fd_pae_top_decile`€ per adult equivalent) across bottom and top decile, the energy footprint from `r energy_bottom_decile` EJ to `r energy_top_decile` EJ (or `r energy_pae_bottom_decile` GJ/ae to `r energy_pae_top_decile` GJ/ae), and the GHG footprint from `r co2eq_bottom_decile` MtCO2eq to `r co2eq_top_decile` MtCO2eq (or `r co2eq_pae_bottom_decile` tCO2eq/ae to `r co2eq_pae_top_decile` tCO2eq/ae). The average energy intensity of consumption was `r mean_energy_intens_bottom_decile` MJ/€ in the bottom decile and `r mean_energy_intens_top_decile` MJ/€ in the top decile. The GHG intensity of energy use was `r mean_co2eq_of_energy_intens_bottom_decile` gCO2eq/TJ in the bottom decile, and `r mean_co2eq_of_energy_intens_top_decile` gCO2eq/TJ in the top decile.
```{r figureS3-test, fig.width=12, fig.height=8, out.width="98%", fig.cap="**Figure S3: Expenditure and resource footprints and intensities across European expenditure deciles in 2010 (product-by-product EXIOBASE version). Total expenditures (a), energy footprint (b), and GHG footprint (c) per decile. Energy intensity as energy footprint per expenditure (d), GHG intensity as GHG footprint per expenditure (e), and GHG intensity as GHG footprint per energy footprint (f).**"}
a = p_top / p_bottom + plot_annotation(tag_levels = 'a') +
plot_layout(guides = 'collect') &
theme(plot.margin = unit(c(0.25,0.25,0.25,0.25), "cm"),
legend.position = 'bottom',
axis.title.y = element_text(size=13, hjust = 0.5),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size=12),
legend.title = element_text(size=13))
ggsave(here("analysis", "figures", "figureS3.pdf"), device=cairo_pdf)
## 2015 using alternative method, EXIOBASE industry-by-industry
There is relatively good agreement between the alternative method footprints and the EXIOBASE footprints, except in Bulgaria, where the alternative method footprint was around 3 times larger. Including Bulgaria, the alternative method footprints were on average 20% larger than the EXIOBASE footprints. With Bulgaria removed they were 10% larger on average. Eastern European countries especially had larger alternative method footprints due to high intensities in electricity production and hot water supply especially, and then more expenditure in CP045 multiplied by these intensities than the expenditure in EXIOBASE. This is why the figure shows such high footprints in the bottom European deciles compared to the method keeping EXIOBASE footprints the same (ms results).
source(here("analysis", "R", "si", "wrangler_functions_method2_ixi.R"))
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
## load result data for EU deciles
eu_q_count = 10
# summary countries aggregated by country quintiles and eu ntile
dat_country_summary_by_cquint_and_euntile = get_country_summary_by_cquint_and_euntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank")
pdat_country_summary_by_cquint_and_euntile =
pivot_results_longer_adorn(dat_country_summary_by_cquint_and_euntile, cols_ex)
# summary of countries by EU quantile without sectoral resolution
dat_country_summary_by_eu_ntile = get_country_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "eu_q_rank")
pdat_country_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_country_summary_by_eu_ntile, cols_ex)
# summary of countries by country quintile with aggregate sectoral resolution
dat_sector_summary_by_country_quintile = get_sector_summary_by_country_quintile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank", "coicop")
pdat_sector_summary_by_country_quintile =
pivot_results_longer_adorn(dat_sector_summary_by_country_quintile, cols_ex)
# summary of eu ntile with aggregate sectoral resolution
dat_sector_summary_by_eu_ntile = get_sector_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "eu_q_rank", "coicop")
pdat_sector_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_sector_summary_by_eu_ntile, cols_ex)
```
p1 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2015,
indicator == "total_fd_me") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Expenditure (trn€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2015,
indicator == "total_energy_use_tj") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy footprint (EJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p3 = pdat_country_summary_by_eu_ntile %>%
filter(year == 2015,
indicator == "total_co2eq_kg") %>%
group_by(eu_q_rank) %>%
summarise(value = sum(value)*0.000000001,
eu_ntile_name = first(eu_ntile_name)) %>%
ggplot(aes(x=eu_ntile_name, y=value)) +
geom_col(position = position_dodge(), fill=pal[1]) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon footprint (MtCO2eq)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p1 = dat_country_summary_by_eu_ntile %>%
filter(year == 2015) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_co2eq_kg)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2015) %>%
group_by(eu_q_rank) %>%
summarise(pe_co2eq_kg = weighted.mean(pe_co2eq_kg,total_fd_me)),
aes(y=pe_co2eq_kg, yend=pe_co2eq_kg, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per expenditure (kgCO2eq/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
p2 = dat_country_summary_by_eu_ntile %>%
filter(year == 2015) %>%
ggplot(aes(x=factor(eu_q_rank), y=pe_energy_use_mj)) +
geom_violin(aes(weight=total_fd_me), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat_country_summary_by_eu_ntile %>%
filter(year == 2015) %>%
group_by(eu_q_rank) %>%
summarise(pe_energy_use_mj = weighted.mean(pe_energy_use_mj,total_fd_me)),
aes(y=pe_energy_use_mj, yend=pe_energy_use_mj, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Energy intensity per expenditure (MJ/€)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
dat3 = dat_country_summary_by_eu_ntile %>%
filter(year == 2015) %>%
mutate(intensity_e_c = total_co2eq_kg*0.001/total_energy_use_tj)
p3 = dat3 %>%
ggplot(aes(x=factor(eu_q_rank), y=intensity_e_c)) +
geom_violin(aes(weight=total_energy_use_tj), fill=pal[1], color=pal[1], alpha=0.5) +
geom_point( alpha=0.3) +
geom_segment(data=dat3 %>%
filter(year == 2015) %>%
group_by(eu_q_rank) %>%
summarise(intensity_e_c = weighted.mean(intensity_e_c,total_energy_use_tj)),
aes(y=intensity_e_c, yend=intensity_e_c, x=eu_q_rank-0.3, xend=eu_q_rank+0.3), size=1.5) +
theme_minimal() +
theme(text=element_text(family="Liberation Sans Narrow")) +
labs(x="", y="Carbon intensity per energy (gCO2eq/TJ)") +
theme(axis.text.x = element_text(angle = 90)) +
scale_x_discrete(labels = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10"))
```{r figureS4-test, fig.width=12, fig.height=8, out.width="98%", fig.cap="**Figure S4: Expenditure and resource footprints and intensities across European expenditure deciles in 2015 (EXIOBASE industry-by-industry version, but using alternative method). Total expenditures (a), energy footprint (b), and GHG footprint (c) per decile. Energy intensity as energy footprint per expenditure (d), GHG intensity as GHG footprint per expenditure (e), and GHG intensity as GHG footprint per energy footprint (f).**"}
a = p_top / p_bottom + plot_annotation(tag_levels = 'a') +
plot_layout(guides = 'collect') &
theme(plot.margin = unit(c(0.25,0.25,0.25,0.25), "cm"),
legend.position = 'bottom',
axis.title.y = element_text(size=13, hjust = 0.5),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size=12),
legend.title = element_text(size=13))
ggsave(here("analysis", "figures", "figureS4.pdf"), device=cairo_pdf)
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
```{r load-data4, include=FALSE}
# load data wrangling functions
source(here("analysis", "R", "wrangler_functions.R"))
## load result data for EU deciles
eu_q_count = 10
# summary countries aggregated by country quintiles and eu ntile
dat_country_summary_by_cquint_and_euntile = get_country_summary_by_cquint_and_euntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank")
pdat_country_summary_by_cquint_and_euntile =
pivot_results_longer_adorn(dat_country_summary_by_cquint_and_euntile, cols_ex)
# summary of countries by EU quantile without sectoral resolution
dat_country_summary_by_eu_ntile = get_country_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "eu_q_rank")
pdat_country_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_country_summary_by_eu_ntile, cols_ex)
# summary of countries by country quintile with aggregate sectoral resolution
dat_sector_summary_by_country_quintile = get_sector_summary_by_country_quintile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "iso2", "quint", "eu_q_rank", "sector_agg_id")
pdat_sector_summary_by_country_quintile =
pivot_results_longer_adorn(dat_sector_summary_by_country_quintile, cols_ex)
# summary of eu ntile with aggregate sectoral resolution
dat_sector_summary_by_eu_ntile = get_sector_summary_by_eu_ntile(eu_q_count)
# pivot to long format for plotting and attach readable indicator names
cols_ex = c("year", "eu_q_rank", "sector_agg_id")
pdat_sector_summary_by_eu_ntile =
pivot_results_longer_adorn(dat_sector_summary_by_eu_ntile, cols_ex)
```
dat_adult_eq = read_csv(here("analysis", "data", "derived", "si", "adult_eq_per_household.csv")) %>%
filter(year==2015)
dat_tmp = dat_country_summary_by_cquint_and_euntile %>%
filter(year == 2015) %>%
left_join(dat_adult_eq %>%
select(iso2, iso3, quint, adult_e_p_hh), by=c("iso2", "quint"))
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
europe28 = c("AUT",
"BEL",
"BGR",
"CYP",
"CZE",
"DEU",
"DNK",
"EST",
"GRC",
"ESP",
"FIN",
"FRA",
"HRV",
"HUN",
"IRL",
"LTU",
"LVA",
"MLT",
"NLD",
"NOR",
"POL",
"PRT",
"ROU",
"SWE",
"SVN",
"SVK",
"TUR",
"GBR")
population = wbstats::wb(country = europe28,
indicator = "SP.POP.TOTL",
startdate = 1990, enddate = 2017) %>%
select(iso3 = iso3c, population = value, year = date) %>%
mutate(year = parse_number(year))
dat_people_per_adult_eq = dat_tmp %>%
ungroup() %>%
select(year, iso2, iso3, quint, total_adult_eq) %>%
group_by(year, iso2, iso3) %>%
summarise(total_adult_eq = sum(total_adult_eq)) %>%
left_join(population, by = c("year","iso3")) %>%
mutate(pop_per_ae = population/total_adult_eq) %>%
ungroup() %>%
select(iso2, pop_per_ae)
dat_tmp2 = dat_tmp %>%
left_join(dat_people_per_adult_eq, by = "iso2") %>%
mutate(pop_estimate_per_quintile = total_adult_eq*pop_per_ae) %>%
ungroup() %>%
select(iso2,iso3,quint,eu_q_rank,
eu_ntile_name = c("D01","D02","D03","D04","D05","D06","D07","D08","D09","D10")
a_tmp = dat_tmp2 %>%
group_by(eu_q_rank) %>%
summarise(total_population = sum(total_population)) %>%
cbind(eu_ntile_name)
group_by(eu_q_rank) %>%
summarise(total_adult_eq = sum(total_adult_eq),
total_population = sum(total_population)) %>%
cbind(eu_ntile_name) %>%
pivot_longer(cols = c(-eu_q_rank,-eu_ntile_name), names_to = "indicator", values_to="value") %>%
mutate(indicator = dplyr::recode(indicator,
"total_adult_eq" = "Adult equivalents",
"total_population" = "Total population")) %>%
mutate(value = value/1000000)
```
```{r values-in-text-ae-vs-pop}
ae_vs_pop = dat_tmp2 %>%
summarise(total_adult_eq = sum(total_adult_eq),
total_population = sum(total_population))
ae_share_of_pop = ae_vs_pop$total_adult_eq/ae_vs_pop$total_population
```
Through the main paper we use household per adult equivalent as our unit of analysis, following the EUROSTAT HBS. This meant that we adjusted decarbonisation scenario final energy numbers from total per capita to household per adult equivalent to better compare them with our environmental footprint estimates. We adjusted them for 1) the household share of the total footprint, and 2) the adult equivalent share of the total population.
As a numerical example, we adjust a total final energy of 53 GJ per capita from the LED scenario (Grubler et al. (2018) [@grubler_low_2018]), first by the household share of the total European energy footprint in 2015 (around 0.62, calculated in EXIOBASE), and then the share of total adult equivalents in the total European population in 2015 (also around `r ae_share_of_pop`, calculated using the EUROSTAT HBS, number of households per country, and population data per country). A total final energy of 53 GJ/capita is therefore adjusted to a household final energy of 53 GJ/adult equivalent in Europe ((53 total GJ/capita * 0.62 household share of total footprint)/0.62 adult equivalent share of total population = 53 household GJ/adult equivalent).
Our European expenditure deciles were constructed having the exact same number of adult equivalents per decile. When comparing with external per capita numbers, however, there are not the same number of population per decile because of differences in non-adult-equivalent-normalized people per household between income quintiles per country, and between countries. In Figure Sx we show an estimate of population per European expenditure decile. We use this to re-estimate our energy footprint per European expenditure decile in per capita terms, and then re-create Figure 5 from the main paper (Figure Sxx below) in per capita terms.
Because we have the number of adult equivalents per country, and the total population per country, we could use both to calculate the total population per adult equivalent ratio for each country. We applied these ratio to the adult equivalents from different countries making up each European expenditure decile, as so we could estimate total population per European expenditure decile taking into account differences in household per capita between countries, but not between income quintiles within each country. Figure Sx shows these population estimates per European expenditure decile.
```{r figureSx, fig.cap="**Figure S5:**"}
ggplot(a, aes(x=factor(eu_ntile_name), y=value)) +
geom_col() +
ylab("number (in millions)") +
xlab("") +
facet_wrap(~indicator, scales="free_y") +
theme_ipsum() +
theme(axis.text.x = element_text(angle = 90))
ggsave(here("analysis", "figures", "figureSx.pdf"), device=cairo_pdf)
```
## Figure 5 from manuscript in household final energy per capita
Here we re-create Figure 5 from the main paper after estimating our energy footprint per European expenditure decile in per capita terms (using the population per decile estimates from above), instead of per adult equivalent terms. Now we only adjust the decarbonisation scenario final energy numbers from total GJ per capita to household GJ per capita, so 53 total GJ/capita becomes: 53 * 0.62 = 33 household GJ/capita.
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
```{r }
pdat_int_energy = get_sector_summary_by_eu_ntile_direct(eu_q_count) %>%
ungroup() %>%
filter(year==2015) %>%
left_join(read_csv(here("analysis/data/derived/sectors_agg_method1_ixi.csv")),
by="sector_agg_id") %>%
mutate(intensity_energy = (total_energy_use_tj)/(total_fd_me)) %>%
select(five_sectors, eu_q_rank,
intensity_energy) %>%
filter(eu_q_rank == 10) %>%
select(-eu_q_rank)
pdat_final_demand = get_sector_summary_by_eu_ntile_direct(eu_q_count) %>%
ungroup() %>%
filter(year==2015) %>%
left_join(read_csv(here("analysis/data/derived/sectors_agg_method1_ixi.csv")),
by="sector_agg_id") %>%
left_join(pdat_int_energy, by="five_sectors") %>%
mutate(total_energy_use_tj_new = (total_fd_me)*intensity_energy) %>%
mutate(total_energy_use_tj_diff = total_energy_use_tj-total_energy_use_tj_new) %>%
select(eu_q_rank,total_energy_use_tj_new) %>%
group_by(eu_q_rank) %>%
summarise(total_energy_use_tj_new = sum(total_energy_use_tj_new)) %>%
left_join(a_tmp, by = "eu_q_rank") %>%
mutate(pc_energy_use_tj = total_energy_use_tj_new/total_population,
pc_energy_use_gj = pc_energy_use_tj*1000)
df_energy_deciles = pdat_final_demand %>%
select(eu_q_rank, pc_energy_use_gj)
ineq_curr = df_energy_deciles$pc_energy_use_gj[10]/df_energy_deciles$pc_energy_use_gj[1]
```
```{r }
library(readxl)
df_scenario_info = read_excel(here("analysis/data/raw/scenarios_additions.xlsx"), sheet="overview") %>%
select(scenario, fe_gj_pc = final_energy_gj_per_capita_2050,
ccs_required = primary_energy_fossil_w_ccs2050_ej,
description) %>%
arrange(fe_gj_pc) %>%
mutate(fe_gj_pc = fe_gj_pc*0.62,
fe_gj_pc = round(fe_gj_pc),
ccs_required = round(ccs_required))
mea = c(min(df_scenario_info$fe_gj_pc),max(df_scenario_info$fe_gj_pc))
mer = c(min(df_scenario_info$fe_gj_pc),53) #before was 33: multiplied 53 by 0.62 and rounded up
c_mean_mea = round((17+mea[2])/2) #multiplied 27 by 0.62 and rounded up
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
c_mean_mer = round((mer[1]+mer[2])/2)
```
```{r , eval = FALSE}
# run once to save file. If changing scenarios included or input data, need to re-run and save 'scenarios_fine.rds'
# vectorized function that returns scaled quantiles given
#quantile index column and column with quantile averages
#qidx: quantile index
#qavg_to_scale: column to scale
#first_target: target value of first quantile
#mean_target: target mean of scaled quantiles
scaled_quantiles <- function(.data,
qidx,
qavg_to_scale,
first_target,
mean_target) {
# cumbersomely extract current quantile mean
mean_current = .data %>%
ungroup() %>%
summarise(mean_cur = first(mean({{qavg_to_scale}}))) %>%
pull(mean_cur)
# cumbersomely extract current first wuantile value
first_current = .data %>%
ungroup() %>%
arrange({{qidx}}) %>%
summarise(first_cur = first({{qavg_to_scale}})) %>%
pull(first_cur)
df_tmp = .data %>%
mutate(tmp = {{qavg_to_scale}}*mean_target/mean_current)
first_tmp = df_tmp$tmp[1]
df_tmp = df_tmp %>%
mutate(scaled = mean_target-(mean_target-tmp) * (mean_target-first_target)/(mean_target-first_tmp)) %>%
select({{qidx}}, scaled) %>%
mutate(v_mean = mean_target, v_first = first_target)
}
## run once to save file
df_all = NULL
for (min_energy in seq(from=mer[1], to=mer[2], by=0.25)) {
for (mean_energy in seq(from=mea[1], to=mea[2], by=0.25)) {
if (min_energy <= mean_energy) {
df_all = df_all %>%
bind_rows(df_energy_deciles %>%
scaled_quantiles(eu_q_rank, pc_energy_use_gj, min_energy, mean_energy))
}
}
}
saveRDS(df_all, here("analysis/data/derived/si/scenarios_fine.rds"))
```
```{r , fig.width=7, fig.height=5.5, fig.cap="**Figure S6:**"}
round_by = 10
df_all = readRDS(here("analysis/data/derived/si/scenarios_fine.rds")) %>%
filter(eu_q_rank %in% c(1,10)) %>%
group_by(v_mean, v_first) %>%
summarise(ratio = last(scaled)/first(scaled)) %>%
mutate(bin_ratio = if_else((ratio*100)%%round_by > round_by*0.5,
ratio*100+(round_by-(ratio*100)%%round_by),
ratio*100-(ratio*100)%%round_by)) %>%
group_by(bin_ratio, v_first) %>%
summarise(v_mean = mean(v_mean)) %>%
mutate(bin_ratio = bin_ratio*0.01)
df_scenario = df_all %>%
filter(v_mean %in% df_scenario_info$fe_gj_pc) %>%
filter(!(scenario == "DLE")) %>%
mutate(scenario = dplyr::recode(scenario,
"LED" = "LED (33)",
"IEA ETP B2DS" = "IEA ETP B2DS (52)",
"GEA efficiency" = "GEA efficiency (40)",
"SSP1-1.9" = "SSP1-1.9 (54)",
"SSP2-1.9" = "SSP2-1.9 (58)",
"SSP4-1.9" = "SSP4-1.9 (64)",
"SSP3-3.4" = "SSP3-3.4 (90)",
"SSP5-6.0" = "SSP5-6.0 (94)"))
library(wesanderson)
a = df_all %>%
ggplot(aes(x=v_first, y=bin_ratio, fill=v_mean)) +
geom_hline(yintercept = ineq_curr, alpha=0.8, color="grey", linetype=2) +
geom_line(data=df_scenario, aes(color=scenario, group=scenario)) +
annotate(geom="text", x=max(df_all$v_first)-7.5,y=ineq_curr+0.6,label = "Current (2015) 10:10 ratio") +
#scale_fill_gradient("Mean energy\navailable (GJ/cap)",
# low=wes_palette("Chevalier1")[3],
# high = wes_palette("Rushmore1")[4]) +
#scale_color_manual(values=wes_palette("Darjeeling1")) +
theme_minimal() +
labs(x="Minimum energy requirement (GJ/cap)", y="Maximum energy inequality (10:10 ratio)", color = "Scenario")+
theme(text=element_text(family="Liberation Sans Narrow"),
axis.text.x = element_text(size = 13),
axis.text.y = element_text(size = 13)) +
#scale_color_discrete(name = "Scenario (mean GJ/cap)") +
xlim(10,53) +
#ylim(0,15) +
scale_y_continuous(breaks = c(2.5,5,7.5,10,12.5,15), limits = c(1,15)) +
scale_color_discrete(name = "Scenario\n(mean GJ/cap)", breaks=c("LED (33)",
"GEA efficiency (40)",
"IEA ETP B2DS (52)",
"SSP1-1.9 (54)",
"SSP2-1.9 (58)",
"SSP4-1.9 (64)",
"SSP3-3.4 (90)",
"SSP5-6.0 (94)")) #+
#theme_ipsum()
a
ggsave(here("analysis", "figures", "figureSxx.pdf"))
```
<!-- The following line ensures the references appear here for the MS Word or HTML output files, rather than right at the end of the document (this will not work for PDF files): -->
<div id="refs"></div>