Introduction

This vignette demonstrates how to reproduce the AMS-II.D calculations using cdmAmsIId. The methodology covers industrial energy efficiency and fuel switching projects that improve thermal system performance. The core steps include estimating baseline emissions, calculating project emissions, accounting for leakage, and deriving net emission reductions.

Applicability Checks

library(cdmAmsIId)

baseline <- tibble::tibble(
  baseline_fuel_quantity = c(1200, 900),
  baseline_efficiency = c(0.72, 0.68),
  baseline_emission_factor_tco2_per_gj = c(0.094, 0.094)
)
project <- tibble::tibble(
  project_fuel_quantity = c(920, 720),
  project_efficiency = c(0.84, 0.82),
  project_emission_factor_tco2_per_gj = c(0.082, 0.082)
)
monitoring <- tibble::tibble(
  project_fuel_quantity = c(80, 70),
  project_efficiency = c(0.84, 0.8),
  useful_heat_output = c(60, 55)
)

check_applicability_energy_efficiency(baseline, project)
## [1] TRUE
## [1] TRUE
## [1] TRUE
assess_ams_iid_applicability(baseline, project, monitoring)
## # A tibble: 1 × 4
##   energy_efficiency fuel_switching monitoring_ready overall_applicable
##   <lgl>             <lgl>          <lgl>            <lgl>             
## 1 TRUE              TRUE           TRUE             TRUE

Simulated Dataset

set.seed(123)
example_data <- simulate_ams_iid_dataset(n_facilities = 4, n_periods = 6, start_year = 2024, start_month = 7)
quiet_kable(
  head(example_data),
  format = "html",
  digits = 3
)
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
facility_id monitoring_period year month day monitoring_date monitoring_label baseline_fuel_quantity baseline_ncv_gj_per_unit baseline_emission_factor_tco2_per_gj baseline_efficiency project_fuel_quantity project_ncv_gj_per_unit project_emission_factor_tco2_per_gj project_efficiency electricity_emissions_tco2e useful_heat_output leakage_emissions_tco2e
facility_01 1 2024 7 15 2024-07-15 2024-07 1138.114 0.037 0.092 0.677 989.664 0.037 0.081 0.778 0.207 28.652 0.085
facility_01 2 2024 8 19 2024-08-19 2024-08 932.177 0.039 0.094 0.690 810.589 0.039 0.082 0.793 0.444 24.955 0.072
facility_01 3 2024 9 14 2024-09-14 2024-09 1307.162 0.041 0.100 0.650 1136.663 0.041 0.088 0.747 1.125 34.940 0.108
facility_01 4 2024 10 3 2024-10-03 2024-10 1232.086 0.039 0.092 0.673 1071.379 0.039 0.081 0.774 1.286 31.953 0.095
facility_01 5 2024 11 10 2024-11-10 2024-11 1091.090 0.036 0.091 0.743 948.774 0.036 0.080 0.855 0.797 29.281 0.079
facility_01 6 2024 12 18 2024-12-18 2024-12 974.499 0.037 0.091 0.672 847.390 0.037 0.080 0.773 0.643 24.531 0.073

The simulation includes monitoring metadata (monitoring_period, year, month, day, and monitoring_label) along with baseline/project parameters and leakage placeholders.

Equation Walkthrough

baseline_emissions <- calculate_baseline_fossil_emissions(example_data, group_cols = "facility_id")
project_emissions <- calculate_project_fossil_emissions(
  example_data,
  group_cols = "facility_id",
  electricity_col = "electricity_emissions_tco2e"
)
leakage_emissions <- calculate_leakage_emissions(
  example_data,
  group_cols = "facility_id",
  leakage_col = "leakage_emissions_tco2e"
)
emission_reductions <- estimate_emission_reductions(
  baseline_emissions,
  project_emissions,
  leakage_emissions,
  group_cols = "facility_id"
)
quiet_kable(emission_reductions, format = "html", digits = 3)
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
facility_id emission_reductions_tco2e baseline_emissions_tco2e project_emissions_tco2e leakage_emissions_tco2e
facility_01 6.754 35.170 27.905 0.511
facility_02 8.211 36.181 27.449 0.521
facility_03 7.425 35.715 27.801 0.489
facility_04 5.960 32.768 26.329 0.479

Monitoring Period Aggregation

period_summary <- aggregate_monitoring_periods(
  monitoring_data = example_data,
  period_col = "monitoring_label",
  group_cols = "facility_id"
)

quiet_kable(period_summary, format = "html", digits = 3)
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
facility_id monitoring_period year month day baseline_fuel_quantity baseline_ncv_gj_per_unit baseline_emission_factor_tco2_per_gj baseline_efficiency project_fuel_quantity project_ncv_gj_per_unit project_emission_factor_tco2_per_gj project_efficiency electricity_emissions_tco2e useful_heat_output leakage_emissions_tco2e
facility_01 2024-07, 2024-08, 2024-09, 2024-10, 2024-11, 2024-12 12144 57 79 6675.129 0.229 0.560 4.106 5804.460 0.229 0.492 4.721 4.502 174.313 0.511
facility_02 2024-07, 2024-08, 2024-09, 2024-10, 2024-11, 2024-12 12144 57 94 6378.433 0.244 0.581 4.186 5546.464 0.244 0.512 4.814 3.374 182.715 0.521
facility_03 2024-07, 2024-08, 2024-09, 2024-10, 2024-11, 2024-12 12144 57 129 6107.825 0.241 0.580 4.008 5311.152 0.241 0.510 4.610 4.036 162.864 0.489
facility_04 2024-07, 2024-08, 2024-09, 2024-10, 2024-11, 2024-12 12144 57 98 6137.406 0.235 0.559 4.083 5336.875 0.235 0.492 4.695 4.525 163.553 0.479

Meta-Function

estimate_emission_reductions_ams_iid(
  baseline_data = example_data,
  project_data = example_data,
  leakage_data = example_data,
  group_cols = "facility_id",
  project_args = list(electricity_col = "electricity_emissions_tco2e"),
  leakage_args = list(leakage_col = "leakage_emissions_tco2e")
)
## # A tibble: 4 × 5
##   facility_id emission_reductions_tco2e baseline_emissions_tco2e
##   <chr>                           <dbl>                    <dbl>
## 1 facility_01                      6.75                     35.2
## 2 facility_02                      8.21                     36.2
## 3 facility_03                      7.42                     35.7
## 4 facility_04                      5.96                     32.8
## # ℹ 2 more variables: project_emissions_tco2e <dbl>,
## #   leakage_emissions_tco2e <dbl>

Function Reference

function_reference <- tibble::tibble(
  Function = c(
    "`calculate_baseline_fossil_emissions()`",
    "`calculate_project_fossil_emissions()`",
    "`calculate_leakage_emissions()`",
    "`estimate_emission_reductions()`",
    "`aggregate_monitoring_periods()`",
    "`estimate_emission_reductions_ams_iid()`",
    "`simulate_ams_iid_dataset()`"
  ),
  Signature = c(
    "`calculate_baseline_fossil_emissions(baseline_data, fuel_col = \"baseline_fuel_quantity\", ncv_col = \"baseline_ncv_gj_per_unit\", emission_factor_col = \"baseline_emission_factor_tco2_per_gj\", efficiency_col = \"baseline_efficiency\", group_cols = NULL, output_col = \"baseline_emissions_tco2e\")`",
    "`calculate_project_fossil_emissions(project_data, fuel_col = \"project_fuel_quantity\", ncv_col = \"project_ncv_gj_per_unit\", emission_factor_col = \"project_emission_factor_tco2_per_gj\", efficiency_col = \"project_efficiency\", electricity_col = NULL, group_cols = NULL, output_col = \"project_emissions_tco2e\")`",
    "`calculate_leakage_emissions(leakage_data, leakage_col = \"leakage_emissions_tco2e\", group_cols = NULL, output_col = \"leakage_emissions_tco2e\")`",
    "`estimate_emission_reductions(baseline_emissions, project_emissions, leakage_emissions = NULL, baseline_col = \"baseline_emissions_tco2e\", project_col = \"project_emissions_tco2e\", leakage_col = \"leakage_emissions_tco2e\", group_cols = NULL, output_col = \"emission_reductions_tco2e\")`",
    "`aggregate_monitoring_periods(monitoring_data, period_col = \"monitoring_period\", group_cols = NULL, summarise_cols = NULL, output_col = \"monitoring_period\")`",
    "`estimate_emission_reductions_ams_iid(baseline_data, project_data, leakage_data = NULL, group_cols = NULL, baseline_args = list(), project_args = list(), leakage_args = list(), reduction_args = list())`",
    "`simulate_ams_iid_dataset(n_facilities = 10, n_periods = 12, start_year = 2023, start_month = 1, seed = NULL)`"
  ),
  Purpose = c(
    "Aggregates baseline fossil fuel use into emissions adjusted for system efficiency.<br>\\(BE_y = \\sum_i \\frac{FC^{BL}_{i,y} \\times NCV^{BL}_{i,y} \\times EF^{BL}_{i,y}}{\\eta^{BL}_{i,y}}\\)",
    "Summarises project fossil emissions including auxiliary electricity where applicable.<br>\\(PE_y = \\sum_i \\frac{FC^{PR}_{i,y} \\times NCV^{PR}_{i,y} \\times EF^{PR}_{i,y}}{\\eta^{PR}_{i,y}} + ELEC_y\\)",
    "Collects leakage emissions associated with the efficiency intervention.<br>\\(LE_y = \\sum_i LE_{i,y}\\)",
    "Combines baseline, project, and leakage totals to compute net emission reductions.<br>\\(ER_y = BE_y - (PE_y + LE_y)\\)",
    "Rolls monitoring data up to reporting periods for downstream analysis.<br>\\(ER_{p,y} = BE_{p,y} - (PE_{p,y} + LE_{p,y})\\)",
    "High-level wrapper orchestrating baseline, project, and leakage calculations.<br>\\(ER_y = BE_y - (PE_y + LE_y)\\)",
    "Generates representative monitoring data for demonstrations and tests."
  )
)

