
Alpha-NOMINATE ideal points (Carroll et al. 2013)
Source:R/spatial_voting.R
morie_spatial_voting_alpha_nominate.RdBayesian alpha-NOMINATE: legislator \(i\) votes yea on roll call \(j\) with probability \(\Phi(u_{ij})\), where $$u_{ij} = Q_{ij} + \alpha (G_{ij} - Q_{ij}),$$ \(Q_{ij} = -\frac{1}{2} \beta w^2 (d^2_{iY} - d^2_{iN})\) is the quadratic and \(G_{ij} = \beta \{\exp(-\frac{1}{2} w^2 d^2_{iY}) - \exp(-\frac{1}{2} w^2 d^2_{iN})\}\) the Gaussian utility difference, and \(d_{iY}\), \(d_{iN}\) are the distances from the ideal point to the yea and nay outcomes. \(\alpha = 1\) is pure Gaussian utility, \(\alpha = 0\) pure quadratic; the posterior of \(\alpha\) is the quantity of interest. As in the reference implementation the weight \(w\) is fixed at 0.5, \(\beta\) has a flat prior on \((0, \infty)\) and \(\alpha\) a flat prior on \([0, 1]\). Ideal points, yea and nay locations carry the reference implementation's hierarchical penalty \(-x' S x / 2\), with \(S\) redrawn each sweep from an inverse Wishart with \(n - 1\) degrees of freedom and scale the cross-product of the current coordinates.
Usage
morie_spatial_voting_alpha_nominate(
votes,
n_dims = 1L,
n_samples = 500L,
burn_in = 100L,
seed = 42L,
thin = 1L,
lop = 0.025,
minvotes = 20L,
polarity = 1L,
constrain = FALSE
)Arguments
- votes
Legislator-by-roll-call matrix of 1 (yea), 0 (nay) and
NA(missing).- n_dims
Number of latent dimensions.
- n_samples
Number of retained draws.
- burn_in
Sweeps discarded before the first retained draw.
- seed
RNG seed.
- thin
Keep every
thin-th sweep after burn-in.- lop
Minimum minority share for a roll call to be kept.
- minvotes
Minimum number of kept roll calls a legislator must have voted on.
- polarity
Row index (one per dimension, recycled) of the legislator placed on the positive side.
- constrain
If
TRUE, fix \(\alpha = 1\) (Gaussian utility, the W-NOMINATE special case).
Value
List: ideal_points and ideal_sd (kept
legislators by dimension), yea_locations,
nay_locations, alpha (posterior mean),
alpha_interval (central 95\
identified draws: arrays X, Y, N with the draw
index first, and vectors beta, alpha),
legislators_used, votes_used, n_dims,
engine.
Details
Every coordinate, \(\beta\) and \(\alpha\) are updated by slice sampling (Neal 2003, stepping out with width 8 and at most 3 steps, then shrinkage). Coordinates that are conditionally independent – all legislators on one dimension, all yea (or nay) locations on one dimension – are sliced together, which gives the same chain law as updating them one at a time. Starting values are uniform on \((-1, 1)\), \(\beta = 10\) and \(\alpha = 0.7\).
The likelihood depends on distances only, so after sampling each draw
is centred on its legislators' mean and rotated (orthogonal
Procrustes, no dilation) onto the posterior mean configuration; the
sign of each dimension makes the polarity legislator positive.
Roll calls whose minority side is below lop and legislators
with fewer than minvotes votes on the kept roll calls are
dropped first, the screens the reference implementation applies
through W-NOMINATE.
Checked against the anominate package on a simulated chamber of 40 legislators and 120 roll calls (true \(\alpha = 0.5\)): posterior mean \(\alpha\) 0.314 against 0.325, \(\beta\) 3.50 against 3.48, and the posterior mean ideal points correlate at 0.9998.
References
Carroll, R., Lewis, J. B., Lo, J., Poole, K. T. and Rosenthal, H. (2013). The structure of utility in spatial models of voting. American Journal of Political Science 57(4), 1008-1028.
Neal, R. M. (2003). Slice sampling. Annals of Statistics 31(3), 705-767.
Examples
set.seed(1)
x <- seq(-1, 1, length.out = 20)
mid <- runif(30, -0.7, 0.7)
V <- outer(x, mid, ">") * 1
flip <- sample(length(V), 30)
V[flip] <- 1 - V[flip]
fit <- morie_spatial_voting_alpha_nominate(V, n_dims = 1L,
n_samples = 40L, burn_in = 20L, minvotes = 10L, polarity = 20L)
fit$alpha
#> [1] 0.9486054
# the ideal points keep the simulated order
cor(fit$ideal_points[, 1], x[fit$legislators_used])
#> [1] 0.9802366