# Re: st: Problem with ML estimation

 From "Stas Kolenikov" To statalist@hsphsun2.harvard.edu Subject Re: st: Problem with ML estimation Date Fri, 18 Aug 2006 10:02:30 -0500

Your model is underidentified. You have three distinct observations,
and you are trying to estimate four parameters.

On 8/17/06, DEEPANKAR BASU <basu.15@osu.edu> wrote:
Hi!

I am trying to run a MLE on a small data set that I have generated on my own; this is primarily to check the program. When I run the program I get an error message saying "could not calculate numerical derivatives; missing values encountered". Below I give (in that order):
1) the data generation program
2) the ML program
3) output of the ML program

Any help to get the program running will be greatly appreciated.

Deepankar

=============india31A.do=================
clear
set more 1
version 8.2

set obs 4000

gen dfsize = 3

gen dfsize1 = 0
replace dfsize1 = (1/8) if _n>3000

gen p31 = (1/8)
replace p31 = (1/2) if _n<2001
replace p31 = (1/4) if (_n>2000 & _n<3001)

gen p32 = 0
replace p32 = (1/8) if _n>3000

save india31A.dta, replace

==================end=======================

===============gender33A_lf.do=================
clear
set more 1

capture program drop gender33A_lf
program gender33A_lf
version 8.2

args lnf theta3 theta5

tempvar q1 x1 x5

quietly {
gen double `q1' = 1/(1+exp(`theta5'))

gen double `x1' = 2^(\$ML_y1)

gen double `x5' = norm(-`theta3')

}
#delimit ;
quietly replace `lnf' = ln((\$ML_y4*(1/`x1')*`x5') + ((1-`x5')*( \$ML_y2*`q1' + \$ML_y3*(1-`q1') )));
#delimit cr

end

use india31A.dta  /* Contains observations with N=2,3 */

ml model lf gender33A_lf (dfsize p31 p32 dfsize1 = ) (), tech(bhhh nr)

ml check

ml search

ml max, difficult

=====================end=============================

==================output of gender33A_lf.do=================
. do gender33A_lf.do

. clear

. set more 1

.
. capture program drop gender33A_lf

. program gender33A_lf
1.    version 8.2
2.
.    args lnf theta3 theta5
3.
.    tempvar q1 x1 x5
4.
.    quietly {
5.       gen double `q1' = 1/(1+exp(`theta5'))
6.
.       gen double `x1' = 2^(\$ML_y1)
7.
.       gen double `x5' = norm(-`theta3')
8.
.    }
9.       #delimit ;
delimiter now ;
.       quietly replace `lnf' = ln((\$ML_y4*(1/`x1')*`x5') + ((1-`x5')*( \$ML_y2*`q1' + \$ML_y3*(1-`q1') )));
10.       #delimit cr
delimiter now cr
.
. end

.
.
. use india31A.dta  /* Contains observations with N=2,3 */

.
.
.
. ml model lf gender33A_lf (dfsize p31 p32 dfsize1 = ) (), tech(bhhh nr)

.
. ml check

Test 1:  Calling gender33A_lf to check if it computes log likelihood and
does not alter coefficient vector...
Passed.

Test 2:  Calling gender33A_lf again to check if the same log likelihood value
is returned...
Passed.

Test 3:  Calling gender33A_lf to check if 1st derivatives are computed...
test not relevant for method lf.

Test 4:  Calling gender33A_lf again to check if the same 1st derivatives are
returned...
test not relevant for method lf.

Test 5:  Calling gender33A_lf to check if 2nd derivatives are computed...
test not relevant for method lf.

Test 6:  Calling gender33A_lf again to check if the same 2nd derivatives are
returned...
test not relevant for method lf.

------------------------------------------------------------------------------
Searching for alternate values for the coefficient vector to verify that
gender33A_lf returns different results when fed a different coefficient vector:

Searching...
initial:       log likelihood =     -<inf>  (could not be evaluated)
searching for feasible values +

feasible:      log likelihood = -9802.0949
improving initial values ..........
improve:       log likelihood = -9802.0949

continuing with tests...
------------------------------------------------------------------------------

Test 7:  Calling gender33A_lf to check log likelihood at the new values...
Passed.

Test 8:  Calling gender33A_lf requesting 1st derivatives at the new values...
test not relevant for method lf.

Test 9:  Calling gender33A_lf requesting 2nd derivatives at the new values...
test not relevant for method lf.

------------------------------------------------------------------------------
gender33A_lf HAS PASSED ALL TESTS
------------------------------------------------------------------------------

Test 10: Does gender33A_lf produce unanticipated output?
This is a minor issue.  Stata has been running gender33A_lf with all
output suppressed.  This time Stata will not suppress the output.
If you see any unanticipated output, you need to place quietly in
front of some of the commands in gender33A_lf.

-------------------------------------------------------------- begin execution
---------------------------------------------------------------- end execution

.
. ml search
initial:       log likelihood = -9802.0949
improve:       log likelihood = -9802.0949
rescale:       log likelihood = -9067.4074
rescale eq:    log likelihood = -4852.0303

.
. ml max, difficult

initial:       log likelihood = -4852.0303
rescale:       log likelihood = -4852.0303
rescale eq:    log likelihood = -4852.0303
(setting optimization to BHHH)
numerical derivatives are approximate
flat or discontinuous region encountered
numerical derivatives are approximate
flat or discontinuous region encountered
Iteration 0:   log likelihood = -4852.0303
numerical derivatives are approximate
flat or discontinuous region encountered
numerical derivatives are approximate
flat or discontinuous region encountered
Iteration 1:   log likelihood = -4852.0303  (backed up)
could not calculate numerical derivatives
missing values encountered
r(430);

end of do-file
r(430);

.
====================end===========================

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

--
Stas Kolenikov
http://stas.kolenikov.name
*
*   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/