rhierLinearModel           package:bayesm           R Documentation

_G_i_b_b_s _S_a_m_p_l_e_r _f_o_r _H_i_e_r_a_r_c_h_i_c_a_l _L_i_n_e_a_r _M_o_d_e_l

_D_e_s_c_r_i_p_t_i_o_n:

     'rhierLinearModel' implements a Gibbs Sampler for hierarchical
     linear models.

_U_s_a_g_e:

     rhierLinearModel(Data, Prior, Mcmc)

_A_r_g_u_m_e_n_t_s:

    Data: list(regdata,Z) (Z optional). 

   Prior: list(Deltabar,A,nu.e,ssq,nu,V)  (optional).

    Mcmc: list(R,keep) (R required).

_D_e_t_a_i_l_s:

     Model: length(regdata) regression equations. 
      y_i = X_ibeta_i + e_i. e_i ~ N(0,tau_i).  nvar X vars in each
     equation. 

     Priors:
      tau_i ~ nu.e*ssq_i/chi^2_{nu.e}.  tau_i is the variance of e_i.
      beta_i ~ N(ZDelta[i,],V_{beta}). 
      Note:  ZDelta is the matrix Z * Delta; [i,] refers to ith row of
     this product.

     vec(Delta) given V_{beta} ~ N(vec(Deltabar),V_{beta} (x) A^{-1}).
      V_{beta} ~ IW(nu,V). 
      Delta, Deltabar are nz x nvar.  A is nz x nz.  V_{beta} is nvar x
     nvar.

     Note: if you don't have any z vars, set Z=iota (nreg x 1).

     List arguments contain:

   '_r_e_g_d_a_t_a' list of lists with X,y matrices for each of
        length(regdata) regressions

   '_r_e_g_d_a_t_a[[_i]]$_X' X matrix for equation i 

   '_r_e_g_d_a_t_a[[_i]]$_y' y vector for equation i 

   '_D_e_l_t_a_b_a_r' nz x nvar matrix of prior means (def: 0)

   '_A' nz x nz matrix for prior precision (def: .01I)

   '_n_u._e' d.f. parm for regression error variance prior (def: 3)

   '_s_s_q' scale parm for regression error var prior (def: var(y_i))

   '_n_u' d.f. parm for Vbeta prior (def: nvar+3)

   '_V' Scale location matrix for Vbeta prior (def: nu*I)

   '_R' number of MCMC draws

   '_k_e_e_p' MCMC thinning parm: keep every keepth draw (def: 1)

_V_a_l_u_e:

     a list containing 

betadraw: nreg x nvar x R/keep array of individual regression coef
          draws

 taudraw: R/keep x nreg array of error variance draws

Deltadraw: R/keep x nz x nvar array of Deltadraws

Vbetadraw: R/keep x nvar*nvar array of Vbeta draws

_A_u_t_h_o_r(_s):

     Peter Rossi, Graduate School of Business, University of Chicago,
     Peter.Rossi@ChicagoGsb.edu.

_R_e_f_e_r_e_n_c_e_s:

     For further discussion, see _Bayesian Statistics and Marketing_ by
     Rossi, Allenby and McCulloch, Chapter 3. 
      <URL:
     http://gsbwww.uchicago.edu/fac/peter.rossi/research/bsm.html>

_E_x_a_m_p_l_e_s:

     ##
     if(nchar(Sys.getenv("LONG_TEST")) != 0) {R=2000} else {R=10}

     nreg=100; nobs=100; nvar=3
     Vbeta=matrix(c(1,.5,0,.5,2,.7,0,.7,1),ncol=3)
     Z=cbind(c(rep(1,nreg)),3*runif(nreg)); Z[,2]=Z[,2]-mean(Z[,2])
     nz=ncol(Z)
     Delta=matrix(c(1,-1,2,0,1,0),ncol=2)
     Delta=t(Delta) # first row of Delta is means of betas
     Beta=matrix(rnorm(nreg*nvar),nrow=nreg)%*%chol(Vbeta)+Z%*%Delta
     tau=.1
     iota=c(rep(1,nobs))
     regdata=NULL
     for (reg in 1:nreg) { X=cbind(iota,matrix(runif(nobs*(nvar-1)),ncol=(nvar-1)))
             y=X%*%Beta[reg,]+sqrt(tau)*rnorm(nobs); regdata[[reg]]=list(y=y,X=X) }

     nu.e=3
     ssq=NULL
     for(reg in 1:nreg) {ssq[reg]=var(regdata[[reg]]$y)}
     nu=nvar+3
     V=nu*diag(c(rep(1,nvar)))
     A=diag(c(rep(.01,nz)),ncol=nz)
     Deltabar=matrix(c(rep(0,nz*nvar)),nrow=nz)

     Data=list(regdata=regdata,Z=Z)
     Prior=list(Deltabar=Deltabar,A=A,nu.e=nu.e,ssq=ssq,nu=nu,V=V)
     Mcmc=list(R=R,keep=1)
     out=rhierLinearModel(Data=Data,Mcmc=Mcmc)

     cat(" Deltadraws ",fill=TRUE)
     mat=apply(out$Deltadraw,2,quantile,probs=c(.01,.05,.5,.95,.99))
     mat=rbind(as.vector(Delta),mat); rownames(mat)[1]="delta"; print(mat)
     cat(" Vbetadraws ",fill=TRUE)
     mat=apply(out$Vbetadraw,2,quantile,probs=c(.01,.05,.5,.95,.99))
     mat=rbind(as.vector(Vbeta),mat); rownames(mat)[1]="Vbeta"; print(mat)

