MCMC Algorithm for Multivariate Ordinal Data with Scale Usage Heterogeneity
rscaleUsage
implements an MCMC algorithm for multivariate ordinal data with scale usage heterogeniety.
rscaleUsage(Data, Prior, Mcmc)
Data |
list(x, k) |
Prior |
list(nu, V, mubar, Am, gs, Lambdanu, LambdaV) |
Mcmc |
list(R, keep, nprint, ndghk, e, y, mu, Sigma, sigma, tau, Lambda) |
n = nrow(x)
individuals respond to p = ncol(x)
questions;
all questions are on a scale 1, …, k for respondent i and question j,
x_{ij} = d if c_{d-1} ≤ y_{ij} ≤ c_d where d = 1, …, k and c_d = a + bd + ed^2
y_i = mu + tau_i*iota + sigma_i*z_i with z_i ~ N(0, Sigma)
(tau_i, ln(sigma_i)) ~ N(φ, Lamda)
φ = (0, lambda_{22})
mu ~ N(mubar, Am^{-1})
Sigma ~ IW(nu, V)
Lambda ~ IW(Lambdanu, LambdaV)
e ~ unif on a grid
It is highly recommended that the user choose the default prior settings. If you wish to change prior settings and/or the grids used, please carefully read the case study listed in the reference below.
Data = list(x, k)
x: |
n x p matrix of discrete responses |
k: |
number of discrete rating scale options |
Prior = list(nu, V, mubar, Am, gs, Lambdanu, LambdaV)
[optional]
nu: |
d.f. parameter for Sigma prior (def: p + 3) |
V: |
scale location matrix for Sigma prior (def: nu*I) |
mubar: |
p x 1 vector of prior means (def: rep(k/2,p) ) |
Am: |
p x p prior precision matrix (def: 0.01*I) |
gs: |
grid size for sigma (def: 100) |
Lambdanu: |
d.f. parameter for Lambda prior (def: 20) |
LambdaV: |
scale location matrix for Lambda prior (def: (Lambdanu - 3)*Lambda) |
Mcmc = list(R, keep, nprint, ndghk, e, y, mu, Sigma, sigma, tau, Lambda)
[only R
required]
R: |
number of MCMC draws (def: 1000) |
keep: |
MCMC thinning parameter -- keep every keep th draw (def: 1) |
nprint: |
print the estimated time remaining for every nprint 'th draw (def: 100, set to 0 for no print) |
ndghk: |
number of draws for a GHK integration (def: 100) |
e: |
initial value (def: 0) |
y: |
initial values (def: x) |
mu: |
initial values (def: apply(y,2,mean) , a p-length vector) |
Sigma: |
initial value (def: var(y) ) |
sigma: |
initial values (def: rep(1,n) ) |
tau: |
initial values (def: rep(0,n) ) |
Lambda: |
initial values (def: matrix(c(4,0,0,.5),ncol=2) )
|
A list containing:
Sigmadraw |
R/keep x p*p matrix of Sigma draws – each row is the vector form of Sigma |
mudraw |
R/keep x p matrix of mu draws |
taudraw |
R/keep x n matrix of tau draws |
sigmadraw |
R/keep x n matrix of sigma draws |
Lambdadraw |
R/keep x 4 matrix of Lamda draws |
edraw |
R/keep x 1 vector of e draws |
tau_i, sigma_i are identified from the scale usage patterns in the p questions asked per respondent (# cols of x). Do not attempt to use this on datasets with only a small number of total questions.
Rob McCulloch (Arizona State University) and Peter Rossi (Anderson School, UCLA), perossichi@gmail.com.
For further discussion, see Case Study 3 on Overcoming Scale Usage Heterogeneity, Bayesian Statistics and Marketing by Rossi, Allenby, and McCulloch.
http://www.perossi.org/home/bsm-1
if(nchar(Sys.getenv("LONG_TEST")) != 0) {R=1000} else {R=5} set.seed(66) data(customerSat) surveydat = list(k=10, x=as.matrix(customerSat)) out = rscaleUsage(Data=surveydat, Mcmc=list(R=R)) summary(out$mudraw)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.