Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |
Subject | Re: st: Could someone help me with my nl evaluation program? I update my program. |
Date | Fri, 31 Jan 2014 23:55:50 +0000 |
You have local dist17: word 17 of `varlist' I think you meant "word 19". Nick njcoxstata@gmail.com On 31 January 2014 16:46, 张志强 <zhiqiangzhangnk@gmail.com> wrote: > Dear Nick > Thank you for your advices. My naive code for 31 region code are as follows: > capture program drop nlwage3 > program nlwage3 > version 12 > syntax varlist(min=33 max=33) if, at(name) > local lnwage : word 1 of `varlist' > local income : word 2 of `varlist' > local dist1: word 3 of `varlist' > local dist2: word 4 of `varlist' > local dist3:word 5 of `varlist' > local dist4: word 6 of `varlist' > local dist5: word 7 of `varlist' > local dist6: word 8 of `varlist' > local dist7: word 9 of `varlist' > local dist8: word 10 of `varlist' > local dist9: word 11 of `varlist' > local dist10: word 12 of `varlist' > local dist11: word 13 of `varlist' > local dist12: word 14 of `varlist' > local dist13: word 15 of `varlist' > local dist14: word 16 of `varlist' > local dist15: word 17 of `varlist' > local dist16: word 18 of `varlist' > local dist17: word 17 of `varlist' > local dist18: word 20 of `varlist' > local dist19: word 21 of `varlist' > local dist20: word 22 of `varlist' > local dist21: word 23 of `varlist' > local dist22: word 24 of `varlist' > local dist23: word 25 of `varlist' > local dist24: word 26 of `varlist' > local dist25: word 27 of `varlist' > local dist26: word 28 of `varlist' > local dist27: word 29 of `varlist' > local dist28: word 30 of `varlist' > local dist29: word 31 of `varlist' > local dist30: word 32 of `varlist' > local dist31: word 33 of `varlist' > > > > tempname k0 k1 k2 > scalar `k0' = `at'[1, 1] > scalar `k1' = `at'[1, 2] > scalar `k2' = `at'[1, 3] > tempvar eterm > gen double `eterm'=`income'*exp(-1*`k2'*`dist1') /// > +`income'*exp(-1*`k2'*`dist2') /// > +`income'*exp(-1*`k2'*`dist3') /// > +`income'*exp(-1*`k2'*`dist4') /// > +`income'*exp(-1*`k2'*`dist5') /// > +`income'*exp(-1*`k2'*`dist6') /// > +`income'*exp(-1*`k2'*`dist7') /// > +`income'*exp(-1*`k2'*`dist8') /// > +`income'*exp(-1*`k2'*`dist9') /// > +`income'*exp(-1*`k2'*`dist10') /// > +`income'*exp(-1*`k2'*`dist11') /// > +`income'*exp(-1*`k2'*`dist12') /// > +`income'*exp(-1*`k2'*`dist13') /// > +`income'*exp(-1*`k2'*`dist14') /// > +`income'*exp(-1*`k2'*`dist15') /// > +`income'*exp(-1*`k2'*`dist16') /// > +`income'*exp(-1*`k2'*`dist17') /// > +`income'*exp(-1*`k2'*`dist18') /// > +`income'*exp(-1*`k2'*`dist19') /// > +`income'*exp(-1*`k2'*`dist20') /// > +`income'*exp(-1*`k2'*`dist21') /// > +`income'*exp(-1*`k2'*`dist22') /// > +`income'*exp(-1*`k2'*`dist23') /// > +`income'*exp(-1*`k2'*`dist24') /// > +`income'*exp(-1*`k2'*`dist25') /// > +`income'*exp(-1*`k2'*`dist26') /// > +`income'*exp(-1*`k2'*`dist27') /// > +`income'*exp(-1*`k2'*`dist28') /// > +`income'*exp(-1*`k2'*`dist29') /// > +`income'*exp(-1*`k2'*`dist30') /// > +`income'*exp(-1*`k2'*`dist31') `if' > > replace `lnwage' = `k0' +`k1'*ln(`eterm') `if' > end > nl wage3 @ lnwage income dist1 dist2 dist3 dist4 dist5 dist6 dist7 > dist8 dist9 dist10 dist11 dist12 dist13 dist14 dist15 dist16 dist17 > dist18 dist19 dist20 dist21 dist22 dist23 dist24 dist25 dist26 > dist27 dist28 dist29 dist30 dist31 , parameters(k0 k1 k2 ) > initial(k0 10 k1 0.34 k2 0.02) > > this code return error > nlwage3 returned 199 > verify that nlwage3 is a function evaluator program > > the problem is that if I reduce the dist variables to 20, this code > working very well. > Does that mean the initial value of my nl program is wrong if I > increase the dist variables? > Is my program is suitable for estimate the summation over variables equation? > Is there some method to guess the initial values for converge? > I sincerely hope that you can help me! > > Zhiqiangzhang > > 2014-01-31 Nick Cox <njcoxstata@gmail.com>: >> "did not work" is difficult to evaluate here. You don't show the code >> you used or explain how it did not work, so hoping for good advice is >> optimistic. Macro length is unlikely to be an issue providing that you >> define your macros appropriately. >> >> What you may be experiencing is just that more complicated models with >> more adjustable parameters are typically (much) more difficult to fit. >> Nonlinear least squares is beautifully attractive when it works >> directly, but it may need very good guesses at parameter values to >> converge well even when the model is suitable. >> >> Nick >> njcoxstata@gmail.com >> >> On 31 January 2014 13:37, 张志强 <zhiqiangzhangnk@gmail.com> wrote: >>> Thanks Scott. >>> My program is working well if the dyadic of individual distance is >>> smaller than 20. is there a limitation for local macro number in nl >>> command in stata ? >>> I mean if the dist variables is larger than 20, my nl command did not work. >>> I sincerely hope that you can help me! >>> >>> >>> >>> 2014-01-30 Scott Merryman <scott.merryman@gmail.com>: >>>> It looks like the -`if'- is on a different line following the -gen >>>> double...- statement. >>>> >>>> The example below works: >>>> >>>> >>>> sysuse auto,clear >>>> gen lnprice = ln(price) >>>> gen lowweight = (weight < 3000) >>>> gen lowgear = (gear < 3) >>>> >>>> capture program drop nlwage1 >>>> program nlwage1 >>>> version 12 >>>> syntax varlist(min=5 max=5) if, at(name) >>>> local lnwage : word 1 of `varlist' >>>> local income : word 2 of `varlist' >>>> local dist1: word 3 of `varlist' >>>> local dist2: word 4 of `varlist' >>>> local dist3:word 5 of `varlist' >>>> tempname k0 k1 k2 >>>> scalar `k0' = `at'[1, 1] >>>> scalar `k1' = `at'[1, 2] >>>> scalar `k2' = `at'[1, 3] >>>> tempvar eterm >>>> gen double `eterm'=`income'*exp(`k2'*`dist1') /// >>>> +`income'*exp(`k2'*`dist2') /// >>>> +`income'*exp(`k2'*`dist3') `if' >>>> replace `lnwage' = `k0' +`k1'*ln(`eterm') `if' >>>> end >>>> >>>> nl wage1 @ lnprice mpg foreign lowweight lowgear, /// >>>> parameters(k0 k1 k2 ) initial(k0 0.05 k1 0.02 k2 0.03) >> >> * >> * For searches and help try: >> * http://www.stata.com/help.cgi?search >> * http://www.stata.com/support/faqs/resources/statalist-faq/ >> * http://www.ats.ucla.edu/stat/stata/ > > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/statalist-faq/ > * http://www.ats.ucla.edu/stat/stata/ * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/