Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


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

Re: st: ereturn post after mata


From   Nick Cox <njcoxstata@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: ereturn post after mata
Date   Sat, 10 Mar 2012 17:17:35 +0000

I think Christophe meant to type

gen touse = dv < . & iv < .

Nick

On Sat, Mar 10, 2012 at 4:34 PM, Christophe Kolodziejczyk
<ck.statalist@gmail.com> wrote:
> Dear Christoph,
> Another approach to handle missing values is to create an indicator
> called typically touse and use it to select the observations in your
> view (see help st_view() or st_data()).
>
> gen touse = keep if dv < . & iv < .
>
> mata:
>
> ...
>
> st_view(X= ., ., tokens("`xlist'"),"touse")
>
> ...
> end
>
> Bill Gould had a presentation in 2005 on Mata and is a good tutorial
> for Mata in general and st_view() in particular.
>
> It is not necessary to create the cons variable, you can directly
> specify it when you use the cross() function like
>
> cross(X,1,X,1)
>
> Stata will compute the cross product with X and the constant.
>
> See the help on cross() for more details and helpful examples.
>
> You should also check whether your mails are sent in plain text, it
> may explain why you cannot reply to statalist.
>
> Best
> Christophe
>
>
>
> 2012/3/9 Christoph Engel <engel@coll.mpg.de>:
>> Dear Christophe,
>>
>> For some reason I do not understand, the list does not let me post this
>> response to you, which is why I send them in private.
>>
>> Once more: thank you very much for your help!
>>
>> Christoph
>>
>>
>>
>>
>> Dear Christophe,
>>
>> Sorry for not having found your response earlier. I must have missed it in
>> the flurry of postings.
>>
>> Thank you very much for having tried out my code on the auto dataset. I now
>> have had a few more trials and eventually found out two things mata
>> requires. Maybe later users find it useful to know, which is why I respond
>> here:
>>
>> it seems mata does not automatically find / define a constant. Rather,
>> following Cameron/Trivedi's code, one should code
>>
>> gen cons = 1
>> local xlist iv cons  // which is the new auxiliary variable
>>
>> the reason why my trial dataset had not worked well were indeed two missing
>> values on the dependent variable. It worked, once I coded
>>
>> preserve
>> keep if dv < . & iv < .
>> [the previous code]
>> restore
>>
>> Best
>>
>> Christoph Engel
>>
>> Am 3/8/2012 9:11 AM, schrieb Christophe Kolodziejczyk:
>>
>> Dear Christoph
>> I've tried your code with the auto dataset had no problem getting the
>> correct results (see the log file).
>> So I would check the data first and look for the elements produced by
>> your program which have missing values.
>> If you get error code r(504) it is because b or V has missing values.
>> Best
>> Christophe
>>
>> ----------------------------------------------------------------------------------------------------------------------
>>       name:  <unnamed>
>>        log:  C:\Users\CK\Documents\try_reg_mata.log
>>   log type:  text
>>  opened on:   8 Mar 2012, 09:07:21
>>
>> .
>> .
>> . sysuse auto , clear
>> (1978 Automobile Data)
>>
>> .
>> . gen cons=1
>>
>> .
>> . local y price
>>
>> . local xlist mpg cons
>>
>> . mata
>> ------------------------------------------------- mata (type end to
>> exit) --------------------------------------------
>> :     st_view(y= ., ., "`y'")
>>
>> :     st_view(X= ., ., tokens("`xlist'"))
>>
>> :     XXinv = cholinv(cross(X,X))
>>
>> :     b = XXinv*cross(X,y)
>>
>> :     e = y - X*b
>>
>> :     n = rows(X)
>>
>> :     k = cols(X)
>>
>> :     s2 = (e'e)/(n-k)
>>
>> :     vdef = s2*XXinv
>>
>> :         b,vdef
>>                   1              2              3
>>     +----------------------------------------------+
>>   1 |  -238.8943456     2817.13472   -59997.35566  |
>>   2 |   11253.06066   -59997.35566    1370802.527  |
>>     +----------------------------------------------+
>>
>> :     st_matrix("b", b')
>>
>> :     st_matrix("V", vdef)
>>
>> : end
>> ----------------------------------------------------------------------------------------------------------------------
>>
>> .
>> . matrix colnames b = `xlist'
>>
>> . matrix colnames V = `xlist'
>>
>> . matrix rownames V = `xlist'
>>
>> .
>> . mat list b
>>
>> b[1,2]
>>            mpg        cons
>> r1  -238.89435   11253.061
>>
>> . mat list V
>>
>> symmetric V[2,2]
>>              mpg        cons
>>  mpg   2817.1347
>> cons  -59997.356   1370802.5
>>
>> . ereturn post b V
>>
>> . ereturn display
>> ------------------------------------------------------------------------------
>>              |      Coef.   Std. Err.      z    P>|z|     [95% Conf.
>> Interval]
>> -------------+----------------------------------------------------------------
>>          mpg |  -238.8943   53.07669    -4.50   0.000    -342.9227
>> -134.866
>>         cons |   11253.06   1170.813     9.61   0.000      8958.31
>> 13547.81
>> ------------------------------------------------------------------------------
>>
>> .
>> .
>> . reg price mpg
>>
>>       Source |       SS       df       MS              Number of obs =
>> 74
>> -------------+------------------------------           F(  1,    72) =
>> 20.26
>>        Model |   139449474     1   139449474           Prob > F      =
>> 0.0000
>>     Residual |   495615923    72  6883554.48           R-squared     =
>> 0.2196
>> -------------+------------------------------           Adj R-squared =
>> 0.2087
>>        Total |   635065396    73  8699525.97           Root MSE      =
>> 2623.7
>>
>> ------------------------------------------------------------------------------
>>        price |      Coef.   Std. Err.      t    P>|t|     [95% Conf.
>> Interval]
>> -------------+----------------------------------------------------------------
>>          mpg |  -238.8943   53.07669    -4.50   0.000    -344.7008
>> -133.0879
>>        _cons |   11253.06   1170.813     9.61   0.000     8919.088
>> 13587.03
>> ------------------------------------------------------------------------------
>>
>> .
>> . log close
>>       name:  <unnamed>
>>        log:  C:\Users\CK\Documents\try_reg_mata.log
>>   log type:  text
>>  closed on:   8 Mar 2012, 09:07:22
>> ----------------------------------------------------------------------------------------------------------------------
>>
>>
>> .
>> . matrix colnames b = `xlist'
>>
>> . matrix colnames V = `xlist'
>>
>> . matrix rownames V = `xlist'
>>
>> . ereturn post b V
>>
>> . ereturn display
>> ------------------------------------------------------------------------------
>>              |      Coef.   Std. Err.      z    P>|z|     [95% Conf.
>> Interval]
>> -------------+----------------------------------------------------------------
>>          mpg |  -238.8943   53.07669    -4.50   0.000    -342.9227
>> -134.866
>>         cons |   11253.06   1170.813     9.61   0.000      8958.31
>> 13547.81
>> ------------------------------------------------------------------------------
>>
>> .
>> .
>> . reg price mpg
>>
>>       Source |       SS       df       MS              Number of obs =
>> 74
>> -------------+------------------------------           F(  1,    72) =
>> 20.26
>>        Model |   139449474     1   139449474           Prob > F      =
>> 0.0000
>>     Residual |   495615923    72  6883554.48           R-squared     =
>> 0.2196
>> -------------+------------------------------           Adj R-squared =
>> 0.2087
>>        Total |   635065396    73  8699525.97           Root MSE      =
>> 2623.7
>>
>> ------------------------------------------------------------------------------
>>        price |      Coef.   Std. Err.      t    P>|t|     [95% Conf.
>> Interval]
>> -------------+----------------------------------------------------------------
>>          mpg |  -238.8943   53.07669    -4.50   0.000    -344.7008
>> -133.0879
>>        _cons |   11253.06   1170.813     9.61   0.000     8919.088
>> 13587.03
>> ------------------------------------------------------------------------------
>>
>> .
>> . log close
>>       name:  <unnamed>
>>        log:  C:\Users\CK\Documents\try_reg_mata.log
>>   log type:  text
>>  closed on:   8 Mar 2012, 09:04:07
>> ----------------------------------------------------------------------------------------------------------------------
>>
>>
>> 2012/3/6 Christoph Engel <engel@coll.mpg.de>:
>>
>> Dear readers of Stata list,
>>
>> Cameron Trivedi: Microeconometrics Using Stata 2009, p. 116 report the code
>> for running OLS in mata, and posting the results in stata.
>>
>> If I simplify the code and estimate a model with only one regressor and no
>> constant, it works just fine. But if I add the constant, I still get
>> coefficients and a variance/covariance matrix that are the same as the ones
>> generated by reg. But I can no longer display the results conveniently. The
>> following step does not work
>>
>> ereturn post b V
>>
>> I get the error code: r(504): matrix has missing values
>>
>> The link to r(504) says that this should no longer be an issue. Actually, I
>> can use matrix list e(V) and get the same VCE as with reg. Am I making a
>> mistake, or is this a bug that Stata Corp should fix?
>>
>> Here is my code which, I think, is exactly what Cameron Trivedi propose:
>>
>> local y dv
>> local xlist iv cons
>> mata
>>    st_view(y= ., ., "`y'")
>>    st_view(X= ., ., tokens("`xlist'"))
>>    XXinv = cholinv(cross(X,X))
>>    b = XXinv*cross(X,y)
>>    e = y - X*b
>>    n = rows(X)
>>    k = cols(X)
>>    s2 = (e'e)/(n-k)
>>    vdef = s2*XXinv
>>    st_matrix("b", b')
>>    st_matrix("V", vdef)
>> end
>>
>> matrix colnames b = `xlist'
>> matrix colnames V = `xlist'
>> matrix rownames V = `xlist'
>> ereturn post b V
>> ereturn display
>>
>>

*
*   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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index