Dear all,
Here is an example of the problems I found with fw and ml d0. This code estimates a sequential probit. A dummy dependent variable is observed for each individual in various periods. The model predicts the probability of observing a given sequence. For each individual draws are iid. However, observations in the data set are not independent as each individual contributes a group of observations. Hence, the ml linear-form restriction is not met in this case.
Here is the example. Can anyone see the error?
Many thanks in advance,
Alfonso.
-------------------------------------------------------------------------------
log: C:\temp\mycode.smcl
log type: smcl
opened on: 14 Jun 2004, 16:44:28
. do "C:\temp\mycode.do"
.
. capture program drop mycode2
. program define mycode2, eclass
1. syntax [varlist] [if] [in] [fw] [, I(string) ]
2.
. /* Obtaining dependent variable and explanatory variables */
.
. gettoken endgv exogv : varlist, parse("")
3.
. /* Selecting sample */
.
. marksample touse
4. xt_iis `i'
5. local i "`s(ivar)'"
6. global S_ivar "`i'"
7. markout `touse' `ivar' `varlist', strok
8.
. /* Sorting data */
.
. sort `i'
9.
. /* Etimate */
.
. ml model d0 mycode2_ll ("`endgv'": `endgv' = `exogv') /*
> */ [`weight'`exp'] if `touse'
10.
. ml check
11. end
.
. capture program drop mycode2_ll
. program define mycode2_ll
1. args todo b lnf
2.
. local y "$ML_y1"
3. local i "$S_ivar"
4.
. tempvar xb F last
5.
. mleval `xb' = `b'
6.
. qui {
7. by `i' : gen `last' = cond(_n==_N,1,0)
8.
. gen double `F' = . in 1 if $ML_samp
9.
. #delimit ;
delimiter now ;
. by `i': replace `F' =
> cond(_n==1,
> cond(`y',normprob(`xb'),normprob(-`xb')),
> cond(`y',
> normprob(`xb'),normprob(-`xb'))*`F'[_n-1] ) if $ML_samp;
10. #delimit cr
delimiter now cr
.
. mlsum `lnf' = log(`F') if `last'
11.
. }
12. end
.
. mycode depv d4-d30 catholic indspker edu12 c6372 c7382 agu-chih durango-z
> a [fw=wt], i(id)
Test 1: Calling mycode_ll to check if it computes log likelihood and
does not alter coefficient vector...
FAILED; mycode_ll returned error 499.
Here is a trace of its execution:
------------------------------------------------------------------------------
-> mycode_ll 0 ML_b ML_f __0000QH __0000QI __0000QA
- `begin'
- args todo b lnf
- local y "$ML_y1"
- local i "$S_ivar"
- tempvar xb F last
- mleval `xb' = `b'
- qui {
- by `i' : gen `last' = cond(_n==_N,1,0)
- gen double `F' = . in 1 if $ML_samp
- by `i': replace `F' = cond(_n==1, cond(`y',normprob(`xb'),normprob(-`xb')), c
> ond(`y', normprob(`xb'),normprob(-`xb'))*`F'[_n-1] ) if $ML_samp
- mlsum `lnf' = log(`F') if `last'
mlsum must be over entire estimation sample when weights
are specified
}
- `end'
------------------------------------------------------------------------------
Fix mycode_ll.
r(499);
end of do-file
r(499);
. log close
log: C:\temp\mycode.smcl
log type: smcl
closed on: 14 Jun 2004, 16:46:01
-------------------------------------------------------------------------------
=====================================
Alfonso Miranda
PhD Student
Economics Department
University of Warwick
Coventry CV4 7AL
E-mail:[email protected]
WebPage: http://www.warwick.ac.uk/go/amiranda
=====================================
*
* 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/