Learn R Programming

redist (version 3.1.5)

redist_mergesplit_parallel: Parallel Merge-Split/Recombination MCMC Redistricting Sampler

Description

redist_mergesplit_parallel() runs redist_mergesplit() on several chains in parallel.

Usage

redist_mergesplit_parallel(
  map,
  nsims,
  chains = 1,
  warmup = floor(nsims/2),
  init_plan = NULL,
  counties = NULL,
  compactness = 1,
  constraints = list(),
  constraint_fn = function(m) rep(0, ncol(m)),
  adapt_k_thresh = 0.975,
  k = NULL,
  ncores = NULL,
  cl_type = "PSOCK",
  return_all = TRUE,
  init_name = NULL,
  verbose = TRUE,
  silent = FALSE
)

Arguments

map

A redist_map object.

nsims

The number of samples to draw, including warmup.

chains

the number of parallel chains to run. Each chain will have nsims draws. If init_plan is sampled, each chain will be initialized with its own sampled plan.

warmup

The number of warmup samples to discard.

init_plan

The initial state of the map, provided as a single vector to be shared across all chains, or a matrix with chains columns. If not provided, will default to the reference map of the map object, or if none exists, will sample a random initial state using redist_smc. You can also request a random initial state for each chain by setting init_plan="sample".

counties

A vector containing county (or other administrative or geographic unit) labels for each unit, which may be integers ranging from 1 to the number of counties, or a factor or character vector. If provided, the algorithm will generate maps tend to follow county lines. You may combine this with a Gibbs constraint on the number of county splits using the constraints parameter; see below. If no county-split considerations are desired, this parameter should be left blank.

compactness

Controls the compactness of the generated districts, with higher values preferring more compact districts. Must be nonnegative. See the 'Details' section for more information, and computational considerations.

constraints

A list containing information on constraints to implement. See the 'Details' section for more information.

constraint_fn

A function which takes in a matrix where each column is a redistricting plan and outputs a vector of log-weights, which will be added the the final weights.

adapt_k_thresh

The threshold value used in the heuristic to select a value k_i for each splitting iteration. Set to 0.9999 or 1 if the algorithm does not appear to be sampling from the target distribution. Must be between 0 and 1.

k

The number of edges to consider cutting after drawing a spanning tree. Should be selected automatically in nearly all cases.

ncores

the number of parallel processes to run. Defaults to the maximum available.

cl_type

the cluster type (see makeCluster()). Safest is "PSOCK", but "FORK" may be appropriate in some settings.

return_all

if TRUE return all sampled plans; otherwise, just return the final plan from each chain.

init_name

a name for the initial plan, or FALSE to not include the initial plan in the output. Defaults to the column name of the existing plan, or "<init>" if the initial plan is sampled.

verbose

Whether to print out intermediate information while sampling. Recommended.

silent

Whether to suppress all diagnostic information.

Value

A redist_plans object with all of the simulated plans, and an additional chain column indicating the chain the plan was drawn from.

Details

This function draws samples from a specific target measure, controlled by the compactness, constraints, and constraint_fn parameters.

Higher values of compactness sample more compact districts; setting this parameter to 1 is computationally efficient and generates nicely compact districts.

The constraints parameter allows the user to apply several common redistricting constraints without implementing them by hand. This parameter is a list, which may contain any of the following named entries:

  • status_quo: a list with two entries:

    • strength, a number controlling the tendency of the generated districts to respect the status quo, with higher values preferring more similar districts.

    • current, a vector containing district assignments for the current map.

  • hinge: a list with three entries:

    • strength, a number controlling the strength of the Voting Rights Act (VRA) constraint, with higher values prioritizing majority-minority districts over other considerations.

    • tgts_min, the target percentage(s) of minority voters in minority opportunity districts. Defaults to c(0.55).

    • min_pop, A vector containing the minority population of each geographic unit.

  • incumbency: a list with two entries:

    • strength, a number controlling the tendency of the generated districts to avoid pairing up incumbents.

    • incumbents, a vector of precinct indices, one for each incumbent's home address.

  • splits: a list with one entry:

    • strength, a number controlling the tendency of the generated districts to avoid splitting counties.

  • multisplits: a list with one entry:

    • strength, a number controlling the tendency of the generated districts to avoid splitting counties multiple times.

  • vra: a list with five entries, which may be set up using redist.constraint.helper:

    • strength, a number controlling the strength of the Voting Rights Act (VRA) constraint, with higher values prioritizing majority-minority districts over other considerations.

    • tgt_vra_min, the target percentage of minority voters in minority opportunity districts. Defaults to 0.55.

    • tgt_vra_other The target percentage of minority voters in other districts. Defaults to 0.25, but should be set to reflect the total minority population in the state.

    • pow_vra, which controls the allowed deviation from the target minority percentage; higher values are more tolerant. Defaults to 1.5

    • min_pop, A vector containing the minority population of each geographic unit.

All constraints are fed into a Gibbs measure, with coefficients on each constraint set by the corresponding strength parameters. The strength can be any real number, with zero corresponding to no constraint. The status_quo constraint adds a term measuring the variation of information distance between the plan and the reference, rescaled to [0, 1]. The hinge constraint takes a list of target minority percentages. It matches each district to its nearest target percentage, and then applies a penalty of the form \(\sqrt{max(0, tgt - minpct)}\), summing across districts. This penalizes districts which are below their target population. The incumbency constraint adds a term counting the number of districts containing paired-up incumbents. The splits constraint adds a term counting the number of counties which contain precincts belonging to more than one district. The vra constraint (not recommended) adds a term of the form \((|tgtvramin-minpct||tgtvraother-minpct|)^{powvra})\), which encourages districts to have minority percentages near either tgt_vra_min or tgt_vra_other. This can be visualized with redist.plot.penalty.

References

Carter, D., Herschlag, G., Hunter, Z., and Mattingly, J. (2019). A merge-split proposal for reversible Monte Carlo Markov chain sampling of redistricting plans. arXiv preprint arXiv:1911.01503.

DeFord, D., Duchin, M., and Solomon, J. (2019). Recombination: A family of Markov chains for redistricting. arXiv preprint arXiv:1911.05725.

Examples

Run this code
# NOT RUN {
data(fl25)
fl_map = redist_map(fl25, ndists=3, pop_tol=0.1)
sampled = redist_mergesplit_parallel(fl_map, nsims=100, chains=100)
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab