Learn R Programming

bayesm (version 1.1-2)

rmultireg: Draw from the Posterior of a Multivariate Regression

Description

rmultireg draws from the posterior of a Multivariate Regression model with a natural conjugate prior.

Usage

rmultireg(Y, X, Bbar, A, nu, V)

Arguments

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

Value

  • A list of the components of a draw from the posterior
  • Bdraw of regression coefficient matrix
  • Sigmadraw of Sigma

concept

  • bayes
  • multivariate regression
  • simulation

Warning

This routine is a utility routine that does not check the input arguments for proper dimensions and type.

Details

Model: $Y=XB+U$. $cov(u_i) = Sigma$. $B$ is k x m matrix of coefficients. $Sigma$ is m x m covariance. Priors: $beta$ given $Sigma$ $\sim$ $N(betabar,Sigma (x) A^{-1})$. $betabar=vec(Bbar)$; $beta = vec(B)$ $Sigma$ $\sim$ IW(nu,V).

References

For further discussion, see Bayesian Statistics and Marketing by Allenby, McCulloch, and Rossi. http://gsbwww.uchicago.edu/fac/peter.rossi/research/bsm.html

See Also

rmultiregfp,init.rmultiregfp

Examples

Run this code
##
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,.5,.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(.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(.01,.05,.5,.95,.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(.01,.05,.5,.95,.99))
mat=rbind(as.vector(Sigma),mat); rownames(mat)[1]="Sigma"
print(mat)

Run the code above in your browser using DataLab