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 14:37:23 +0000 |
"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/