Draw from the Posterior of a Multivariate Regression
rmultireg
draws from the posterior of a Multivariate Regression model with a natural conjugate prior.
rmultireg(Y, X, Bbar, A, nu, V)
Y |
n x m matrix of observations on m dep vars |
X |
n x k matrix of observations on indep vars (supply intercept) |
Bbar |
k x m matrix of prior mean of regression coefficients |
A |
k x k Prior precision matrix |
nu |
d.f. parameter for Sigma |
V |
m x m pdf location parameter for prior on Sigma |
Model:
Y = XB + U with cov(u_i) = Σ
B is k x m matrix of coefficients; Σ is m x m covariance matrix.
Priors:
β | Σ ~ N(betabar, Σ(x) A^{-1})
betabar = vec(Bbar); β = vec(B)
Σ ~ IW(nu, V)
A list of the components of a draw from the posterior
B |
draw of regression coefficient matrix |
Sigma |
draw of Sigma |
This routine is a utility routine that does not check the input arguments for proper dimensions and type.
Peter Rossi, Anderson School, UCLA, perossichi@gmail.com.
For further discussion, see Chapter 2, Bayesian Statistics and Marketing by Rossi, Allenby, and McCulloch.
http://www.perossi.org/home/bsm-1
if(nchar(Sys.getenv("LONG_TEST")) != 0) {R=2000} else {R=10} set.seed(66) n =200 m = 2 X = cbind(rep(1,n),runif(n)) k = ncol(X) B = matrix(c(1,2,-1,3), ncol=m) Sigma = matrix(c(1, 0.5, 0.5, 1), ncol=m) RSigma = chol(Sigma) Y = X%*%B + matrix(rnorm(m*n),ncol=m)%*%RSigma betabar = rep(0,k*m) Bbar = matrix(betabar, ncol=m) A = diag(rep(0.01,k)) nu = 3 V = nu*diag(m) betadraw = matrix(double(R*k*m), ncol=k*m) Sigmadraw = matrix(double(R*m*m), ncol=m*m) for (rep in 1:R) { out = rmultireg(Y, X, Bbar, A, nu, V) betadraw[rep,] = out$B Sigmadraw[rep,] = out$Sigma } cat(" Betadraws ", fill=TRUE) mat = apply(betadraw, 2, quantile, probs=c(0.01, 0.05, 0.5, 0.95, 0.99)) mat = rbind(as.vector(B),mat) rownames(mat)[1] = "beta" print(mat) cat(" Sigma draws", fill=TRUE) mat = apply(Sigmadraw, 2 ,quantile, probs=c(0.01, 0.05, 0.5, 0.95, 0.99)) mat = rbind(as.vector(Sigma),mat); rownames(mat)[1]="Sigma" print(mat)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.