Skip to contents

This article helps you get started with the tiltIndicator package. Currently it supports two families of indicators: “emissions” and “sector”.

In the “emissions” family, you have two indicators – “emissions profile” and “emissions profile upstream”. They are both calculated in exactly the same way. The difference is not in the process but in the dataset holding CO2 data: Either it has products or upstream-products (a.k.a. inputs), respectively.

In the “sector” family, you also have two indicators: “Sector profile” and “sector profile upstream”. Also they are calculated in the same way, but “sector profile upstream” takes an additional argument for upstream-products (a.k.a. inputs).

Emissions profile

The “emissions profile” measures the absolute GHG emissions of a product in comparison to a chosen benchmark of products. The assessment is first performed on a product-level and can then be aggregated to the company-level. The profile is expressed as the share of a company’s products that are in a “high”, “medium”, or “low” emission profile category, based on the comparison to the benchmark. A higher emission profile indicates a larger impact on climate change compared to the benchmark and can therefore also be interpreted as one climate risk component to assess products, companies, or loan portfolios.

The “emission profile” is calculated in these steps:

  • The relative GHG emissions per product are collected from a Life-Cycle-Analysis (LCA) database by matching the products from our company dataset to the products from the LCA dataset.
  • All products are ranked according to their GHG emissions.
  • The products are grouped by the following benchmarks:
    1. all: All products.
    2. isic_4digit: All products within the same ISIC 4 digit code (example: 0112 Growing of rice).
    3. tilt_subsector: All products within the same tilt sector (example: agriculture).
    4. unit: All products with the same unit (example: kg).
    5. unit_isic_4digit: All products with the same unit within the same ISIC 4 digit section (example: kg + 0112 Growing of rice).
    6. unit_tilt_subsector: All products with the same unit within the same tilt sector (example: kg + agriculture).
  • For each benchmark, products are assigned to the emission profile category “low”, “medium” or “high”, depending on the GHG emissions arising from their production process in comparison to all other products within the same benchmark. For the assignment of the three categories, thresholds are used. Please find more information about the thresholds in the Thresholds section.

For the company-level results, we aggregate all products from the same category and benchmark and set them in relation to all products that the company produces. The company-level results are expressed as the company’s share of products per category “low”, “medium”, and “high” in comparison to each benchmark.

The output of this indicator contains the following:

  • A column indicating the benchmark to which a product is compared.
  • A column indicating whether the product has “low”, “medium” or “high” relative GHG emissions.
  • A column indicating the share of the products per category and benchmark”.

Example


library(tiltIndicator)
library(tiltToyData)
library(readr)
options(readr.show_col_types = FALSE)

companies <- read_csv(toy_emissions_profile_any_companies())
products <- read_csv(toy_emissions_profile_products_ecoinvent())

both <- emissions_profile(companies, products)
both
#> # A tibble: 72 × 3
#>    companies_id                       product           company          
#>  * <chr>                              <list>            <list>           
#>  1 antimonarchy_canine                <tibble [6 × 6]>  <tibble [24 × 3]>
#>  2 celestial_lovebird                 <tibble [6 × 6]>  <tibble [24 × 3]>
#>  3 nonphilosophical_llama             <tibble [12 × 6]> <tibble [24 × 3]>
#>  4 asteria_megalotomusquinquespinosus <tibble [6 × 6]>  <tibble [24 × 3]>
#>  5 quasifaithful_amphiuma             <tibble [6 × 6]>  <tibble [24 × 3]>
#>  6 spectacular_americanriverotter     <tibble [6 × 6]>  <tibble [24 × 3]>
#>  7 contrite_silkworm                  <tibble [6 × 6]>  <tibble [24 × 3]>
#>  8 harmless_owlbutterfly              <tibble [6 × 6]>  <tibble [24 × 3]>
#>  9 fascist_maiasaura                  <tibble [6 × 6]>  <tibble [24 × 3]>
#> 10 charismatic_islandwhistler         <tibble [6 × 6]>  <tibble [24 × 3]>
#> # ℹ 62 more rows

