This function generates a sample from the posterior distribution of the measurement model of political support. Individual-level covariates may be included in the model. The details of the model are given under `Details'. See also Bullock et al. (2011).
endorse(Y, data, data.village = NA, village = NA, treat = NA, na.strings = 99, identical.lambda = TRUE, covariates = FALSE, formula.indiv = NA, hierarchical = FALSE, formula.village = NA, h = NULL, group = NULL, x.start = 0, s.start = 0, beta.start = 1, tau.start = NA, lambda.start = 0, omega2.start = .1, theta.start = 0, phi2.start = .1, kappa.start = 0, psi2.start = 1, delta.start = 0, zeta.start = 0, rho2.start = 1, mu.beta = 0, mu.x = 0, mu.theta = 0, mu.kappa = 0, mu.delta = 0, mu.zeta = 0, precision.beta = 0.04, precision.x = 1, precision.theta = 0.04, precision.kappa = 0.04, precision.delta = 0.04, precision.zeta = 0.04, s0.omega2= 1, nu0.omega2 = 10, s0.phi2 = 1, nu0.phi2 = 10, s0.psi2 = 1, nu0.psi2 = 10, s0.sig2 = 1, nu0.sig2 = 400, s0.rho2 = 1, nu0.rho2 = 10, MCMC = 20000, burn = 1000, thin = 1, mh = TRUE, prop = 0.001, x.sd = TRUE, tau.out = FALSE, s.out = FALSE, omega2.out = TRUE, phi2.out = TRUE, psi2.out = TRUE, verbose = TRUE, seed.store = FALSE, update = FALSE, update.start = NULL)
Y | a list of the variable names for the responses. It should
take the following form:
If |
---|---|
data | data frame containing the individual-level variables.
The cases must be complete, i.e., no |
data.village | data frame containing the village-level variables.
The cases must be complete, i.e., no |
village | character. The variable name of the village indicator in the individual-level data. If auxiliary information is included, this should correspond to the variable name of the units at which prediction is desired. |
treat | An optional matrix of non negative integers indicating
the treatment
status of each observation and each question.
Rows are observations
and columns are questions. 0 represents the control status while
positive integers indicate treatment statuses.
If |
na.strings | a scalar or a vector indicating the values of the
response variable that are to be interpreted as ``Don't Know'' or
``Refused to Answer.'' The value should not be |
identical.lambda | logical. If |
covariates | logical. If |
formula.indiv | a symbolic description specifying the individual level
covariates for the support parameter and the ideal points. The formula
should be one-sided, e.g. |
hierarchical | logical. IF |
formula.village | a symbolic description specifying the village level covariates for the support parameter and the ideal points. The formula should be one-sided. |
h | Auxiliary data functionality. Optional named numeric vector with length equal to number of groups. Names correspond to group labels and values correspond to auxiliary moments (i.e. to the known share of the sensitive trait at the group level). |
group | Auxiliary data functionality. Optional character string.
The variable name of the group indicator in the individual-level data
(e.g. |
x.start | starting values for the ideal points vector \(x\). If
|
s.start | starting values for the support parameter, \(s_ijk\).
If |
beta.start | starting values for the question related parameters,
\(\alpha_j\) and \(\beta_j\).
If |
tau.start | starting values for the cut points in the response
model. If |
lambda.start | starting values for the coefficients in the
support parameter model, \(\lambda_jk\).
If |
omega2.start | starting values for the variance of the support
parameters, \(\omega_{jk}^{2}\).
If set to a scalar, the starting values for
\(omega_{jk}^{2}\) will be the diagonal matrix with
the diagonal elements set to the scalar.
If |
theta.start | starting values for the means of the
\(\lambda_{jk}\) for each endorser.
If |
phi2.start | starting values for the covariance matrices of the
coefficients
of the support parameters, \(\Phi_{k}\).
\(\Phi_{k}\) is assumed to be a diagonal matrix.
If |
kappa.start | starting values for the coefficients on village level covariates in the
support parameter model, \(\kappa_k\).
If |
psi2.start | starting values for the variance of the village random intercepts in the support
parameter model, \(\psi_{k}^{2}\).
If |
delta.start | starting values for the coefficients on individual level covariates in the ideal
point model. Will be used only if |
zeta.start | starting values for the coefficients on village level covariates in the ideal
point model. Will be used only if |
rho2.start | numeric. starting values for the variance of the village random intercepts in the ideal point
model, \(\rho^{2}\). The default is |
mu.beta | the mean of the independent Normal prior on the
question related parameters. Can be either a scalar or a matrix of
dimension the number of questions times 2.
The default is |
mu.x | the mean of the independent Normal prior on the
question related parameters. Can be either a scalar or a vector of
the same length as the number of observations.
The default is |
mu.theta | the mean of the independent Normal prior on the
mean of the coefficients in the support parameter model.
Can be either a scalar or a vector of
the same length as the dimension of covariates.
The default is |
mu.kappa | the mean of the independent Normal prior on the
coefficients of village level covariates. Can be either a scalar or a matrix of
dimension the number of covariates times the number of endorsers.
If auxiliary information is included, the value of |
mu.delta | the mean of the independent Normal prior on the
the coefficients in the ideal point model.
Can be either a scalar or a vector of
the same length as the dimension of covariates.
The default is |
mu.zeta | the mean of the independent Normal prior on the
the coefficients of village level covariates in the ideal point model.
Can be either a scalar or a vector of
the same length as the dimension of covariates.
The default is |
precision.beta | the precisions (inverse variances) of the
independent Normal prior on the
question related parameters. Can be either a scalar or
a 2 \(\times\) 2 diagonal matrix.
The default is |
precision.x | scalar. The known precision of the
independent Normal distribution on the
ideal points.
The default is |
precision.theta | the precisions of the
independent Normal prior on the means of the coefficients
in the support parameter model. Can be either a scalar or
a vector of the same length as the dimension of covariates.
The default is |
precision.kappa | the precisions of the
independent Normal prior on the coefficients of village level covariates
in the support parameter model. Can be either a scalar or
a vector of the same length as the dimension of covariates.
If auxiliary information is included, the value of |
precision.delta | the precisions of the
independent Normal prior on the the coefficients
in the ideal point model. Can be either a scalar or
a square matrix of the same dimension as the dimension of
covariates.
The default is |
precision.zeta | the precisions of the
independent Normal prior on the the coefficients of village level covariates
in the ideal point model. Can be either a scalar or
a square matrix of the same dimension as the dimension of
covariates.
The default is |
s0.omega2 | scalar. The scale of the independent scaled
inverse- chi-squared
prior for the variance parameter in the support parameter model.
If auxiliary information is included, the value of |
nu0.omega2 | scalar. The degrees of freedom of the independent
scaled inverse-chi-squared
prior for the variance parameter in the support parameter model.
If auxiliary information is included, the value of |
s0.phi2 | scalar. The scale of the independent
scaled inverse-chi-squared
prior for the variances of the coefficients in
the support parameter model.
The default is |
nu0.phi2 | scalar. The degrees of freedom of the independent
scaled
inverse-chi-squared
prior for the variances of the coefficients in
the support parameter model.
The default is |
s0.psi2 | scalar. The scale of the independent
scaled inverse-chi-squared
prior for the variances of the village random intercepts in
the support parameter model.
The default is |
nu0.psi2 | scalar. The degrees of freedom of the independent
scaled
inverse-chi-squared
prior for the variances of the village random intercepts in
the support parameter model.
The default is |
s0.sig2 | scalar. The scale of the independent
scaled inverse-chi-squared
prior for the variance parameter in
the ideal point model.
The default is |
nu0.sig2 | scalar. The degrees of freedom of the independent
scaled
inverse-chi-squared
prior for the variance parameter in the ideal point model.
The default is |
s0.rho2 | scalar. The scale of the independent
scaled inverse-chi-squared
prior for the variances of the village random intercepts in
the ideal point model.
The default is |
nu0.rho2 | scalar. The degrees of freedom of the independent
scaled
inverse-chi-squared
prior for the variances of the village random intercepts in
the ideal point model.
The default is |
MCMC | the number of iterations for the sampler. The default is
|
burn | the number of burn-in iterations for the sampler. The
default is |
thin | the thinning interval used in the simulation. The default
is |
mh | logical. If |
prop | a positive number or a vector consisting of positive
numbers. The length of the vector should be the same as the number of
questions. This argument sets proposal variance for the
Metropolis-Hastings algorithm in sampling the cut points of the
response model. The default is |
x.sd | logical. If |
tau.out | logical. A switch that determines whether or not to
store the cut points in the response model. The default is
|
s.out | logical. If |
omega2.out | logical. If |
phi2.out | logical. If |
psi2.out | logical. If |
verbose | logical. A switch that determines whether or not to
print the progress of the chain and Metropolis acceptance ratios for
the cut points of the response model. The default is
|
seed.store | logical. If |
update | logical. If |
update.start | list. If the function is run to update a chain, the output
object of the previous run should be supplied. The default is |
The model takes the following form: Consider an endorsement experiment where we wish to measure the level of support for \(K\) political actors. In the survey, respondents are asked whether or not they support each of \(J\) policies chosen by researchers. Let \(Y_{ij}\) represent respondent \(i\)'s answer to the survey question regarding policy \(j\). Suppose that the response variable \(Y_{ij}\) is the ordered factor variable taking one of \(L_{j}\) levels, i.e., \(Y_{ij} \in \{0, 1, \dots, L_{j} - 1\}\) where \(L_{j} > 1\). We assume that a greater value of \(Y_{ij}\) indicates a greater level of support for policy \(j\). We denote an \(M\) dimensional vector of the observed characteristics of respondent \(i\) by \(Z_i\).
In the experiment, we randomly assign one of \(K\) political actors as an endorser to respondent \(i\)'s question regarding policy \(j\) and denote this treatment variable by \(T_{ij} \in \{0,1,\dots,K\}\). We use \(T_{ij}=0\) to represent the control observations where no political endorsement is attached to the question. Alternatively, one may use the endorsement by a neutral actor as the control group. The model for the response variable, \(Y_{ij}\), is given by, $$Y_{ij} = l \; {\rm if} \; \tau_{l} < Y^{*}_{ij} \le \tau_{l + 1}, $$ $$Y^{*}_{ij} \; | \; T_{ij} = k \sim \mathcal{N}(- \alpha_{j} + \beta_{j} (x_{i} + s_{ijk}), \; I) $$ where \(l \in \{0, 1, \dots, L_{j} \}, \tau_{0} = -\infty < \tau_{1} = 0 < \tau_{2} < \dots < \tau_{L_{j}} = \infty\). \(\beta_j\)'s are assumed to be positive.
The model for the support parameter, \(s_{ijk}\), is given by if \(T_{ij} \neq 0\), $$ s_{ijk} \sim \mathcal{N}(Z_i^{T} \lambda_{jk}, \; \omega_{jk}^2) $$ with covariates, and $$ s_{ijk} \sim \mathcal{N}(\lambda_{jk}, \; \omega_{jk}^2), $$ without covariates, for \(j = 1, \dots, J, \; k = 1, \dots, K\), and if \(T_{ij} = 0, \; s_{ijk} = 0\).
The \(\lambda\)'s in the support parameter model are modeled in the following hierarchical manner, $$ \lambda_{jk} \sim \mathcal{N}(\theta_k, \; \Phi_k) $$ for \(k = 1, \dots, K\).
If you set identical.lambda = FALSE
and hierarchical = TRUE
,
the model for \(s_{ijk}\) is if \(T_{ij} \neq 0\),
$$
s_{ijk} \sim \mathcal{N}(\lambda^{0}_{jk, village[i]} + Z_i^{T} \lambda_{jk}, \; \omega_{jk}^2)
$$
and
$$
\lambda^{0}_{jk, village[i]} \sim \mathcal{N}(V_{village[i]}^{T} \kappa_{jk}, \; \psi_{jk}^2)
$$
for \(k = 1, \dots, K\) and \(j = 1, \dots, J\). In addition,
\(\lambda\) and \(\kappa\) are modeled in the following
hierarchical manner,
$$
\lambda^{*}_{jk} \sim \mathcal{N}(\theta_k, \; \Phi_k)
$$
for \(k = 1, \dots, K\), where \(\lambda^{*}_{jk} =
(\lambda^{T}_{jk}, \kappa^{T}_{jk})^{T}\).
If you set identical.lambda = TRUE
and hierarchical = TRUE
,
the model for \(s_{ijk}\) is if \(T_{ij} \neq 0\),
$$
s_{ijk} \sim \mathcal{N}(\lambda^{0}_{k, village[i]} + Z_i^{T} \lambda_{k}, \; \omega_{k}^2)
$$
and
$$
\lambda^{0}_{k, village[i]} \sim \mathcal{N}(V_{village[i]}^{T} \kappa_{k}, \; \psi_{k}^2)
$$
for \(k = 1, \dots, K\).
If the covariates are included in the model, the model for the
ideal points is given by
$$
x_{i} \sim \mathcal{N}(Z_{i}^{T} \delta, \; \sigma_{x}^{2})
$$
for \(i = 1, \dots, N\) where \(\sigma_x^2\) is a known prior
variance.
If you set hierarchical = TRUE
,
the model is
$$
x_{i} \sim \mathcal{N}(\delta^{0}_{village[i]} + Z_i^{T} \delta, \; \sigma^2)
$$
and
$$
\delta^{0}_{village[i]} \sim \mathcal{N}(V_{village[i]}^{T} \zeta, \; \rho^2)
$$
for \(k = 1, \dots, K\).
Finally, the following independent prior distributions are placed on unknown parameters, $$ \alpha_j \sim \mathcal{N}(\mu_\alpha, \; \sigma_\alpha^2) $$ for \(j = 1, \dots, J\), $$ \beta_j \sim \mathcal{TN}_{\beta_j > 0}(\mu_\beta, \; \sigma_\beta^2) $$ for \(j = 1, \dots, J\), $$ \delta \sim \mathcal{N}(\mu_\delta, \; \Sigma_\delta), $$ $$ \theta_k \sim \mathcal{N}(\mu_\theta, \; \Sigma_\theta) $$ for \(k = 1, \dots, K\), $$ \omega_{jk}^2 \sim {\rm Inv-}\chi^{2}(\nu_{\omega}^0, \; s_{\omega}^0) $$ for \(j = 1, \dots, J\) and \(k = 1, \dots, K\), and $$ {\rm diag}(\Phi_k) \sim {\rm Inv-}\chi^{2}(\nu_{\Phi}^0, \; s_{\Phi}^0) $$ for \(k = 1, \dots, K\), where \(\Phi_k\) is assumed to be a diagonal matrix.
An object of class "endorse"
, which is a list containing the following
elements:
an "mcmc"
object. A sample from the posterior distribution
of \(\alpha\) and \(\beta\).
If x.sd = TRUE
, a vector of the standard deviation of
the ideal points in each draw. If x.sd = FALSE
, an mcmc
object that contains a sample from the posterior distribution of the
ideal points.
If s.out = TRUE
, an mcmc object that contains a sample
from the posterior distribution of \(s_{ijk}\). Variable
names are:
s(observation id)(question id)
.
If covariates = TRUE
, an mcmc object that contains
a sample from the posterior distribution of \(\delta\).
If tau.out = TRUE
, an mcmc object that contains a
sample from the posterior distribution of \(\tau\).
an mcmc object. A sample from the posterior distribution
of \(\lambda\). Variable names are:
lambda(question id)(group id).(covariate id)
.
an mcmc object. A sample from the posterior distribution of \(\theta\).
an mcmc object.
an mcmc object.
logical value indicating whether estimation incorporates auxiliary moments
integer count of the number of auxiliary moments
Bullock, Will, Kosuke Imai, and Jacob N. Shapiro. (2011) “Statistical Analysis of Endorsement Experiments: Measuring Support for Militant Groups in Pakistan,” Political Analysis, Vol. 19, No. 4 (Autumn), pp.363-384.
not_run({ data(pakistan) Y <- list(Q1 = c("Polio.a", "Polio.b", "Polio.c", "Polio.d", "Polio.e"), Q2 = c("FCR.a", "FCR.b", "FCR.c", "FCR.d", "FCR.e"), Q3 = c("Durand.a", "Durand.b", "Durand.c", "Durand.d", "Durand.e"), Q4 = c("Curriculum.a", "Curriculum.b", "Curriculum.c", "Curriculum.d", "Curriculum.e")) ## Varying-lambda non-hierarchical model without covariates endorse.out <- endorse(Y = Y, data = pakistan, identical.lambda = FALSE, covariates = FALSE, hierarchical = FALSE) ## Varying-lambda non-hierarchical model with covariates indiv.covariates <- formula( ~ female + rural) endorse.out <- endorse(Y = Y, data = pakistan, identical.lambda = FALSE, covariates = TRUE, formula.indiv = indiv.covariates, hierarchical = FALSE) ## Common-lambda non-hierarchical model with covariates indiv.covariates <- formula( ~ female + rural) endorse.out <- endorse(Y = Y, data = pakistan, identical.lambda = TRUE, covariates = TRUE, formula.indiv = indiv.covariates, hierarchical = FALSE) ## Varying-lambda hierarchical model without covariates div.data <- data.frame(division = sort(unique(pakistan$division))) div.formula <- formula(~ 1) endorse.out <- endorse(Y = Y, data = pakistan, data.village = div.data, village = "division", identical.lambda = FALSE, covariates = FALSE, hierarchical = TRUE, formula.village = div.formula) ## Varying-lambda hierarchical model with covariates endorse.out <- endorse(Y = Y, data = pakistan, data.village = div.data, village = "division", identical.lambda = FALSE, covariates = TRUE, formula.indiv = indiv.covariates, hierarchical = TRUE, formula.village = div.formula) ## Common-lambda hierarchical model without covariates endorse.out <- endorse(Y = Y, data = pakistan, data.village = div.data, village = "division", identical.lambda = TRUE, covariates = FALSE, hierarchical = TRUE, formula.village = div.formula) ## Common-lambda hierarchical model with covariates endorse.out <- endorse(Y = Y, data = pakistan, data.village = div.data, village = "division", identical.lambda = TRUE, covariates = TRUE, formula.indiv = indiv.covariates, hierarchical = TRUE, formula.village = div.formula) })