alarm-redist / fifty-states

Redistricting analysis for all 50 U.S. states
https://alarm-redist.github.io/fifty-states/
Other
9 stars 7 forks source link

Oregon 2010 Congressional Districts #177

Closed Aneetej closed 1 year ago

Aneetej commented 1 year ago

2010 Oregon Congressional Districts

Redistricting requirements

In Oregon, according to Or. Rev. Stat. § 188.010 of the state constitution, districts must:

  1. be contiguous
  2. have equal populations
  3. be geographically compact
  4. be connected by transportation links
  5. preserve county and municipality boundaries as much as possible

Algorithmic Constraints

We enforce a maximum population deviation of 0.5%. We use a pseudo-county constraint to help preserve county and municipality boundaries, as described below.

Data Sources

Data for Oregon comes from the ALARM Project's 2020 Redistricting Data Files.

Pre-processing Notes

Oregon does not submit precinct boundaries to the Census Bureau. The base shapefile consists of tracts, but where tracts are split by the enacted congressional districts, we create separate sub-tracts. As described above, counties not linked by a state or federal highway were manually disconnected. The full list of these counties can be found in the '01_prep_OR_cd_2010.R' file.

Simulation Notes

We sample 5,000 districting plans for Oregon across two independent runs of the SMC algorithm. To balance county and municipality splits, we create pseudocounties for use in the county constraint. These are counties, outside of Multnomah county. Within Multnomah county, each municipality is its own pseudocounty as well. Multnomah county were chosen since it is necessarily split by congressional districts.

Validation

OR 2010 final validation

SMC: 5,000 sampled plans of 5 districts on 834 units
`adapt_k_thresh`=0.985 • `seq_alpha`=0.5
`est_label_mult`=1 • `pop_temper`=0

Plan diversity 80% range: 0.35 to 0.75

R-hat values for summary statistics:
   pop_overlap      total_vap       plan_dev      comp_edge    comp_polsby      pop_white      pop_black       pop_hisp       pop_aian 
     1.0018453      1.0001369      1.0043743      1.0022470      1.0005272      1.0061739      1.0010765      1.0043509      1.0056432 
     pop_asian       pop_nhpi      pop_other        pop_two      vap_white      vap_black       vap_hisp       vap_aian      vap_asian 
     1.0000606      1.0011823      1.0003512      1.0018002      1.0037476      1.0012633      1.0049747      1.0039295      1.0001582 
      vap_nhpi      vap_other        vap_two pre_16_dem_cli pre_16_rep_tru pre_20_dem_bid pre_20_rep_tru uss_16_dem_wyd uss_16_rep_cal 
     1.0015294      1.0005987      1.0050048      1.0014088      1.0001919      1.0016342      1.0000447      1.0017933      1.0005970 
uss_20_dem_mer uss_20_rep_per gov_16_dem_bro gov_16_rep_pie gov_18_dem_bro gov_18_rep_bue atg_16_dem_ros atg_16_rep_cro atg_20_dem_ros 
     1.0016200      1.0001879      1.0015517      1.0007389      1.0011512      1.0022999      1.0013519      1.0010803      1.0015005 
atg_20_rep_cro sos_16_dem_ava sos_16_rep_ric sos_20_dem_fag sos_20_rep_tha         adv_16         adv_18         adv_20         arv_16 
     1.0002920      1.0012610      1.0026402      1.0015028      1.0003979      1.0014845      1.0011512      1.0015880      1.0008996 
        arv_18         arv_20  county_splits    muni_splits            ndv            nrv        ndshare          e_dvs         pr_dem 
     1.0022999      1.0002019      1.0008520      1.0009042      1.0014794      1.0005645      1.0001575      1.0001307      1.0002261 
         e_dem          pbias           egap 
     1.0010953      0.9999779      1.0005998 

Sampling diagnostics for SMC run 1 of 2 (5,000 samples)
         Eff. samples (%) Acc. rate Log wgt. sd  Max. unique Est. k 
Split 1     4,884 (97.7%)      8.5%        0.30 3,176 (100%)      6 
Split 2     4,745 (94.9%)     11.1%        0.42 3,098 ( 98%)      4 
Split 3     4,656 (93.1%)     13.4%        0.50 3,032 ( 96%)      3 
Split 4     4,608 (92.2%)      6.6%        0.54 2,733 ( 86%)      2 
Resample    3,455 (69.1%)       NA%        0.53 3,868 (122%)     NA 

Sampling diagnostics for SMC run 2 of 2 (5,000 samples)
         Eff. samples (%) Acc. rate Log wgt. sd  Max. unique Est. k 
Split 1     4,885 (97.7%)      8.5%        0.29 3,144 ( 99%)      6 
Split 2     4,742 (94.8%)     11.4%        0.42 3,051 ( 97%)      4 
Split 3     4,592 (91.8%)     13.5%        0.52 3,050 ( 97%)      3 
Split 4     4,524 (90.5%)      6.4%        0.56 2,754 ( 87%)      2 
Resample    2,880 (57.6%)       NA%        0.55 3,772 (119%)     NA 

Checklist

@CoryMcCartan @christopherkenny

christopherkenny commented 1 year ago

Hey Aneetej, thanks. Two things need addressing:

  1. There is a stray TODO in 01_prep that needs to be removed.
  2. The documentation states that you remove county boundaries that are not connected by roads. I don't see this in the current commit. (Was it deleted by chance?) All that needs to be done is replicate lines 113-131 of the 2020 file.. Those are listed below for your convenience. Then you can rerun the map object and sims, probably without any additional changes.
    disconn_cty <- function(adj, cty1, cty2) {
        v1 <- which(or_shp$county == str_c(cty1, " County"))
        if (length(v1) == 0) stop(cty1, "not found")
        v2 <- which(or_shp$county == str_c(cty2, " County"))
        if (length(v2) == 0) stop(cty1, "not found")
        vs <- tidyr::crossing(v1, v2)
        remove_edge(adj, vs$v1, vs$v2)
    }
    or_shp$adj <- or_shp$adj %>%
        disconn_cty("Curry", "Josephine") %>%
        disconn_cty("Benton", "Lane") %>%
        disconn_cty("Polk", "Lincoln") %>%
        disconn_cty("Marion", "Jefferson") %>%
        disconn_cty("Marion", "Wasco") %>%
        disconn_cty("Wallowa", "Baker") %>%
        disconn_cty("Morrow", "Grant") %>%
        disconn_cty("Crook", "Grant") %>%
        disconn_cty("Deschutes", "Harney") %>%
        disconn_cty("Deschutes", "Linn")