both |> unnest_product()
#> # A tibble: 456 × 7
#>    companies_id        grouped_by        risk_category profile_ranking clustered
#>    <chr>               <chr>             <chr>                   <dbl> <chr>    
#>  1 antimonarchy_canine all               high                        1 tent     
#>  2 antimonarchy_canine isic_4digit       high                        1 tent     
#>  3 antimonarchy_canine tilt_subsector    high                        1 tent     
#>  4 antimonarchy_canine unit              high                        1 tent     
#>  5 antimonarchy_canine unit_isic_4digit  high                        1 tent     
#>  6 antimonarchy_canine unit_tilt_subsec… high                        1 tent     
#>  7 celestial_lovebird  all               high                        1 table hi…
#>  8 celestial_lovebird  isic_4digit       high                        1 table hi…
#>  9 celestial_lovebird  tilt_subsector    high                        1 table hi…
#> 10 celestial_lovebird  unit              high                        1 table hi…
#> # ℹ 446 more rows
#> # ℹ 2 more variables: activity_uuid_product_uuid <chr>, co2_footprint <dbl>

both |> unnest_company()
#> # A tibble: 1,728 × 4
#>    companies_id        grouped_by     risk_category value
#>    <chr>               <chr>          <chr>         <dbl>
#>  1 antimonarchy_canine all            high              1
#>  2 antimonarchy_canine all            medium            0
#>  3 antimonarchy_canine all            low               0
#>  4 antimonarchy_canine all            NA                0
#>  5 antimonarchy_canine isic_4digit    high              1
#>  6 antimonarchy_canine isic_4digit    medium            0
#>  7 antimonarchy_canine isic_4digit    low               0
#>  8 antimonarchy_canine isic_4digit    NA                0
#>  9 antimonarchy_canine tilt_subsector high              1
#> 10 antimonarchy_canine tilt_subsector medium            0
#> # ℹ 1,718 more rows

Emissions profile upstream

The indicator “emissions profile upstream” assesses the transition risk of the upstream products due to their relative carbon footprint to other upstream products. As a default option, each upstream product is compared to the carbon footprint of every other upstream product. Upstream products with a higher carbon footprint face a higher risk. On a company-level, the indicator proxies for the supply chain risk of a company - based on its inputs.

The indicator “emissions profile upstream” is therefore similar to the Product Carbon Transition Risk Indicator, but it focuses on the upstream products and not the product of the company. Upstream products are, for example, resources, packaging materials, energy and enabling services (such as tractor use on farm) to produce the product.

After identifying each carbon footprint for one upstream product, the input products are ranked according to their footprint. The ranking method is explained in the Thresholds section.

After assessing the upstream products’ transition risk based on the carbon footprint of each product, they are aggregated at the company-level. We derive what percentage of the upstream products are high, medium and low transition risk.

This indicator consists of 2 broad steps:

  1. Score upstream products: Identifying the upstream products for each product, and calculating the relative carbon footprint per upstream product.
  2. Score companies: Aggregating on the company-level.

The sample data set includes inputs and co2 footprints for each product from Ecoinvent and sectors from Europages. NOTE: the following columns are a completely random selection and do not reflect the true information:

  • co2 footprints (not allowed to share licensed data right now)
  • sectors (as the matching with ecoinvent is not done yet, we do not have one sector per product yet)

Example


library(tiltIndicator)
library(tiltToyData)
library(readr)
options(readr.show_col_types = FALSE)

companies <- read_csv(toy_emissions_profile_any_companies())
inputs <- read_csv(toy_emissions_profile_upstream_products_ecoinvent())

both <- emissions_profile_upstream(companies, inputs)

