cdmAmsId-methodology.RmdThis vignette demonstrates how to reproduce the AMS-I.D calculations
using cdmAmsId. The methodology covers renewable
electricity generation serving captive mini-grids or isolated
distribution systems that displace fossil-fuel-based generation. The
core steps include summing baseline electricity delivered, applying
baseline emission factors, and accounting for any residual project
emissions.
library(cdmAmsId)
check_applicability_mini_grid_capacity(capacity_kw = 12000)## [1] TRUE
check_applicability_renewable_penetration(renewable_fraction = 0.82)## [1] TRUE
check_applicability_baseline_fossil_share(baseline_fossil_share = 0.75)## [1] TRUE
set.seed(123)
example_data <- simulate_ams_id_dataset(n_grids = 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")
| grid_id | monitoring_period | year | month | day | monitoring_date | monitoring_label | electricity_mwh | baseline_emission_factor | project_emission_factor | baseline_electricity_mwh | project_electricity_mwh | baseline_emissions_tco2e | project_emissions_tco2e | emission_reductions_tco2e |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| grid_1 | 1 | 2024 | 7 | 15 | 2024-07-15 | 2024-07 | 3243.125 | 0.7 | 0.02 | 3243.125 | 92.661 | 2270.188 | 64.863 | 2205.325 |
| grid_1 | 2 | 2024 | 8 | 19 | 2024-08-19 | 2024-08 | 1929.478 | 0.7 | 0.02 | 1929.478 | 55.128 | 1350.635 | 38.590 | 1312.045 |
| grid_1 | 3 | 2024 | 9 | 14 | 2024-09-14 | 2024-09 | 4321.462 | 0.7 | 0.02 | 4321.462 | 123.470 | 3025.024 | 86.429 | 2938.594 |
| grid_1 | 4 | 2024 | 10 | 3 | 2024-10-03 | 2024-10 | 3842.563 | 0.7 | 0.02 | 3842.563 | 109.788 | 2689.794 | 76.851 | 2612.943 |
| grid_1 | 5 | 2024 | 11 | 10 | 2024-11-10 | 2024-11 | 2943.166 | 0.7 | 0.02 | 2943.166 | 84.090 | 2060.216 | 58.863 | 2001.353 |
| grid_1 | 6 | 2024 | 12 | 18 | 2024-12-18 | 2024-12 | 2199.443 | 0.7 | 0.02 | 2199.443 | 62.841 | 1539.610 | 43.989 | 1495.621 |
The simulation includes monitoring metadata
(monitoring_period, year, month,
day, and monitoring_label) so that
calculations can be aggregated over reporting periods while preserving
grid-level identifiers.
baseline_supply <- calculate_baseline_electricity_supply(example_data, group_cols = "grid_id")
baseline_emissions <- calculate_baseline_emissions(
baseline_supply,
baseline_emission_factor = example_data$baseline_emission_factor[1]
)
project_emissions <- calculate_project_emissions(
baseline_supply,
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")
| grid_id | baseline_electricity_mwh | baseline_emissions_tco2e | project_emissions_tco2e | emission_reductions_tco2e |
|---|---|---|---|---|
| grid_1 | 18479.24 | 12935.47 | 369.585 | 12565.88 |
| grid_2 | 16586.65 | 11610.66 | 331.733 | 11278.92 |
| grid_3 | 14860.47 | 10402.33 | 297.209 | 10105.12 |
| grid_4 | 15343.04 | 10740.13 | 306.861 | 10433.27 |
period_summary <- aggregate_monitoring_periods(
supply_data = example_data,
monitoring_cols = c("monitoring_label"),
group_cols = "grid_id",
electricity_col = "electricity_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")
| grid_id | monitoring_label | baseline_emissions_tco2e | project_emissions_tco2e | emission_reductions_tco2e | baseline_electricity_mwh | baseline_emission_factor |
|---|---|---|---|---|---|---|
| grid_1 | 2024-07 | 2270.188 | 64.863 | 2205.325 | 3243.125 | 0.7 |
| grid_1 | 2024-08 | 1350.635 | 38.590 | 1312.045 | 1929.478 | 0.7 |
| grid_1 | 2024-09 | 3025.024 | 86.429 | 2938.594 | 4321.462 | 0.7 |
| grid_1 | 2024-10 | 2689.794 | 76.851 | 2612.943 | 3842.563 | 0.7 |
| grid_1 | 2024-11 | 2060.216 | 58.863 | 2001.353 | 2943.166 | 0.7 |
| grid_1 | 2024-12 | 1539.610 | 43.989 | 1495.621 | 2199.443 | 0.7 |
estimate_emission_reductions_ams_id(
supply_data = example_data,
baseline_emission_factor = example_data$baseline_emission_factor[1],
project_emission_factor = example_data$project_emission_factor[1],
group_cols = "grid_id"
)## # A tibble: 4 × 5
## grid_id baseline_electricity_mwh baseline_emissions_t…¹ project_emissions_tc…²
## <chr> <dbl> <dbl> <dbl>
## 1 grid_1 18479. 12935. 370.
## 2 grid_2 16587. 11611. 332.
## 3 grid_3 14860. 10402. 297.
## 4 grid_4 15343. 10740. 307.
## # ℹ abbreviated names: ¹baseline_emissions_tco2e, ²project_emissions_tco2e
## # ℹ 1 more variable: emission_reductions_tco2e <dbl>
function_reference <- tibble::tibble(
Function = c(
"`calculate_baseline_electricity_supply()`",
"`calculate_baseline_emissions()`",
"`calculate_project_emissions()`",
"`calculate_emission_reductions()`",
"`aggregate_monitoring_periods()`",
"`estimate_emission_reductions_ams_id()`",
"`simulate_ams_id_dataset()`"
),
Signature = c(
"`calculate_baseline_electricity_supply(supply_data, electricity_col = \"electricity_mwh\", group_cols = NULL)`",
"`calculate_baseline_emissions(baseline_supply, baseline_emission_factor, output_col = \"baseline_emissions_tco2e\")`",
"`calculate_project_emissions(baseline_supply, 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(supply_data, monitoring_cols = c(\"year\", \"month\"), group_cols = \"grid_id\")`",
"`estimate_emission_reductions_ams_id(supply_data, baseline_emission_factor, project_emission_factor = 0, group_cols = NULL)`",
"`simulate_ams_id_dataset(n_grids = 10, n_periods = 12, start_year = 2023, start_month = 1, mean_supply_mwh = 18000, sd_supply_mwh = 2500, baseline_emission_factor = 0.7, project_emission_factor = 0.02)`"
),
Purpose = c(
"Summed baseline electricity supply for each group or monitoring period.<br>\\(E^{BL}_y = \\sum_i E_{i,y}\\)",
"Baseline emissions derived from fossil electricity emission factors.<br>\\(BE_y = E^{BL}_y \\times EF^{BL}\\)",
"Project emissions reflecting auxiliary fossil generation.<br>\\(PE_y = E^{BL}_y \\times EF^{PR}\\)",
"Emission reductions obtained from the difference between baseline and project emissions.<br>\\(ER_y = BE_y - PE_y\\)",
"Monitoring-period aggregation consistent with methodology equations.<br>\\(ER_{p,y} = BE_{p,y} - PE_{p,y}\\)",
"Meta-calculation wrapper chaining the equation helpers.<br>\\(ER_y = BE_y - PE_y\\)",
"Data generator for examples, testing, and onboarding."
)
)
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_electricity_supply()
|
calculate_baseline_electricity_supply(supply_data, electricity_col = "electricity_mwh", group_cols = NULL)
|
Summed baseline electricity supply for each group or monitoring
period. |
calculate_baseline_emissions()
|
calculate_baseline_emissions(baseline_supply, baseline_emission_factor, output_col = "baseline_emissions_tco2e")
|
Baseline emissions derived from fossil electricity emission
factors. |
calculate_project_emissions()
|
calculate_project_emissions(baseline_supply, project_emission_factor = 0, output_col = "project_emissions_tco2e")
|
Project emissions reflecting auxiliary fossil
generation. |
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 obtained from the difference between baseline and
project
emissions. |
aggregate_monitoring_periods()
|
aggregate_monitoring_periods(supply_data, monitoring_cols = c("year", "month"), group_cols = "grid_id")
|
Monitoring-period aggregation consistent with methodology
equations. |
estimate_emission_reductions_ams_id()
|
estimate_emission_reductions_ams_id(supply_data, baseline_emission_factor, project_emission_factor = 0, group_cols = NULL)
|
Meta-calculation wrapper chaining the equation
helpers. |
simulate_ams_id_dataset()
|
simulate_ams_id_dataset(n_grids = 10, n_periods = 12, start_year = 2023, start_month = 1, mean_supply_mwh = 18000, sd_supply_mwh = 2500, baseline_emission_factor = 0.7, project_emission_factor = 0.02)
|
Data generator for examples, testing, and onboarding. |