Usage Examples - 25 Precincts into 3 Districts

No Population Constraint

```## Load data
library(redist)
data(algdat.pfull)

## Run the simulations
popvec = algdat.pfull\$precinct.data\$pop,
nsims = 10000,
ndists = 3)
```

20% Population Constraint

```## Load data
data(algdat.p20)

## -----------------------------------------------
## Run mcmc algorithm - hard population constraint
## (reject any sample where population parity > 20%)
## -----------------------------------------------
total_pop = algdat.p20\$precinct.data\$pop,
nsims = 10000,
pop_tol = 0.2,
ndists = 3)

## ---------------------------------------------------------------------
## Run mcmc algorithm - draws from gibbs defined by distance from parity
## (Run with no tempering)
## ---------------------------------------------------------------------
total_pop = algdat.p20\$precinct.data\$pop,
ndists = 3,
nsims = 10000,
constraint = "population",
constraintweights = 5.4)
## Reweight draws back to the uniform distribution
mcmc.out.gb <- redist.ipw(mcmc.out.gb, targetpop = .2)

## ---------------------------------------------------------------------
## Run mcmc algorithm - draws from gibbs defined by distance from parity
## (Run with simulated tempering, betas power law sequence of length 10
## from 0 to 1)
## Also including optional beta weights, to upweight prob of transitions
## to colder temperatures
## ---------------------------------------------------------------------
betaweights <- rep(NA, 10); for(i in 1:10){betaweights[i] <- 2^i}
popvec = algdat.p20\$precinct.data\$pop,
ndists = 3,
nsims = 10000,
constraint = "population",
constraintweights = 5.4,
temper = TRUE,
betaweights = betaweights)
mcmc.out.st <- redist.ipw(mcmc.out.st, targetpop = .2)
```

20% Population Constraint and Compactness Constraint

```## ----------------------------------------------------------
## Constrain on population and compactness with tempering,
## weight on population = 5.4 while weight on compactness = 3
## Also specifying argument for ssdmat, the distance matrix
## ----------------------------------------------------------
popvec = algdat.p20\$precinct.data\$pop,
ndists = 3,
nsims = 10000,
constraint = c("population", "compact"),
constraintweights = c(5.4, 3),
ssdmat = algdat.p20\$distancemat,
temper = TRUE,
betaweights = betaweights)
mcmc.out.st <- redist.ipw(mcmc.out.st.multiple, targetpop = .2)
```

20% Population Constraint and Compactness Constraint, using MPI

```## ----------------------------------------------------------
## Constrain on population and compactness with parallel tempering,
## weight on population = 5.4 while weight on compactness = 3
## Also specifying argument for ssdmat, the distance matrix.
## Save file as "redist_mpi.RData"
## ----------------------------------------------------------
redist.mcmc.mpi(
popvec = algdat.p20\$precinct.data\$pop,
ndists = 3,
nsims = 10000,
constraint = c("population", "compact"),
constraintweights = c(5.4, 3),
ssdmat = algdat.p20\$distancemat,
betaseqlength = 20,
savename = "redist_mpi",
verbose = TRUE
)

## Note that reweighting using redist.ipw() currently
## has to happen in a separate analysis file after
## redist.mcmc.mpi() is run and the output file is saved.
## We will change this in a future release to run the
## inverse probability reweighting inside of
## redist.mcmc.mpi().
```

A Sample slurm Script for Submitting MPI Jobs

```## ----------------------------------------------------------
## Sample slurm script for submitting an R script using
## redist.mcmc.mpi(). Set ntasks equal to the length of the
## beta sequence ladder plus one extra core.
## ----------------------------------------------------------

#!/usr/bin/env bash
#SBATCH -t 02:00:00
#SBATCH -J [jobname here]
#SBATCH -o log.%j
#SBATCH --mail-type=begin
#SBATCH --mail-type=end

echo '-------------------------------'
cd \${SLURM_SUBMIT_DIR}
echo \${SLURM_SUBMIT_DIR}
echo Running on host \$(hostname)
echo Time is \$(date)
echo SLURM_NODES are \$(echo \${SLURM_NODELIST})
echo '-------------------------------'
echo -e '\n\n'

mpiexec -np 1 R --no-save < [scriptname here].R
```

20% Population Constraint and Compactness Constraint, using Annealing

```## ----------------------------------------------------------
## Constrain on population and compactness with annealing,
## weight on population = 5.4 while weight on compactness = 3
## Also specifying argument for ssdmat, the distance matrix.
## Save file as "redist_anneal_[t].RData", where t is the
## SLURM array number.
##
## In addition, we no longer specify a "sims" argument.
## This temperature schedule involves simulating at the "hot"
## temperature (beta = 0) for 500 steps ("num_hot_steps"),
## then taking a linear annealing temperature schedule for
## 2000 steps ("num_annealing_steps"), and finally simulating
## at the cold temperature (beta = 1) for 500 steps ("num_cold_steps").
## Finally, we take the last draw of the algorithm and store it as output.
## ----------------------------------------------------------

redist.mcmc.anneal(
popvec = algdat.p20\$precinct.data\$pop,
ndists = 3,
num_hot_steps = 500, num_annealing_steps = 2000, num_cold_steps = 500,
constraint = c("population", "compact"),
constraintweights = c(5.4, 3),
ssdmat = algdat.p20\$distancemat,
savename = paste0("redist_anneal_", t)
)

## ----------------------------------------------------
## Note that reweighting using redist.ipw() currently
## has to happen in a separate analysis file after
## redist.mcmc.anneal() is run and the output file is saved.
## Below is sample code for combining multiple runs of
## redist.mcmc.anneal() back together, which should be run
## in a separate script. We can then run redist.ipw()
## on the combined simulations.
## ----------------------------------------------------
setwd("[directory with files]")
algout <- redist.combine.anneal("redist_anneal_")
algout_rw <- redist.ipw(algout, targetpop = .2)
```

A Sample slurm Script for Submitting Annealing Jobs

```## ----------------------------------------------------------
## Sample slurm script for submitting an R script using
## redist.mcmc.anneal(). Set array equal to the number
## of desired draws, although your slurm setup may cap
## the number of array jobs you can run at once. Here,
## we are requesting 1000 simulations.
## ----------------------------------------------------------

#!/usr/bin/env bash
#SBATCH -t 02:00:00
#SBATCH -J [jobname here]
#SBATCH -o log.%j
#SBATCH --mail-type=begin
#SBATCH --mail-type=end
#SBATCH --array=1-1000

echo '-------------------------------'
cd \${SLURM_SUBMIT_DIR}
echo \${SLURM_SUBMIT_DIR}
echo Running on host \$(hostname)
echo Time is \$(date)
echo SLURM_NODES are \$(echo \${SLURM_NODELIST})
echo '-------------------------------'
echo -e '\n\n'

srun Rscript ../[scriptname here].R
```

Try the redist package in your browser

Any scripts or data that you put into this service are public.

redist documentation built on June 16, 2022, 9:05 a.m.