both |> unnest_product()
#> # A tibble: 690 × 8
#>    companies_id        grouped_by        risk_category profile_ranking clustered
#>    <chr>               <chr>             <chr>                   <dbl> <chr>    
#>  1 antimonarchy_canine all               high                    0.938 tent     
#>  2 antimonarchy_canine input_isic_4digit high                    1     tent     
#>  3 antimonarchy_canine input_tilt_subse… high                    1     tent     
#>  4 antimonarchy_canine input_unit        high                    1     tent     
#>  5 antimonarchy_canine input_unit_input… high                    1     tent     
#>  6 antimonarchy_canine input_unit_input… high                    1     tent     
#>  7 celestial_lovebird  all               high                    0.938 table hi…
#>  8 celestial_lovebird  input_isic_4digit high                    1     table hi…
#>  9 celestial_lovebird  input_tilt_subse… high                    1     table hi…
#> 10 celestial_lovebird  input_unit        high                    1     table hi…
#> # ℹ 680 more rows
#> # ℹ 3 more variables: activity_uuid_product_uuid <chr>,
#> #   input_activity_uuid_product_uuid <chr>, input_co2_footprint <dbl>

both |> unnest_company()
#> # A tibble: 1,728 × 4
#>    companies_id        grouped_by           risk_category value
#>    <chr>               <chr>                <chr>         <dbl>
#>  1 antimonarchy_canine all                  high              1
#>  2 antimonarchy_canine all                  medium            0
#>  3 antimonarchy_canine all                  low               0
#>  4 antimonarchy_canine all                  NA                0
#>  5 antimonarchy_canine input_isic_4digit    high              1
#>  6 antimonarchy_canine input_isic_4digit    medium            0
#>  7 antimonarchy_canine input_isic_4digit    low               0
#>  8 antimonarchy_canine input_isic_4digit    NA                0
#>  9 antimonarchy_canine input_tilt_subsector high              1
#> 10 antimonarchy_canine input_tilt_subsector medium            0
#> # ℹ 1,718 more rows

Sector profile

The indicator “sector profile” measures the transition risk of products based on the sector’s emissions targets the product belongs to. Those sector emission reduction targets vary across scenarios (e.g., net zero scenario or 1.5° scenario) and the time horizon (e.g., reduction needed in 2030, 2040, 2050 to achieve the targets).

After assessing each product, all the products with the same category are aggregated and set in relation to all products of the company. We, therefore, derive company-level information.

Example


library(tiltIndicator)
library(tiltToyData)
library(readr)
options(readr.show_col_types = FALSE)

companies <- read_csv(toy_sector_profile_companies())
scenarios <- read_csv(toy_sector_profile_any_scenarios())

both <- sector_profile(companies, scenarios)
both
#> # A tibble: 72 × 3
#>    companies_id                       product           company          
#>  * <chr>                              <list>            <list>           
#>  1 antimonarchy_canine                <tibble [4 × 10]> <tibble [16 × 3]>
#>  2 celestial_lovebird                 <tibble [4 × 10]> <tibble [16 × 3]>
#>  3 nonphilosophical_llama             <tibble [8 × 10]> <tibble [16 × 3]>
#>  4 asteria_megalotomusquinquespinosus <tibble [4 × 10]> <tibble [16 × 3]>
#>  5 quasifaithful_amphiuma             <tibble [4 × 10]> <tibble [16 × 3]>
#>  6 spectacular_americanriverotter     <tibble [4 × 10]> <tibble [16 × 3]>
#>  7 contrite_silkworm                  <tibble [4 × 10]> <tibble [16 × 3]>
#>  8 harmless_owlbutterfly              <tibble [4 × 10]> <tibble [16 × 3]>
#>  9 fascist_maiasaura                  <tibble [4 × 10]> <tibble [16 × 3]>
#> 10 charismatic_islandwhistler         <tibble [4 × 10]> <tibble [16 × 3]>
#> # ℹ 62 more rows

