cdmAmsIId-methodology.RmdThis 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.
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
check_applicability_fuel_switching(baseline, project)## [1] TRUE
check_applicability_monitoring(monitoring)## [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
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.
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 |
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 |
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 <- 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. |
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. |
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. |
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. |
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. |
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. |
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. |
## 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. |