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: nlsur aids function evaluator program


From   "Brian P. Poi" <bpoi@stata.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: nlsur aids function evaluator program
Date   Fri, 28 Oct 2011 08:49:39 -0500

Ivica Rubil wrote:
Dear all,
I copied the code for -nlsur- AIDS demand system from the Stata
reference manual. But when I run it, Stata returns:
" nlsuraids returned 101
verify that nlsuraids1 is a function evaluator program"
What's the problem


Here's the code:

program nlsuraids
	version 11
	
	syntax varlist(min=8 max=8), at(name)
	tokenize `varlist'
	args w1 w2 w3 lnp1 lnp2 lnp3 lnp4 lnexp
	
	tempname a1 a2 a3 a4
	scalar `a1' = `at'[1,1]
	scalar `a2' = `at'[1,2]
	scalar `a3' = `at'[1,3]
	scalar `a4' = 1 - `a1' - `a2' - `a3'
	
	tempname b1 b2 b3
	scalar `b1' = `at'[1,4]
	scalar `b2' = `at'[1,5]
	scalar `b3' = `at'[1,6]
	
	tempname g11 g12 g13 g14
	tempname g21 g22 g23 g24
	tempname g31 g32 g33 g34
	tempname g41 g42 g43 g44
	scalar `g11' = `at'[1,7]
	scalar `g12' = `at'[1,8]
	scalar `g13' = `at'[1,9]
	scalar `g14' = - `g11' - `g12' - `g13'
	scalar `g21' = `g12'
	scalar `g22' = `at'[1,10]
	scalar `g23' = `at'[1,11]
	scalar `g24' = - `g21' - `g22' - `g23'
	scalar `g31' = `g13'
	scalar `g32' = `g23'
	scalar `g33' = `at'[1,12]
	scalar `g34' = - `g31' - `g32' - `g33'
	scalar `g41' = `g14'
	scalar `g42' = `g24'
	scalar `g43' = `g34'
	scalar `g44' = - `g41' - `g42' - `g43'
	
	quietly {
		
		tempvar lnpindex
		gen double `lnpindex' = 5 + `a1'*`lnp1' + `a2'*`lnp2' +
`a3'*`lnp3' + `a4'*`lnp4'
		forvalues i=1/4 {
			forvalues j=1/4 {
				replace `lnpindex' = `lnpindex' +
0.5*`g`i'`j''*`ln`i''*`ln`j''
		    }
	    }
		
		replace `w1' = `a1' + `g11'*`lnp1' + `g12'*`lnp2' +
`g13'*`lnp3' + `g14'*`lnp4' + `b1'*(`lnexp' - `lnpindex')
		replace `w2' = `a2' + `g21'*`lnp1' + `g22'*`lnp2' +
`g23'*`lnp3' + `g24'*`lnp4' + `b2'*(`lnexp' - `lnpindex')
		replace `w3' = `a3' + `g31'*`lnp1' + `g32'*`lnp2' +
`g33'*`lnp3' + `g34'*`lnp4' + `b3'*(`lnexp' - `lnpindex')
	}
	
end

use http://www.stata-press.com/data/r11/food, clear

nlsur aids @ w1 w2 w3 lnp1 lnp2 lnp3 lnp4 lnexp, parameters(a1 a2 a3 b1
b2 b3 g11 g12 g13 g22 g23 g33) neq(3)



Ivica,

The -syntax- statement of a function evaluator program must accept 'if' conditions, even if you don't specify an 'if' condition in your call to -nlsur-.  Hence, the line

    syntax varlist(min=8 max=8), at(name)

must read

    syntax varlist(min=8 max=8) if, at(name)

Also, this line:

				replace `lnpindex' = `lnpindex' +
0.5*`g`i'`j''*`ln`i''*`ln`j''

should refer to `lnp`i'' and `lnp`j'', not `ln`i'' and `ln`j''.

To get the maximum-likelihood estimates, you'll need to include the option 'ifgnls' in your -nlsur- command.

Brian P. Poi
Senior Economist
StataCorp LP

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