both |> unnest_product()
#> # A tibble: 304 × 11
#>    companies_id           grouped_by     risk_category profile_ranking clustered
#>    <chr>                  <chr>          <chr>                   <dbl> <chr>    
#>  1 antimonarchy_canine    ipr_1.5C RPS_… medium                   0.18 tent     
#>  2 antimonarchy_canine    ipr_1.5C RPS_… high                     0.98 tent     
#>  3 antimonarchy_canine    weo_NZ 2050_2… high                     0.4  tent     
#>  4 antimonarchy_canine    weo_NZ 2050_2… high                     0.97 tent     
#>  5 celestial_lovebird     ipr_1.5C RPS_… medium                   0.18 table hi…
#>  6 celestial_lovebird     ipr_1.5C RPS_… high                     0.98 table hi…
#>  7 celestial_lovebird     weo_NZ 2050_2… high                     0.4  table hi…
#>  8 celestial_lovebird     weo_NZ 2050_2… high                     0.97 table hi…
#>  9 nonphilosophical_llama ipr_1.5C RPS_… low                      0.09 surface …
#> 10 nonphilosophical_llama ipr_1.5C RPS_… high                     0.95 surface …
#> # ℹ 294 more rows
#> # ℹ 6 more variables: activity_uuid_product_uuid <chr>, tilt_sector <chr>,
#> #   scenario <chr>, year <dbl>, type <chr>, tilt_subsector <chr>

both |> unnest_company()
#> # A tibble: 1,152 × 4
#>    companies_id        grouped_by        risk_category value
#>    <chr>               <chr>             <chr>         <dbl>
#>  1 antimonarchy_canine ipr_1.5C RPS_2030 high              0
#>  2 antimonarchy_canine ipr_1.5C RPS_2030 medium            1
#>  3 antimonarchy_canine ipr_1.5C RPS_2030 low               0
#>  4 antimonarchy_canine ipr_1.5C RPS_2030 NA                0
#>  5 antimonarchy_canine ipr_1.5C RPS_2050 high              1
#>  6 antimonarchy_canine ipr_1.5C RPS_2050 medium            0
#>  7 antimonarchy_canine ipr_1.5C RPS_2050 low               0
#>  8 antimonarchy_canine ipr_1.5C RPS_2050 NA                0
#>  9 antimonarchy_canine weo_NZ 2050_2030  high              1
#> 10 antimonarchy_canine weo_NZ 2050_2030  medium            0
#> # ℹ 1,142 more rows

Sector profile upstream

The indicator “sector profile upstream” assesses the transition risk of the input products based on the sector’s emissions targets the input product belongs to. This indicator can be aggregated on company level and as such inform about the supply chain risk of an SME, based on its inputs’ transition risk. The sector emission reduction targets vary across scenarios (e.g., net zero scenario or 1.5° scenario) and the time horizon (e.g., reduction needed in 2030, 2040, 2050 to achieve the targets). It, therefore, is similar to the Product Sector Risk Indicator but focuses on the input products that the company needs to produce its products.The input products are, for example, resources, packaging materials, energy and enabling services (such as tractor use on farm) to produce the product.

After identifying each carbon footprint for one input product, the input products are ranked according to their footprint. The ranking method is explained in the Thresholds section.

After assessing the input products for each product, they are aggregated at company-level to derive what percentage of the input products required by the company to produce its products have high, medium and low sector transition risk. We, therefore, derive the company-level information.

Please note that carbon emissions or emissions always mean CO2e.

Example


library(tiltIndicator)
library(tiltToyData)
library(readr)
options(readr.show_col_types = FALSE)

companies <- read_csv(toy_sector_profile_upstream_companies())
scenarios <- read_csv(toy_sector_profile_any_scenarios())
inputs <- read_csv(toy_sector_profile_upstream_products())

