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 on April 23, and its replacement, statalist.org is already up and running.


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

st: Re: Mata maximum likelihood error on trivial regression


From   David Chan <david.c.chan@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   st: Re: Mata maximum likelihood error on trivial regression
Date   Mon, 22 Aug 2011 14:58:17 -0400

Hi all,

I have discovered the solution, thanks to Jeffrey Pitblado:

The line

       sd=exp(b[|j|])

should be

       sd = exp(moptimize_util_xb(ML,b,2))

The function -moptimize_util_xb()- does some extra calculation that allows
-ml- (really it's -moptimize()-) to properly take numerical derivatives.
By explicitly pulling the value of 'b[|j|]', you are not getting that extra
calculation into you 'sd' variable.

Thanks,
Dave

On Fri, Aug 19, 2011 at 12:23 PM, David Chan <david.c.chan@gmail.com> wrote:
>
> Hi all,
>
> I'm having problems with doing maximum likelihood in Mata. Even in the most basic setup, I'm getting the error,
>
> "could not calculate numerical derivatives -- flat or discontinuous region encountered
> r(430)."
>
> I'm almost certain that this is not because of problems with the data or model, but it probably has something to do with a naive programming error. I'm simulating my own data, and I'm testing out the program on a very simple linear regression model,
>
> y=Ey+zeta_k+epsilon,
>
> where epsilon is a random, normally distributed term, and Ey and zeta_k are both observed regressors (both with coefficient 1).
>
> After simulating data according to this model, simple regression,
>
> > reg y Ey zeta_k"
>
> works fine. Also when I code up the trivial MLE in Stata as an ado program, I have no problems:
>
> > program mynormal_lf
> >     args lnfj mu sigma
> >    qui replace `lnfj'=ln(normalden($ML_y1,`mu',`sigma'))
> > end
> > ml model lf mynormal_lf (mu: lnlos = Ey zeta_k) /sigma
> > ml maximize
>
> However, when I code it up in Mata, using the code below, I always get the error message, even when I set the initial values at the true parameters:
>
> > mata:
> > void mydynamic_lf(transmorphic scalar ML, real rowvector b, ///
> >                  real colvector lnfj)
> > {
> >     real colvector y, xb
> >     real colvector sd
> >     y=moptimize_util_depvar(ML,1)
> >     xb=moptimize_util_xb(ML,b,1)
> >     j=moptimize_util_eq_indices(ML,2)
> >     sd=exp(b[|j|])
> >     lnfj=ln(normalden(y,xb,sd))
> > }
> > end
> > ml model lf mydynamic_lf() (mu: lnlos = Ey zeta_k) /sigma
> > ml maximize
>
> I've tried renaming the variables within Mata, as well as changing the variable declaration (e.g., calling "sd" a scalar rather than a colvector), but nothing seems to work.
>
> Does anyone know what I'm doing wrong?
>
> Dave
>

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