cdmAmsIc-methodology.RmdThis vignette demonstrates how to reproduce the AMS-I.C calculations
using cdmAmsIc. The methodology covers renewable thermal
energy production (e.g. biomass boilers, solar thermal systems,
geothermal heat) that displaces fossil-fuel-based heat generation. The
core steps involve calculating baseline thermal output, estimating
emissions using fossil heat factors, and incorporating any residual
project emissions.
library(cdmAmsIc)
check_applicability_thermal_capacity(capacity_mwth = 12)## [1] TRUE
check_applicability_renewable_supply(renewable_fraction = 0.85)## [1] TRUE
check_applicability_fossil_displacement(fossil_heat_share = 0.75)## [1] TRUE
set.seed(123)
example_data <- simulate_ams_ic_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 | thermal_energy_mwh | baseline_emission_factor | project_emission_factor | baseline_thermal_output_mwh | project_thermal_output_mwh | baseline_emissions_tco2e | project_emissions_tco2e | emission_reductions_tco2e |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| facility_1 | 1 | 2024 | 7 | 15 | 2024-07-15 | 2024-07 | 2175.050 | 0.27 | 0.01 | 2175.050 | 80.557 | 587.264 | 21.751 | 565.513 |
| facility_1 | 2 | 2024 | 8 | 19 | 2024-08-19 | 2024-08 | 1229.224 | 0.27 | 0.01 | 1229.224 | 45.527 | 331.891 | 12.292 | 319.598 |
| facility_1 | 3 | 2024 | 9 | 14 | 2024-09-14 | 2024-09 | 2951.453 | 0.27 | 0.01 | 2951.453 | 109.313 | 796.892 | 29.515 | 767.378 |
| facility_1 | 4 | 2024 | 10 | 3 | 2024-10-03 | 2024-10 | 2606.645 | 0.27 | 0.01 | 2606.645 | 96.542 | 703.794 | 26.066 | 677.728 |
| facility_1 | 5 | 2024 | 11 | 10 | 2024-11-10 | 2024-11 | 1959.079 | 0.27 | 0.01 | 1959.079 | 72.558 | 528.951 | 19.591 | 509.361 |
| facility_1 | 6 | 2024 | 12 | 18 | 2024-12-18 | 2024-12 | 1423.599 | 0.27 | 0.01 | 1423.599 | 52.726 | 384.372 | 14.236 | 370.136 |
The simulation includes monitoring metadata
(monitoring_period, year, month,
day, and monitoring_label) so that
calculations can be aggregated over reporting periods while preserving
facility-level identifiers.
baseline_output <- calculate_baseline_thermal_output(example_data, group_cols = "facility_id")
baseline_emissions <- calculate_baseline_emissions(
baseline_output,
baseline_emission_factor = example_data$baseline_emission_factor[1]
)
project_emissions <- calculate_project_emissions(
baseline_output,
project_emission_factor = example_data$project_emission_factor[1]
)
emission_reductions <- calculate_emission_reductions(baseline_emissions, project_emissions)
quiet_kable(head(emission_reductions), format = "html", digits = 3)## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
| facility_id | baseline_thermal_output_mwh | baseline_emissions_tco2e | project_emissions_tco2e | emission_reductions_tco2e |
|---|---|---|---|---|
| facility_1 | 12345.05 | 3333.164 | 123.451 | 3209.713 |
| facility_2 | 10982.39 | 2965.245 | 109.824 | 2855.421 |
| facility_3 | 9739.54 | 2629.676 | 97.395 | 2532.280 |
| facility_4 | 10246.99 | 2766.688 | 102.470 | 2664.218 |
period_summary <- aggregate_monitoring_periods(
thermal_data = example_data,
monitoring_cols = c("monitoring_label"),
group_cols = "facility_id",
energy_col = "thermal_energy_mwh",
baseline_factor_col = "baseline_emission_factor"
)
quiet_kable(head(period_summary), format = "html", digits = 3)## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
| facility_id | monitoring_label | baseline_emissions_tco2e | project_emissions_tco2e | emission_reductions_tco2e | baseline_thermal_output_mwh | baseline_emission_factor |
|---|---|---|---|---|---|---|
| facility_1 | 2024-07 | 587.264 | 21.751 | 565.513 | 2175.050 | 0.27 |
| facility_1 | 2024-08 | 331.891 | 12.292 | 319.598 | 1229.224 | 0.27 |
| facility_1 | 2024-09 | 796.892 | 29.515 | 767.378 | 2951.453 | 0.27 |
| facility_1 | 2024-10 | 703.794 | 26.066 | 677.728 | 2606.645 | 0.27 |
| facility_1 | 2024-11 | 528.951 | 19.591 | 509.361 | 1959.079 | 0.27 |
| facility_1 | 2024-12 | 384.372 | 14.236 | 370.136 | 1423.599 | 0.27 |
estimate_emission_reductions_ams_ic(
thermal_data = example_data,
baseline_emission_factor = example_data$baseline_emission_factor[1],
project_emission_factor = example_data$project_emission_factor[1],
group_cols = "facility_id"
)## # A tibble: 4 × 5
## facility_id baseline_thermal_output_mwh baseline_emissions_tco2e
## <chr> <dbl> <dbl>
## 1 facility_1 12345. 3333.
## 2 facility_2 10982. 2965.
## 3 facility_3 9740. 2630.
## 4 facility_4 10247. 2767.
## # ℹ 2 more variables: project_emissions_tco2e <dbl>,
## # emission_reductions_tco2e <dbl>
function_reference <- tibble::tibble(
Function = c(
"`calculate_baseline_thermal_output()`",
"`calculate_baseline_emissions()`",
"`calculate_project_emissions()`",
"`calculate_emission_reductions()`",
"`aggregate_monitoring_periods()`",
"`estimate_emission_reductions_ams_ic()`",
"`simulate_ams_ic_dataset()`"
),
Signature = c(
"`calculate_baseline_thermal_output(thermal_data, energy_col = \"thermal_energy_mwh\", group_cols = NULL)`",
"`calculate_baseline_emissions(baseline_output, baseline_emission_factor, output_col = \"baseline_emissions_tco2e\")`",
"`calculate_project_emissions(baseline_output, project_emission_factor = 0, output_col = \"project_emissions_tco2e\")`",
"`calculate_emission_reductions(baseline_emissions, project_emissions, baseline_col = \"baseline_emissions_tco2e\", project_col = \"project_emissions_tco2e\", output_col = \"emission_reductions_tco2e\")`",
"`aggregate_monitoring_periods(thermal_data, monitoring_cols = c(\"year\", \"month\"), group_cols = \"facility_id\")`",
"`estimate_emission_reductions_ams_ic(thermal_data, baseline_emission_factor, project_emission_factor = 0, group_cols = NULL)`",
"`simulate_ams_ic_dataset(n_facilities = 10, n_periods = 12, start_year = 2023, start_month = 1, mean_thermal_mwh = 12000, sd_thermal_mwh = 1800, baseline_emission_factor = 0.27, project_emission_factor = 0.01)`"
),
Purpose = c(
"Summed baseline thermal output for each group or monitoring period.<br>\\(Q^{BL}_y = \\sum_i Q_{i,y}\\)",
"Baseline emissions using the displaced fossil heat factor.<br>\\(BE_y = Q^{BL}_y \\times EF^{BL}\\)",
"Project emissions representing auxiliary fossil energy use.<br>\\(PE_y = Q^{BL}_y \\times EF^{PR}\\)",
"Emission reductions for each monitoring period.<br>\\(ER_y = BE_y - PE_y\\)",
"Aggregates monitoring data to reporting periods.<br>\\(ER_{p,y} = BE_{p,y} - PE_{p,y}\\)",
"Meta-calculation composing the core equations.<br>\\(ER_y = BE_y - PE_y\\)",
"Simulation with monitoring metadata for testing and demos."
)
)
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_thermal_output()
|
calculate_baseline_thermal_output(thermal_data, energy_col = "thermal_energy_mwh", group_cols = NULL)
|
Summed baseline thermal output for each group or monitoring
period. |
calculate_baseline_emissions()
|
calculate_baseline_emissions(baseline_output, baseline_emission_factor, output_col = "baseline_emissions_tco2e")
|
Baseline emissions using the displaced fossil heat
factor. |
calculate_project_emissions()
|
calculate_project_emissions(baseline_output, project_emission_factor = 0, output_col = "project_emissions_tco2e")
|
Project emissions representing auxiliary fossil energy
use. |
calculate_emission_reductions()
|
calculate_emission_reductions(baseline_emissions, project_emissions, baseline_col = "baseline_emissions_tco2e", project_col = "project_emissions_tco2e", output_col = "emission_reductions_tco2e")
|
Emission reductions for each monitoring
period. |
aggregate_monitoring_periods()
|
aggregate_monitoring_periods(thermal_data, monitoring_cols = c("year", "month"), group_cols = "facility_id")
|
Aggregates monitoring data to reporting
periods. |
estimate_emission_reductions_ams_ic()
|
estimate_emission_reductions_ams_ic(thermal_data, baseline_emission_factor, project_emission_factor = 0, group_cols = NULL)
|
Meta-calculation composing the core
equations. |
simulate_ams_ic_dataset()
|
simulate_ams_ic_dataset(n_facilities = 10, n_periods = 12, start_year = 2023, start_month = 1, mean_thermal_mwh = 12000, sd_thermal_mwh = 1800, baseline_emission_factor = 0.27, project_emission_factor = 0.01)
|
Simulation with monitoring metadata for testing and demos. |