endorse {endorse} | R Documentation |
Fitting the Measurement Model of Political Support via Markov Chain Monte Carlo
Description
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).
Usage
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)
Arguments
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 |
s.start |
starting values for the support parameter, |
beta.start |
starting values for the question related parameters,
|
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, |
omega2.start |
starting values for the variance of the support
parameters, |
theta.start |
starting values for the means of the
|
phi2.start |
starting values for the covariance matrices of the
coefficients
of the support parameters, |
kappa.start |
starting values for the coefficients on village level covariates in the
support parameter model, |
psi2.start |
starting values for the variance of the village random intercepts in the support
parameter model, |
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, |
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 |
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 |
Details
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.
Value
An object of class "endorse"
, which is a list containing the following
elements:
beta |
an |
x |
If |
s |
If
|
delta |
If |
tau |
If |
lambda |
an mcmc object. A sample from the posterior distribution
of
|
theta |
an mcmc object. A sample from the posterior distribution
of |
kappa |
an mcmc object. |
zeta |
an mcmc object. |
Note that the posterior sample of all parameters are NOT
standardized. In making posterior inference, each parameter should be
divided by the standard deviation of x (in the default setting, it is
given as "x") or by \sigma^2
(in the default setting, it
is given as "sigma2").
Also note that \alpha
and the intercept in
\delta
(or, if the model is hierarchical, the intercept
in \zeta
) are not identified. Instead,
- \alpha + \beta * \delta_0
or, if the model is hierarchical,
- \alpha + \beta * \zeta_0
is identified after either of the above standardization, where
\delta_0
and \zeta_0
denote the
intercepts.
When using the auxiliary data functionality, the following objects are included:
aux |
logical value indicating whether estimation incorporates auxiliary moments |
nh |
integer count of the number of auxiliary moments |
Author(s)
Yuki Shiraito, Department of Political Science, University of Michigan shiraito@umich.edu
Kosuke Imai, Department of Government and Statistics, Harvard University Imai@Harvard.Edu, https://imai.fas.harvard.edu
References
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.
Examples
## 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)
## End(Not run)