Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: nlsuraids need help with AIDS model error please
From
"Brian P. Poi" <[email protected]>
To
[email protected]
Subject
Re: st: nlsuraids need help with AIDS model error please
Date
Tue, 10 Jul 2012 08:57:23 -0500
On 07/10/2012 03:47 AM, Liu, Pei Chun wrote:
Dear Statlist,
I need help with the AIDS model I am running below. With 3 goods, I get "nlsuraids returned 199 verify that nlsuraids is a function evaluator program" after running it.
program nlsuraids12;
version 11.2;
syntax varlist(min=6 max=6) if , at(name);
tokenize `varlist';
args w1 w2 lnp1 lnp2 lnp3 lnm;
tempname a1 a2 a3;
scalar `a1' = `at'[1,1];
scalar `a2' = `at'[1,2];
scalar `a3' = 1 - `a1' - `a2';
tempname b1 b2;
scalar `b1' = `at'[1,3];
scalar `b2' = `at'[1,4];
tempname g11 g12 g13;
tempname g21 g22 g23;
tempname g31 g32 g33;
scalar `g11' = `at'[1,5];
scalar `g12' = `at'[1,6];
scalar `g13' =-`g11'-`g12';
scalar `g21' = `g12';
scalar `g22' = `at'[1,7];
scalar `g23' = -`g21'-`g22';
scalar `g31' = `g13';
scalar `g32' = `g23';
quietly {
tempvar lnpindex;
gen double `lnpindex' = 5 + `a1'*`lnp1' + `a2'*`lnp2' +///
`a3'*`lnp3';
forvalues i=1/3 {
forvalues j=1/3 {
replace `lnpindex' = `lnpindex'+///
0.5*`g`i'`j''*`lnp`i''*`lnp`j'';
};
};
replace `w1' = `a1' + `g11'*`lnp1' + `g12'*`lnp2' + ///
`g13'*`lnp3'+ `b1'*(`lnm' - `lnpindex');
replace `w2' = `a2' + `g21'*`lnp1' + `g22'*`lnp2' + ///
`g23'*`lnp3'+ `b2'*(`lnm' - `lnpindex');
};
end;
nlsur aids @ w1 w2 lnp1 lnp2 lnp3 lnm, parameters(a1 a2 b1 b2 g11 g12 g22) neq(2) ifgnls;
Pei,
I see three problems here. First, you name your program nlsuraids12, but you tell -nlsur- to look for a different program named nlsuraids. Your -nlsur- command should be
. nlsur aids12 @ w1 w2 lnp1 lnp2 lnp3 lnm, parameters(a1 a2 b1 b2 g11 g12 g22) neq(2) ifgnls;
Also, you never define `g33', but you need that parameter to compute the price index. Right after
. scalar `g32' = `g23';
add the line
. scalar `g33' = -`g13'-`g23';
Third, you use semicolons for end-of-line delimiters. That's fine, but if you do that then you must use them with every line, so the lines
quietly {
forvalues i=1/3 {
forvalues j=1/3 {
should be
quietly {;
forvalues i=1/3 {;
forvalues j=1/3 {;
Plus, if you use semicolon delimiters, then you do not need to use the "///" to spread long statements across multiple lines.
Below my signature is a version of your program that does work.
-- Brian Poi
-- [email protected]
clear all
#delimit ;
program nlsuraids12;
version 11.2;
syntax varlist(min=6 max=6) if , at(name);
tokenize `varlist';
args w1 w2 lnp1 lnp2 lnp3 lnm;
tempname a1 a2 a3;
scalar `a1' = `at'[1,1];
scalar `a2' = `at'[1,2];
scalar `a3' = 1 - `a1' - `a2';
tempname b1 b2;
scalar `b1' = `at'[1,3];
scalar `b2' = `at'[1,4];
tempname g11 g12 g13;
tempname g21 g22 g23;
tempname g31 g32 g33;
scalar `g11' = `at'[1,5];
scalar `g12' = `at'[1,6];
scalar `g13' =-`g11'-`g12';
scalar `g21' = `g12';
scalar `g22' = `at'[1,7];
scalar `g23' = -`g21'-`g22';
scalar `g31' = `g13';
scalar `g32' = `g23';
scalar `g33' = -`g13'-`g23';
quietly {;
tempvar lnpindex;
gen double `lnpindex' = 5 + `a1'*`lnp1' + `a2'*`lnp2' +
`a3'*`lnp3';
forvalues i=1/3 {;
forvalues j=1/3 {;
replace `lnpindex' = `lnpindex'+
0.5*`g`i'`j''*`lnp`i''*`lnp`j'';
};
};
replace `w1' = `a1' + `g11'*`lnp1' + `g12'*`lnp2' +
`g13'*`lnp3'+ `b1'*(`lnm' - `lnpindex');
replace `w2' = `a2' + `g21'*`lnp1' + `g22'*`lnp2' +
`g23'*`lnp3'+ `b2'*(`lnm' - `lnpindex');
};
end;
// random data to test with
set seed 1;
set obs 1000;
foreach x in w1 w2 lnp1 lnp2 lnp3 lnm {;
gen `x' = runiform();
};
nlsur aids12 @ w1 w2 lnp1 lnp2 lnp3 lnm, parameters(a1 a2 b1 b2 g11 g12 g22) neq(2) ifgnls;
*
* 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/