both <- sector_profile_upstream(companies, scenarios, inputs)
both
#> # A tibble: 72 × 3
#>    companies_id                       product           company          
#>  * <chr>                              <list>            <list>           
#>  1 antimonarchy_canine                <tibble [4 × 12]> <tibble [16 × 3]>
#>  2 asteria_megalotomusquinquespinosus <tibble [4 × 12]> <tibble [16 × 3]>
#>  3 quasifaithful_amphiuma             <tibble [4 × 12]> <tibble [16 × 3]>
#>  4 spectacular_americanriverotter     <tibble [4 × 12]> <tibble [16 × 3]>
#>  5 contrite_silkworm                  <tibble [4 × 12]> <tibble [16 × 3]>
#>  6 harmless_owlbutterfly              <tibble [4 × 12]> <tibble [16 × 3]>
#>  7 charismatic_islandwhistler         <tibble [4 × 12]> <tibble [16 × 3]>
#>  8 leathery_acornwoodpecker           <tibble [4 × 12]> <tibble [16 × 3]>
#>  9 skarn_gallinule                    <tibble [4 × 12]> <tibble [16 × 3]>
#> 10 springloaded_newt                  <tibble [4 × 12]> <tibble [16 × 3]>
#> # ℹ 62 more rows

both |> unnest_product()
#> # A tibble: 460 × 13
#>    companies_id               grouped_by risk_category profile_ranking clustered
#>    <chr>                      <chr>      <chr>                   <dbl> <chr>    
#>  1 antimonarchy_canine        ipr_1.5C … medium                   0.18 tent     
#>  2 antimonarchy_canine        ipr_1.5C … high                     0.98 tent     
#>  3 antimonarchy_canine        weo_NZ 20… high                     0.4  tent     
#>  4 antimonarchy_canine        weo_NZ 20… high                     0.97 tent     
#>  5 asteria_megalotomusquinqu… ipr_1.5C … medium                   0.18 tent     
#>  6 asteria_megalotomusquinqu… ipr_1.5C … high                     0.98 tent     
#>  7 asteria_megalotomusquinqu… weo_NZ 20… high                     0.4  tent     
#>  8 asteria_megalotomusquinqu… weo_NZ 20… high                     0.97 tent     
#>  9 quasifaithful_amphiuma     ipr_1.5C … medium                   0.18 tent     
#> 10 quasifaithful_amphiuma     ipr_1.5C … high                     0.98 tent     
#> # ℹ 450 more rows
#> # ℹ 8 more variables: activity_uuid_product_uuid <chr>, tilt_sector <chr>,
#> #   scenario <chr>, year <dbl>, type <chr>,
#> #   input_activity_uuid_product_uuid <chr>, input_tilt_sector <chr>,
#> #   input_tilt_subsector <chr>

both |> unnest_company()
#> # A tibble: 1,152 × 4
#>    companies_id        grouped_by        risk_category value
#>    <chr>               <chr>             <chr>         <dbl>
#>  1 antimonarchy_canine ipr_1.5C RPS_2030 high              0
#>  2 antimonarchy_canine ipr_1.5C RPS_2030 medium            1
#>  3 antimonarchy_canine ipr_1.5C RPS_2030 low               0
#>  4 antimonarchy_canine ipr_1.5C RPS_2030 NA                0
#>  5 antimonarchy_canine ipr_1.5C RPS_2050 high              1
#>  6 antimonarchy_canine ipr_1.5C RPS_2050 medium            0
#>  7 antimonarchy_canine ipr_1.5C RPS_2050 low               0
#>  8 antimonarchy_canine ipr_1.5C RPS_2050 NA                0
#>  9 antimonarchy_canine weo_NZ 2050_2030  high              1
#> 10 antimonarchy_canine weo_NZ 2050_2030  medium            0
#> # ℹ 1,142 more rows

Thresholds

Products in the highest percentile (greater than high_threshold) are classified as high transition risk products. Products in the medium percentile (greater than low_threshold and lower or equal than high_threshold) are classified as medium transition risk products. Products in the lowest percentile (lower or equal than low_threshold) are classified as low transition risk products. For details about the default low_threshold and high_threshold, refer to the documentation of the corresponding *_profile_*() function (e.g. sector_profile()).