The {ghg.gert} repository contains data, code, and documentation
supporting climate mitigation planning across the seven-county Twin
Cities metropolitan region. It provides a greenhouse gas (GHG)
inventory, emissions projections, and analysis of emission reduction
strategies for the region.
This work is directed by Minnesota state legislation (Minn. Stat. § 473.859), which requires local comprehensive plans in the metropolitan area to include a climate mitigation element. The tools and data in this repository help the Metropolitan Council and its local government partners meet that requirement with consistent, regionally coherent methods.
The repository also supports Imagine
2050,
the regional development guide, which envisions the Twin Cities region
leading on climate change action. The GHG inventory and scenario
analysis in {ghg.gert} provide analytical grounding for tracking
progress toward Imagine 2050’s climate goals and for informing land use,
transportation, and infrastructure decisions across the region.
Additionally, this work supported the development of the Comprehensive Climate Action Plan (CCAP) with funding from the U.S. Environmental Protection Agency’s Climate Pollution Reduction Grant (CPRG).
You can install the development version of {ghg.gert} from
GitHub with:
# install.packages("remotes")
remotes::install_github("Metropolitan-Council/ghg.gert"){ghg.gert} requires a package only available on GitHub. Install it
separately:
remotes::install_github("Metropolitan-Council/councilR")The package is organized around six sector modules that can be run
individually or together via run_all_modules(). Every module accepts a
.selected_ctu argument (a city/township name, a county, or
"Twin Cities Region") and a .scenario argument, and returns a tidy
tibble (or list of tibbles) with columns for geog_name, geog_id,
var, scen, year, and value.
library(ghg.gert)
# Run every module for the full seven-county region under a business-as-usual scenario
results <- run_all_modules(
.selected_ctu = "Twin Cities Region",
.scenario = "BAU"
)
# Or run a single module — e.g., transportation for Minneapolis
mpls_transp <- run_module_transportation(
.selected_ctu = "Minneapolis",
.scenario = "alt"
)The run_all_modules() wrapper accepts every module’s parameters and
returns a named list with one element per module. See the individual
module functions below for the levers each one exposes.
{ghg.gert} is organized into six sector modules. Each module has a
top-level entry function (run_module_*() or run_scenario_*()), a set
of preloaded input datasets, and a collection of user-facing parameters
(prefixed with .) that represent policy levers or scenario
assumptions.
Estimates passenger and freight vehicle-miles traveled (VMT), direct and embodied GHG emissions, fuel use, and transportation costs across modes (light-duty vehicles, transit bus, transit rail, freight truck, freight rail, air/water/multi-modal, school bus, walk/bike). VMT is projected using elasticities of the built environment (“5D” variables: density, diversity, design, destination accessibility, distance to transit) and policy levers.
Key parameters:
- Fleet electrification:
.electric_scenario(electricity grid pathway),.aeo_scenario(EIA Annual Energy Outlook fuel-economy scenario), and other arguments passed toadj_fleet_shares()oradj_fleet_shares_stock(). - Pricing signals:
.vmt_fee,.payd_fee(pay-as-you-drive insurance),.gas_tax,.parking_price,.freight_parking_price,.cong_price(congestion pricing),.freight_vmt_fee. - Built environment (5D changes vs. baseline):
.pop_dens_pct_change,.emp_dens_pct_change,.land_use_diversity_pct_change,.intersection_design_pct_change,.intersection_density_pct_change,.job_access_pct_change,.transit_dist_pct_change. - Transit service and behavior:
.transit_service_pct,.transit_avo_pctand.pldv_avo_pct(vehicle occupancy shifts),.cbtp_prop_targeted(commuter-benefit / travel-demand-management reach),.cbtp_start_year. - Optional outputs: set
.calc_transp_costand.calc_transp_ghg_embodiedtoTRUEto compute those tables (they are off by default to keep runs fast).
Returns a named list: passenger, passenger_all, freight,
freight_all. Emissions are in metric tons CO₂-equivalent.
Projects residential and non-residential building energy use and associated GHG emissions at the city/township level, incorporating new construction, retrofits, and building electrification via heat pumps.
Key parameters:
- Residential retrofits and heat pumps:
.sf_heatpump_pct,.mf_heatpump_pct,.existing_sf_retrofit_pct,.existing_mf_retrofit_pct. - New construction quality:
.new_sf_homes_leed_gold_pct,.new_mf_homes_leed_gold_pct. - Non-residential:
.jobs_heatpump_pct,.existing_jobs_retrofit_pct,.new_jobs_leed_gold_pct. - Timing:
.baseline_year,.leed_start_year,.retrofit_start_year,.retrofit_end_year,.heatpump_start_year,.heatpump_end_year. - Toggles:
run_residential,run_non_residentialto control which sub-sectors run.
Returns a tibble with geog_name, geog_id, var, scen, year,
value.
Generates expected residential density from Thrive 2040 / Imagine 2050 planned land use inputs, and lets cities specify 2050 modifications that then propagate to the building energy and transportation modules.
Key parameters:
tb— planned land use table (defaults to the packagedplanned_land_use$ctu_planned_land_use_parcel).tb_strategy— optional alternative land use table; when supplied,land_use_update()blends the strategy into the baseline plan for the selected CTU..selected_ctu,.scenario.
Returns a small data frame of expected density by scenario for the
selected geography, consumed as .density_output by the building energy
module.
Projects agricultural GHG emissions from livestock, manure management, fertilizer, and cropland, and quantifies reductions from regenerative agriculture practices.
Key parameters:
- Land base:
cropland_decrease_2050. - Smart fertilizer:
.smart_fertilizer_current,.smart_fertilizer_goal,.smart_fertilizer_start_year. - Cover crops:
.cover_crops_current,.cover_crops_goal,.cover_crops_start_year. - No-till:
.no_till_current,.no_till_goal,.no_till_start_year. - Regenerative-ag ramp-up:
.regen_ag_start_year. - Toggles:
run_fertilizer,run_crops.
Returns a tibble with geog_name, geog_id, var, scen, year,
value.
Models carbon sequestration from ecosystem restoration and urban tree planting. Wetlands use GIS-constrained potential with an ambition slider; forests and prairies accept direct acreage commitments; community trees and pocket prairies are urban interventions.
Key parameters:
- Wetlands:
.restore_wetland(logical toggle),.wetland_ambition(0–100, share of GIS-identified potential). - Forests and prairies:
.forest_area_sqkm,.prairie_area_sqkm. - Urban trees:
.community_tree_count(capped at each CTU’smax_plantable_treesfromcommunity_tree_baseline). - Pocket prairies:
.pocket_prairie_pct(0–100 of urban grassland converted). - Timing:
.restoration_start,.restoration_end,.community_tree_start/_end,.pocket_prairie_start/_end.
Returns a data frame of sequestration projections by land-cover type and
year. Validation warnings are attached via
attr(result, "validation_warnings").
Projects emissions from municipal solid waste (landfill, incineration/waste-to-energy, organics, wastewater) and quantifies reductions from source reduction, diversion, and gas capture.
Key parameters:
- Source reduction:
.waste_reduction_pct,.waste_reduction_start,.waste_reduction_end. - Diversion mix (shares of remaining waste sent to each pathway):
.diverted_to_landfill_pct,.diverted_to_recycle_pct,.diverted_to_organics_pct,.diverted_to_wte_pct,.diverted_to_onsite_pct,.diverted_to_compost_pct. - Landfill methane recovery:
.methane_recovery_pct,.methane_recovery_start,.methane_recovery_end. - Organics processing:
.anaerobic_digestion_pct,.anaerobic_digestion_start,.anaerobic_digestion_end.
Returns a list of tibbles with inventory and projection columns
including value_activity, units_activity, value_emissions,
units_emissions, bau_activity, and bau_emissions.
Every module honors a few shared conventions:
.selected_ctu— geography selector: a city/township name, a county name,"Regional"(seven-county total), or"all"(every CTU)..scenario— scenario label attached to outputs. Use"BAU"for business-as-usual runs; any other string names an alternative policy scenario.- Baseline data are shipped with the package (see
data(package = "ghg.gert")); users normally only override the.-prefixed policy levers.
For deeper methodological documentation, see the vignettes in
vignettes/ and the technical guides in inst/documentation/.
Lead authors: @pawilfahrt, @eroten, @ksmiff33.
Contributors: @botanize, @christinasherpa24, @Dabria0208, @ehesch, @hongtonglin, @leonx075, @mcnamx, @naomigiancola, @limericksam, @zeyandell.
This project has been funded wholly or in part by the United States Environmental Protection Agency (EPA) under assistance agreement 00E03476 to the Metropolitan Council. The contents of this repository do not necessarily reflect the views and policies of the EPA, nor does the EPA endorse trade names or recommend the use of commercial products mentioned in this repository.
