{smcl}
{* 5 Jan 2012}{...}
{viewerjumpto "Methods" "mcmcmixed##methods"}{...}
{hline}
help for {hi:mcmcmixed}
{hline}
{title:Syntax}
{p 8 18 2}
{cmd:mcmcmixed} {depvar} [{it:fe_equation}] [{cmd:||} {it:re_equation}] {cmd:,} {opth saving(filename)} {opt d0(#)} {opt delta0(name)} [{it:options}]
{p 4 4 2}
where the syntax of {it:fe_equation} is
{p 12 24 2}
[{indepvars}] {ifin} {weight} [{cmd:,} {opt noconstant}]
{p 4 4 2}
and the syntax of {it:re_equation} is
{p 12 24 2}
{it:{help varlist:levelvarlist}}{cmd::} [{varlist}] [{cmd:,} {opt noconstant}]
{synoptset 20 tabbed}{...}
{synopthdr}
{synoptline}
{syntab:Model}
{synopt :{opt d0(#)}}prior variance of regression error{p_end}
{synopt :{opt delta0(name)}}scalar or matrix specifying prior variance of random effects; relevant only if {it:re_equation} is specified{p_end}
{synopt :{opt noconstant}}suppress constant term{p_end}
{syntab:Results}
{synopt :{opth saving(filename)}}filename where results should be stored{p_end}
{synopt :{opt replace}}overwrite existing {it:{help filename}}{p_end}
{syntab:Markov chain}
{synopt :{opt iterate(#)}}number of iterations in chain; default is {cmd:iterate(100)}{p_end}
{synopt :{opt seed(#)}}random number generator seed; default is {cmd:seed(12345)}{p_end}
{synopt :{opt nolog}}suppress iteration log{p_end}
{synoptline}
{p 4 6 2}
{cmd:aweight}s and {cmd:fweight}s are allowed; see {help weight},
and see {help mcmcmixed##methods:methods} for an important note on how {cmd:aweight}s are interpreted.{p_end}
{title:Description}
{p 4 4 2}
{cmd:mcmcmixed} uses Markov chain Monte Carlo (MCMC) to sample from the posterior distribution of a normal linear mixed model.
If {it:re_equation} is not specified, {cmd:mcmcmixed} is identical to {cmd:mcmcreg}, which estimates a normal linear regression.
If {it:re_equation} is specified, the model allows the coefficients to vary across groups defined by {it:levelvarlist}.
{p 4 4 2}
{cmd:mcmcmixed} produces a file of draws from the posterior distribution of the model parameters.
Each observation in the file corresponds to an iteration of the sampler; each variable represents a different scalar parameter.
These variables are named as follows:
{p2col:{it:beta_*}} Coefficient on independent variable *.{p_end}
{p2col:{it:beta__cons}} Intercept (omitted if {cmd:noconstant} is specified in {it:fe_equation}).{p_end}
{p2col:{it:sigma2}} Variance of regression error.{p_end}
{p2col:{it:theta`i'_*}} Coefficient on independent variable * for group `i' of {it:levelvarlist}.{p_end}
{p2col:{it:theta`i'__cons}} Intercept for group `i' of {it:levelvarlist} (omitted if {cmd:noconstant} is specified in {it:re_equation}).{p_end}
{p2col:{it:Sigma_`j'_`j'}} Variance across groups of the `j'th coefficient in {it:re_equation} (where the constant, if included, is the final coefficient).{p_end}
{p2col:{it:Sigma_`j'_`k'}} Covariance across groups of the `j'th and `k'th coefficients in {it:re_equation}.{p_end}
{p 4 4 2}
The variable {it:iter} in the output file keeps track of iterations; {it:iter}=0 is the initial condition used to start the chain.
{p 4 4 2}
Right-hand-side variables can appear in {it:fe_equation}, {it:re_equation} or both.
If a variable appears only in {it:fe_equation}, it has the same coefficient for all groups, and this coefficient is reported in {it:beta_*}.
If a variable appears in both {it:fe_equation} and {it:re_equation}, it has a different coefficient for each group;
the mean across groups is reported in {it:beta_*}, and the group-specific deviation from the mean is reported in {it:theta`i'_*}.
If a variable appears only in {it:re_equation}, it has a different coefficient for each group, reported in {it:theta`i'_*};
the mean across groups is assumed be zero.
{p 4 4 2}
The group indexes {it:`i'} in {it:theta`i'_*} are obtained from {cmd: egen i=group({it:levelvarlist})}.
{title:Options}
{dlgtab:Model}
{phang}
{opt d0(#)} sets the prior variance of the regression errors. Because results are potentially sensitive to this prior, you are required to specify it yourself; there is no default value.
{phang}
{opt delta0(name)} sets the prior variance-covariance matrix of the group-specific coefficients.
Because results are potentially sensitive to this prior, you are required to specify it yourself; there is no default value.
{it:delta0} must be the name of a scalar, vector or matrix containing the prior.
If {it:delta0} is a scalar, the prior is {it:delta0}*I({it:Nz}), where {it:Nz} is the number of group-specific coefficients (including the intercept, unless {cmd:noconstant} is specified in {it:re_equation}); {it:delta0} must be positive.
If {it:delta0} is an {it:Nz}x1 or 1x{it:Nz} vector, the prior is {cmd:diag}({it:delta0}); all elements of {it:delta0} must be positive.
If {it:delta0} is an {it:Nz}x{it:Nz} matrix, the prior is {it:delta0}; this matrix must be symmetric and positive definite.
It is an error for {it:delta0} to be anything except a positive scalar; an {it:Nz}x1 or 1x{it:Nz} vector containing only positive numbers; or an {it:Nz}x{it:Nz} symmetric, positive-definite matrix.
The order of elements in {it:delta0} is the same as the order of the {varlist} specified in {it:re_equation}, with the intercept last if there is an intercept.
{phang}
{opt noconstant}; see
{helpb estimation options##noconstant:[R] estimation options}. If {cmd:noconstant} is specified, there must be at least one independent variable.
{dlgtab:Results}
{phang}
{opth saving(filename)} designates the location where the results should be saved.
{phang}
{opt replace} specifies that you want to overwrite {it:{help filename}} if it already exists.
{dlgtab:Markov chain}
{phang}
{opt iterate(#)} specifies how many iterations the chain should continue for.
{phang}
{opt seed(#)} sets the random number generator seed. Random numbers are used to initialize the sampler; thus, multiple independent chains can be obtained by running {cmd:mcmcreg} with different values of {cmd:seed}.
{phang}
{opt nolog} suppresses printing of an iteration log.
{marker methods}{...}
{title:Methods}
{p 4 4 2}
{cmd:mcmcreg} uses the Gibbs sampler. Standard uninformative conjugate priors are used: The prior for the regression coefficients is uninformative, the prior for the error variance {it:sigma^2} is InverseGamma(1/2, {it:d0}/2),
and the prior for the variance-covariance matrix of group-specific coefficients {it:Sigma} is InverseWishart(1+{it:Ng},{it:delta0}), where {it:Ng} is the number of groups.
See Chib (2001, algorithm 16) for a textbook exposition.
{p 4 4 2}
The sampler is initialized with guesses for {it:sigma^2} and {it:Sigma} obtained as follows.
Let {it:y} be the dependent variable, let {it:x} be the independent variables in {it:fe_equation}, and let {it:z} be the independent variables in {it:re_equation}.
Let {it:beta} be the estimated coefficient vector in a frequentist pooled least squares regression of {it:y} on {it:x}.
For each group {it:i}, let {it:theta_i} be the posterior mean of the coefficient vector in a Bayesian least squares regression of {it:y}-{it:x}*{it:beta} on {it:z}
using the data from group {it:i}, where the prior for {it:theta_i} is N(0,{it:delta0}).
The initial guess for the inverse of {it:Sigma} is drawn from Wishart(1+{it:Ng},inv(inv({it:delta0})+{it:S}*{it:Ng})),
where {it:S} is the observed variance-covariance matrix of the {it:theta_i}'s.
The initial guess for {it:sigma^2} is drawn from InverseGamma((1+{it:df})/2,({it:d0}+{it:SSR})/2),
where {it:df} is the number of observations (or the sum of weights if you use {cmd:fweight}s) and
{it:SSR} is the sum of squares of {it:y}-{it:x}*{it:beta}-{it:z}*{it:theta_i}.
{p 4 4 2}
{cmd:aweight}s are interpreted as scaling the variances of the regression error and all of the random effects.
That is, if you specify {cmd:aweight}s, they apply to both {it:fe_equation} and {it:re_equation}.
A future version may provide the ability to specify {cmd:aweight}s separately for the two equations.
{title:Examples}
{p 4 4 2}
Manufacturer-specific intercepts:
{phang2}{cmd:. scalar mydelta0=0.01}{p_end}
{phang2}{cmd:. sysuse auto}{p_end}
{phang2}{cmd:. generate manuf=cond(strpos(make," ")>0,substr(make,1,strpos(make," ")-1),make)}{p_end}
{phang2}{cmd:. mcmcmixed mpg weight foreign || manuf:, saving(mcmcmixed_auto1.dta) d0(0.01) delta0(mydelta0)}{p_end}
{phang2}{cmd:. use mcmcmixed_auto1.dta, clear}{p_end}
{phang2}{cmd:. list in 1/5}{p_end}
{phang2}{cmd:. summarize *}{p_end}
{p 4 4 2}
Manufacturer-specific intercept and manufacturer-specific coefficient on {it:weight}, same prior variance on each manufacturer-specific parameter:
{phang2}{cmd:. scalar mydelta0=0.01}{p_end}
{phang2}{cmd:. sysuse auto}{p_end}
{phang2}{cmd:. generate manuf=cond(strpos(make," ")>0,substr(make,1,strpos(make," ")-1),make)}{p_end}
{phang2}{cmd:. mcmcmixed mpg weight foreign || manuf:weight, saving(mcmcmixed_auto2.dta) d0(0.01) delta0(mydelta0)}{p_end}
{phang2}{cmd:. use mcmcmixed_auto2.dta, clear}{p_end}
{phang2}{cmd:. list in 1/5}{p_end}
{phang2}{cmd:. summarize *}{p_end}
{p 4 4 2}
Manufacturer-specific intercept and manufacturer-specific coefficient on {it:weight}, different prior variance on each manufacturer-specific parameter:
{phang2}{cmd:. matrix mydelta0=(1,0.01)}{p_end}
{phang2}{cmd:. sysuse auto}{p_end}
{phang2}{cmd:. generate manuf=cond(strpos(make," ")>0,substr(make,1,strpos(make," ")-1),make)}{p_end}
{phang2}{cmd:. mcmcmixed mpg weight foreign || manuf:weight, saving(mcmcmixed_auto3.dta) d0(0.01) delta0(mydelta0)}{p_end}
{phang2}{cmd:. use mcmcmixed_auto3.dta, clear}{p_end}
{phang2}{cmd:. list in 1/5}{p_end}
{phang2}{cmd:. summarize *}{p_end}
{p 4 4 2}
When estimating models by MCMC, it is good practice to check for convergence by running multiple independent chains.
{cmd:mcmcmixed} will generate different chains when run repeatedly with different values of {cmd:seed(#)};
see {help mcmcreg##examples} for an example of how to run multiple chains, and see {help mcmcconverge},
available in the SSC package {cmd:mcmcstats}, for useful statistics for checking convergence once you have run multiple chains.
{p 4 4 2}
It is also good practice to drop early iterations, before convergence was achieved, when describing the posterior distribution.
See {help mcmcsummarize}, available in the SSC package {cmd:mcmcstats}, for a convenient way to describe the posterior distribution.
{title:Saved results}
{p 4 4 2}
{cmd:mcmcmixed} saves the following in {cmd:e()}:
{synoptset 20 tabbed}{...}
{p2col 5 20 24 2: Scalars}{p_end}
{synopt:{cmd:e(N)}}number of observations{p_end}
{synoptset 20 tabbed}{...}
{p2col 5 20 24 2: Macros}{p_end}
{synopt:{cmd:e(cmd)}}{cmd:mcmcreg}{p_end}
{synopt:{cmd:e(cmdline)}}command as typed{p_end}
{synopt:{cmd:e(depvar)}}name of dependent variable{p_end}
{synopt:{cmd:e(wtype)}}weight type{p_end}
{synopt:{cmd:e(wexp)}}weight expression{p_end}
{synoptset 20 tabbed}{...}
{p2col 5 20 24 2: Functions}{p_end}
{synopt:{cmd:e(sample)}}marks estimation sample{p_end}
{p2colreset}{...}
{title:Author}
{p 4 4 2}
Sam Schulhofer-Wohl, Federal Reserve Bank of Minneapolis, sschulh1.work@gmail.com.
The views expressed herein are those of the author and not necessarily those of the Federal Reserve Bank of Minneapolis or the Federal Reserve System.
{title:Reference}
{phang}
Chib, Siddhartha, 2001. "Markov Chain Monte Carlo Methods: Computation and Inference." In {it:Handbook of Econometrics}, vol. 5, ed. James J. Heckman and Edward Leamer, 3569-649. Amsterdam: Elsevier.{p_end}