Dear Ben,
Fantastic! Thank you. Actually, for the moment I am going to stick with
the first solution because I need to do it for three sets of results
which are exactly the same (so I might make solution 1, a little
program).
The problem that I have with turning solution 2 to a program is that it
is very much dependent on the order of the variables and the fact that
there are some variables that need to be treated separately. I have an
idea of how to go about it but I think it would take me much more time
than the first solution.
One last thing. Do you know if the problem with the ereturn is that
-ereturn post- does not in general return matrices with missing values
or is it specifically for -e(b)-? Any particular reason?
Thanks a lot again
Manos
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Ben Jann
Sent: 14 June 2007 18:29
To: [email protected]
Subject: Re: st: Creating output table after -mfx-
Manos, I have two solutions for you. None of them is simple, but they
work. The first is to use separate -estout- calls to produce the three
parts of the table and append them in a file:
**********begin example**********
. clear
. set obs 200
obs was 0, now 200
. set seed 125
. gen pid=_n
. expand 3
(400 observations created)
. bys pid: gen y=uniform() >0.5
. bys pid: gen x1=invnormal(uniform())
. bys pid: gen x2=uniform()
. bys pid: gen z=invnormal(uniform())
. gen k=1 if z>-10 & z<-0.5
(416 missing values generated)
. replace k=2 if z>=-0.5 & z<0.8
(293 real changes made)
. replace k=3 if z>=0.8 & z<10
(123 real changes made)
. qui tab k, gen(t)
. qui xtprobit y x1 x2 t2 t3 , i(pid)
. qui mfx, predict(pu0) varlist(x1 x2)
. eststo x1x2
. qui mfx, predict(pu0) varlist(t2) at(t3=0)
. eststo t2
. qui mfx, predict(pu0) varlist(t3) at(t2=0)
. eststo t3
. estout x1x2 using temp.txt, style(fixed) /*
> */ margin keep(x1 x2) cells(b se(par)) /* */ replace notype
> posthead("") /* */ eqlab(,none) mlab(,none) collab(dy/dx, lhs(Var))
. estout t2 using temp.txt, style(fixed) /*
> */ margin keep(t2) append /*
> */ nodiscrete cells(b se(par)) notype /* */ eqlab(,none) mlab(,none)
> collab(,none)
. estout t3 using temp.txt, style(fixed) /*
> */ margin keep(t3) append /*
> */ nodiscrete cells(b se(par)) notype /* */ eqlab(,none) mlab(,none)
> collab(,none) /* */ postfoot("" "*Std errors in parenthesis")
. type temp.txt
Var dy/dx
x1 -.0220458
(.0202115)
x2 .0246864
(.0698746)
t2 -.0412405
(.0472547)
t3 .0108793
(.0589848)
*Std errors in parenthesis
**********end example**********
The second approach is to gather the results from the different -mfx-
calls and add them at the end using -estadd-:
**********begin example**********
. eststo clear
. qui xtprobit y x1 x2 t2 t3 , i(pid)
. eststo model1
. matrix mfx = e(b)*.
. matrix mfx_se = mfx
. qui mfx, predict(pu0) varlist(x1 x2)
. matrix mfx[1,1] = el(e(Xmfx_dydx),1,1)
. matrix mfx[1,2] = el(e(Xmfx_dydx),1,2)
. matrix mfx_se[1,1] = el(e(Xmfx_se_dydx),1,1)
. matrix mfx_se[1,2] = el(e(Xmfx_se_dydx),1,2)
. qui mfx, predict(pu0) varlist(t2) at(t3=0)
. matrix mfx[1,3] = el(e(Xmfx_dydx),1,3)
. matrix mfx_se[1,3] = el(e(Xmfx_se_dydx),1,3)
. qui mfx, predict(pu0) varlist(t3) at(t2=0)
. matrix mfx[1,4] = el(e(Xmfx_dydx),1,4)
. matrix mfx_se[1,4] = el(e(Xmfx_se_dydx),1,4)
. estadd local Xmfx_type "dydx"
. estadd matrix Xmfx_dydx = mfx : model1
. estadd matrix Xmfx_se_dydx = mfx_se : model1
. estout model1, style(fixed) /*
> */ margin keep(x1 x2 t2 t3) cells(b se(par)) /* */ posthead("")
> eqlab(,none) /* */ mlab(,none) collab(dy/dx, lhs(Var)) /* */
> postfoot("" "*Std errors in parenthesis")
Var dy/dx
x1 -.0220458
(.0202115)
x2 .0246864
(.0698746)
t2 -.0412405
(.0472547)
t3 .0108793
(.0589848)
*Std errors in parenthesis
**********end example**********
If you need something general I advise you to follow approach 2 and wrap
it up as a program, say -mymfx-, so you can type:
xtprobit ...
mymfx ...
estout ...
It will need some work though.
ben
On 6/14/07, Mentzakis, Emmanouil <[email protected]> wrote:
> Dear Statalist,
>
> I am trying to create a table output after -mfx- but I cannot make
> -outreg- and -outreg2- to work, while -estout-, although is working, I
> cannot append the results in a useful format.
>
> Below is a code of what I am running and below that is the output that
> I would like to get.
>
> The reason behind running -mfx- separately for each variable is
> because of t2 & t3. When computing -mfx-, while one of them is 1 the
> other needs to be zero and vice versa.
>
> I'd be grateful for any suggestions
>
> Thank you
> Manos
>
>
> **************** begin example ***********************
>
> ********** model **********
> clear
> set obs 200
> set seed 125
> gen pid=_n
> expand 3
> bys pid: gen y=uniform() >0.5
> bys pid: gen x1=invnormal(uniform())
> bys pid: gen x2=uniform()
> bys pid: gen z=invnormal(uniform())
> gen k=1 if z>-10 & z<-0.5
> replace k=2 if z>=-0.5 & z<0.8
> replace k=3 if z>=0.8 & z<10
> tab k, gen(t)
>
> xtprobit y x1 x2 t2 t3 , i(pid)
> mfx, predict(pu0) varlist(x1 x2)
> mfx, predict(pu0) varlist(t2) at(t3=0) mfx, predict(pu0) varlist(t3)
> at(t2=0)
>
>
> ********* desired output ***********
> Var dy/dx
>
> X1 -.0220458
> (.02021)
> X2 .0246864
> (.06987)
> T2 -.0412405
> (.04725)
> T3 .0108793
> (.05898)
>
> *Std errors in parenthesis
>
> **************** end example ***********************
>
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/