I have the following mata program to estimate parameters by exactly identified gmm
mata: mata clear
mata:
mata set matastrict on
void gmmrsk(string scalar yname, string scalar hname, ///
string scalar x2name, string scalar x1name)
{
real colvector y, coeff, coeffreduce, coeffstruc, c1, c2, c
real matrix h, x1, x2, xx, b11, b12, b21, b22, b
real scalar samvar, lambda
y = st_data(.,yname)
h = st_data(.,tokens(hname))
x2 = st_data(., tokens(x2name))
st_view(x1, .,tokens(st_local(x1name)))
lambda = 106.1196
// construct matrices for parameter estimation
// pieces are constructed and put together
// coefficient estimated
// first collect x into a single matrix
xx = x2, x1
// form sub-matrices of cross product matrix
b11 = h'h
b12 = h'xx
b21 = lambda*(xx'h)
b22 = xx'xx
c1 = h'y
c2 = xx'y
c = c1 \ c2
b = (b11 , b12) \ (b21, b22)
coeff = luinv(b)*c
// return coefficient vector to stata to bootstrap standard errors
st_matrix("coeff",coeff)
}
end
When I run this program with
mata: gmmrsk("share_riskyassets_broad","risktol_m risktol_f","wlt wlt2","x1name")
matrix dir
coeff[21,1]
x1name is a local macro containing the names of 17 variables, so 21 is the right dimension for coeff
When I place gmmrsk in an eclass program in order to bootstrap, as follows
. // Bootstrap gmm estimation to get standard errors
.
. capt prog drop gmmbarg
. prog def gmmbarg, eclass
1. mata: gmmrsk("share_riskyassets_broad","risktol_m risktol_f","wlt wlt2","x1name")
2. matrix b = coeff'
3. ereturn post b
4. ereturn local cmd = "bootstrap"
5. end
. gmmbarg
. matrix dir
coeff[4,1]
I have lost 17 coefficients, and I don't understand why I lost them. What have I done wrong in the program gmmbarg?
Thanks.
Carl Nelson
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/