Synthetic Population - bellevuewa/BKRCast GitHub Wiki
BKRCast is built on PSRC's SoundCast, leveraging many inputs borrowed from PSRC. the present synthetic population used in BKRCast is generated and supplied by PSRC. As part of future plan, the City is working towards the capability to independently run PopulationSim in-house. This would involve generating synthetic population and allocating synthesized households to parcels using in-house developed allocation tool.
PopulationSim
PopulationSim, developed by RSG, is the latest implementation of population sythesizer. PSRC has its own forked version and our implementation is forked directly from RSG. PopulationSim is set to replace SynthPop as primary population synthesizer for both SoundCast and BKRCast.
In BKRCast, PopulationSim takes on the role of generating synthetic population not only for the base year but also for future years. We make assumptions that future population characteristics remain consistent with the present. While our approach may not be as intricate as PSRC's, it eliminates the need for Urbansim modeling, streamlining the overall synthesizing procedure.
Methodologically, our approach involves deriving the number of household and persons by census blockgroup, drawing from SoundCast's base year and future year (RTP) synthetic population. Subsequently, we employ interpolation techniques on both ends to determine the number of household and persons for an intermediate horizon year. Inside BKR area, this interpolation is replaced with local housing estimates. Using this synthesized data as control total, we execute PopulationSim to generate a synthetic population that aligns with the characteristics of the intermediate horizon year. This method ensures a smooth and realistic transition between the base year and future year synthetic population, providing a coherent representation for the specified horizon year. Additionally, it remains consistent with our MPO assumptions for areas outside of BKR.
Synthetic Population for Base Year (Outdated)
Below are the major steps to create a base year synthetic population from PopulationSim.
- Download seed files (households and persons) from PUMPS data. They are disaggregate population samples that include demographic variables corresponding to each marginal control variable (household size, income, etc). This dataset includes all seed households and persons available state-wide. Run the python tool
filter_seed_hhs_persons_by_puma.py
to retrieve data only in BKRCast region (counties of King, Snohomish, Pierce and Kitsap).
- Get local household forecast in parcel level from partner cities. Data will be aggregated to blockgroups as control total to create synthetic population, and be used to allocate households to parcels as well. Number of households in either parcel level or blockgroup level is acceptable. Either of them will generate satisfactory synthetic population. Parcel level data is preferred though because they are very useful in household allocation.
- Download control file, or base-year marginal distribution of person and households through American Community Survey (ACS) using the tool named
census_getter
, developed by PSRC. The control file provides rich information about the distribution of various important household characteristics within each census block group. - Download estimates from OFM SAEP program.
- Run
generate_COB_local_hhs_estimate.py
. This script will convert from dwelling units estimated by local jurisdictions to households, and aggregate number of households to census blockgroup level. You may need to runprepare_land_use_step_1.py
first if you haven't done so. After runningprepare_land_use_step_1.py
, manually copy updatedkc_housingUnits_file
to theworking_folder
ofgenerate_COB_local_hhs_estimate.py
.
- Run the python tool
baseyear_synthetic_pop_aggregate_by_blockgroup.py
to generate control files that will be used as inputs to PopulationSim. This tool will update households and persons by blockgroup in the downloaded marginal distribution from ACS with SAEP data or local estimate from partner cities (if provided).
- Run
PopulationSim
. PopulationSim is able to synthesize a population that matches multidimensional distribution presented in the control file at the block group level. - Run python tool
parcelization.py
to allocate households to parcels.
Creation of future year synthetic population is a little more complicated, because we have to keep somewhat consistency with base year population. Our solution is to rerun PopulationSim only on the incremental growth, and add these new households to the base year population.
Synthetic Population for Concurrency (Outdated)
- Run
create_popsim_control_file_from_hhs_growth.py
to generate a PopulationSim control file only for the incremental growth of households. - Run PopulationSim program to synthesize households and population only for the incremental growth.
- Run
parcelization.py
to allocate the incremental growth of households to parcels. - Run
merge_two_synthetic_populations.py
to add the newly created synthetic population (the incremental growth only) and the base.
Synthetic Population for Other Future Scenarios (Outdated)
If the future horizon year matches PSRC's future horizon year, we can skip the step 1 and use PSRC's synthetic population as base, and replace number of households and persons with local estimate. If the PSRC's synthetic population is based on PSRC's TAZ system, you need to run psrc2bkr_hhs.py
to convert it to BKRCast TAZ system.
- Run
interpolate_hhs_and_persons_by_GEOID_btw_two_horizon_years.py
to interpolate number of households and persons by blockgroup (GEOID10) between PSRC's 2035 and 2014 synthetic population.
- Run
generate_COB_local_hhs_estimate.py
. This script will convert from dwelling units estimated by local jurisdictions to households, and aggregate number of households to census blockgroup level. You may need to runprepare_land_use_step_1.py
first if you haven't done so.
- Run the python tool
baseyear_synthetic_pop_aggregate_by_blockgroup.py
to generate control files that will be used as inputs to PopulationSim. This tool will update households and persons by blockgroup in the downloaded marginal distribution from ACS with SAEP data or local estimate from partner cities (if provided).
- Run
PopulationSim
. PopulationSim is able to synthesize a population that matches multidimensional distribution presented in the control file at the block group level. - Run python tool
parcelization.py
to allocate households to parcels.