quiet_kable(function_reference, format = "html", escape = FALSE)
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Function Signature Purpose
calculate_baseline_fossil_emissions() calculate_baseline_fossil_emissions(baseline_data, fuel_col = "baseline_fuel_quantity", ncv_col = "baseline_ncv_gj_per_unit", emission_factor_col = "baseline_emission_factor_tco2_per_gj", efficiency_col = "baseline_efficiency", group_cols = NULL, output_col = "baseline_emissions_tco2e") Aggregates baseline fossil fuel use into emissions adjusted for system efficiency.
BEy=iFCi,yBL×NCVi,yBL×EFi,yBLηi,yBLBE_y = \sum_i \frac{FC^{BL}_{i,y} \times NCV^{BL}_{i,y} \times EF^{BL}_{i,y}}{\eta^{BL}_{i,y}}
calculate_project_fossil_emissions() calculate_project_fossil_emissions(project_data, fuel_col = "project_fuel_quantity", ncv_col = "project_ncv_gj_per_unit", emission_factor_col = "project_emission_factor_tco2_per_gj", efficiency_col = "project_efficiency", electricity_col = NULL, group_cols = NULL, output_col = "project_emissions_tco2e") Summarises project fossil emissions including auxiliary electricity where applicable.
PEy=iFCi,yPR×NCVi,yPR×EFi,yPRηi,yPR+ELECyPE_y = \sum_i \frac{FC^{PR}_{i,y} \times NCV^{PR}_{i,y} \times EF^{PR}_{i,y}}{\eta^{PR}_{i,y}} + ELEC_y
calculate_leakage_emissions() calculate_leakage_emissions(leakage_data, leakage_col = "leakage_emissions_tco2e", group_cols = NULL, output_col = "leakage_emissions_tco2e") Collects leakage emissions associated with the efficiency intervention.
LEy=iLEi,yLE_y = \sum_i LE_{i,y}
estimate_emission_reductions() estimate_emission_reductions(baseline_emissions, project_emissions, leakage_emissions = NULL, baseline_col = "baseline_emissions_tco2e", project_col = "project_emissions_tco2e", leakage_col = "leakage_emissions_tco2e", group_cols = NULL, output_col = "emission_reductions_tco2e") Combines baseline, project, and leakage totals to compute net emission reductions.
ERy=BEy(PEy+LEy)ER_y = BE_y - (PE_y + LE_y)
aggregate_monitoring_periods() aggregate_monitoring_periods(monitoring_data, period_col = "monitoring_period", group_cols = NULL, summarise_cols = NULL, output_col = "monitoring_period") Rolls monitoring data up to reporting periods for downstream analysis.
ERp,y=BEp,y(PEp,y+LEp,y)ER_{p,y} = BE_{p,y} - (PE_{p,y} + LE_{p,y})
estimate_emission_reductions_ams_iid() estimate_emission_reductions_ams_iid(baseline_data, project_data, leakage_data = NULL, group_cols = NULL, baseline_args = list(), project_args = list(), leakage_args = list(), reduction_args = list()) High-level wrapper orchestrating baseline, project, and leakage calculations.
ERy=BEy(PEy+LEy)ER_y = BE_y - (PE_y + LE_y)
simulate_ams_iid_dataset() simulate_ams_iid_dataset(n_facilities = 10, n_periods = 12, start_year = 2023, start_month = 1, seed = NULL) Generates representative monitoring data for demonstrations and tests.

Workflow Overview

## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Step Purpose
Input efficiency monitoring data Collect facility-level baseline, project, and leakage parameters.
calculate_baseline_fossil_emissions Translate baseline fuel consumption and efficiency into emissions.
calculate_project_fossil_emissions Quantify project fossil emissions including electricity adjustments.
calculate_leakage_emissions Summarise leakage contributions for each facility or period.
estimate_emission_reductions Derive net emission reductions from baseline, project, and leakage totals.
estimate_emission_reductions_ams_iid Return a tidy tibble with reductions and supporting diagnostics.