Dear All,
I'm kinda new to STATA and I would like to solve a system of 8 nonlinear equations with 8 unknowns. However, I cannot get a RSS that is smaller than 10^-6 after I randomly tried different initial values. Can you give me some suggestions? I really appreciate it!! Below is my code:
program define nlsolvepar
syntax varlist(min=1 max=1) [if], at(name) ///
pi1(real) pi2(real) pi3(real) pi4(real) pi5(real) pi6(real) pi7(real) pi8(real) pu(real)
tempname beta0 beta1 beta2 beta3 alpha0 alpha1 alpha2 alpha3
scalar `beta0' = `at'[1, 1]
scalar `beta1' = `at'[1, 2]
scalar `beta2' = `at'[1, 3]
scalar `beta3' = `at'[1, 4]
scalar `alpha0' = `at'[1, 5]
scalar `alpha1' = `at'[1, 6]
scalar `alpha2' = `at'[1, 7]
scalar `alpha3' = `at'[1, 8]
tempvar yh
* pi1
gen double `yh' = 1/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
1/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
1/(exp(`beta0'+`beta1'+`beta2'+`beta3')+exp(`alpha0' +`alpha1'+`alpha2'+`alpha3')+1)* ///
1/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+exp(`alp ha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`pu'-`pi1'+1 in 1
* pi2
replace `yh' = 1/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`beta0'+2*`beta1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
1/(exp(`beta0'+`beta1'+`beta2'+`beta3')+exp(`alpha0' +`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi2' in 2
*pi3
replace `yh' = 1/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`alpha0'+2*`alpha1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
1/(exp(`beta0'+`beta1'+`beta2'+`beta3')+exp(`alpha0' +`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi3' in 3
*pi4
replace `yh' = exp(`beta0'+`beta1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
1/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`beta0'+`beta1'+`beta2'+`beta3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
1/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+exp(`alp ha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`pu'-`pi4' in 4
*pi5
replace `yh' = exp(`beta0'+`beta1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`beta0'+2*`beta1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`beta0'+`beta1'+`beta2'+`beta3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi5' in 5
*pi6
replace `yh' = exp(`beta0'+`beta1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`alpha0'+2*`alpha1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`beta0'+`beta1'+`beta2'+`beta3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi6' in 6
*pi7
replace `yh' = exp(`alpha0'+`alpha1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
1/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
1/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+exp(`alp ha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`pu'-`pi7' in 7
*pi8
replace `yh' = exp(`alpha0'+`alpha1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`beta0'+2*`beta1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi8' in 8
replace `varlist' = `yh'
end
clear
set obs 8
generate y = 0
replace y = 1 in 1
nl solvepar @ y, pi1(0.1) pi2(0.000001) pi3(0.000001) pi4(0.000001) pi5(0.1) pi6(0.7) pi7(0.000001) pi8(0.000001) pu(0.5) ///
parameters(beta0 beta1 beta2 beta3 alpha0 alpha1 alpha2 alpha3) initial(beta0 3 beta1 3 ///
beta2 3 beta3 3 alpha0 3 alpha1 3 alpha2 3 alpha3 3)
Thanks!
Hera
I'm kinda new to STATA and I would like to solve a system of 8 nonlinear equations with 8 unknowns. However, I cannot get a RSS that is smaller than 10^-6 after I randomly tried different initial values. Can you give me some suggestions? I really appreciate it!! Below is my code:
program define nlsolvepar
syntax varlist(min=1 max=1) [if], at(name) ///
pi1(real) pi2(real) pi3(real) pi4(real) pi5(real) pi6(real) pi7(real) pi8(real) pu(real)
tempname beta0 beta1 beta2 beta3 alpha0 alpha1 alpha2 alpha3
scalar `beta0' = `at'[1, 1]
scalar `beta1' = `at'[1, 2]
scalar `beta2' = `at'[1, 3]
scalar `beta3' = `at'[1, 4]
scalar `alpha0' = `at'[1, 5]
scalar `alpha1' = `at'[1, 6]
scalar `alpha2' = `at'[1, 7]
scalar `alpha3' = `at'[1, 8]
tempvar yh
* pi1
gen double `yh' = 1/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
1/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
1/(exp(`beta0'+`beta1'+`beta2'+`beta3')+exp(`alpha0' +`alpha1'+`alpha2'+`alpha3')+1)* ///
1/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+exp(`alp ha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`pu'-`pi1'+1 in 1
* pi2
replace `yh' = 1/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`beta0'+2*`beta1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
1/(exp(`beta0'+`beta1'+`beta2'+`beta3')+exp(`alpha0' +`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi2' in 2
*pi3
replace `yh' = 1/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`alpha0'+2*`alpha1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
1/(exp(`beta0'+`beta1'+`beta2'+`beta3')+exp(`alpha0' +`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi3' in 3
*pi4
replace `yh' = exp(`beta0'+`beta1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
1/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`beta0'+`beta1'+`beta2'+`beta3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
1/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+exp(`alp ha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`pu'-`pi4' in 4
*pi5
replace `yh' = exp(`beta0'+`beta1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`beta0'+2*`beta1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`beta0'+`beta1'+`beta2'+`beta3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi5' in 5
*pi6
replace `yh' = exp(`beta0'+`beta1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`alpha0'+2*`alpha1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`beta0'+`beta1'+`beta2'+`beta3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi6' in 6
*pi7
replace `yh' = exp(`alpha0'+`alpha1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
1/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
1/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+exp(`alp ha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`pu'-`pi7' in 7
*pi8
replace `yh' = exp(`alpha0'+`alpha1')/(exp(`beta0'+`beta1')+exp(`alpha0'+`alpha1')+1)* ///
exp(`beta0'+2*`beta1')/(exp(`beta0'+2*`beta1')+exp(`alpha0'+2*`alpha1')+1 )*(1-`pu')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')/(exp(`beta0'+`beta1'+`beta2'+`beta3')+ ///
exp(`alpha0'+`alpha1'+`alpha2'+`alpha3')+1)* ///
exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')/(exp(`beta0'+2*`beta1'+`beta2'+2*`beta3')+ ///
exp(`alpha0'+2*`alpha1'+`alpha2'+2*`alpha3')+1)*`p u'-`pi8' in 8
replace `varlist' = `yh'
end
clear
set obs 8
generate y = 0
replace y = 1 in 1
nl solvepar @ y, pi1(0.1) pi2(0.000001) pi3(0.000001) pi4(0.000001) pi5(0.1) pi6(0.7) pi7(0.000001) pi8(0.000001) pu(0.5) ///
parameters(beta0 beta1 beta2 beta3 alpha0 alpha1 alpha2 alpha3) initial(beta0 3 beta1 3 ///
beta2 3 beta3 3 alpha0 3 alpha1 3 alpha2 3 alpha3 3)
Thanks!
Hera
Comment