[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: coefficients lost when mata code placed in eclass program

From   Glenn Goldsmith <>
Subject   st: coefficients lost when mata code placed in eclass program
Date   Mon, 17 Aug 2009 20:09:34 +0100


I assume that the problem is that your local x1name doesn't exist
inside the -gmmbarg- program, so x1 ends up being empty.

There are a number of ways to get around this. You could either:

1. define the local inside -gmmbarg-, between your -prog def- line and
your call to -gmmrsk()-
2. pass the varlist as an argument to -gmmbarg-
3. use a global instead.



"Nelson, Carl" <> wrote:

I have the following mata program to estimate parameters by exactly
identified gmm
mata: mata clear
	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



When I run this program with

mata: gmmrsk("share_riskyassets_broad","risktol_m risktol_f","wlt
matrix dir
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
  2. matrix b = coeff'
  3. ereturn post b
  4. ereturn local cmd = "bootstrap"
  5. end

. gmmbarg

. matrix dir

I have lost 17 coefficients, and I don't understand why I lost them.
What have I done wrong in the program gmmbarg?


Carl Nelson
*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index