[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

From |
"Austin Nichols" <austinnichols@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Generate new variable with an implicit formulation |

Date |
Fri, 17 Aug 2007 15:37:02 -0400 |

Bob-- Nick Cox had some good suggestions on using an integer -forvalues- loop and transforming it as necessary inside the loop, but I didn't see any advice on solving the general problem. Let me restate it as: Solve f(x,y,n)=0 where x and n are variables and y is a variable to be generated. There are 2 existing methods I know of: 1. use -ridder- which can be obtained via -findit ridder- or net inst ssi5_4, from(http://www.stata.com/stb/stb24/) 2. use -nl- and possibly a trick due to Al Feiveson: http://www.stata.com/support/faqs/lang/nl.html However, a better solution might be to minimize f^2 (as suggested by Stas Kolenikov at NASUG6) using a general optimizer; see e.g. help mf_optimize in Stata 10 or help ml in Stata 9. Other software might have the capability you seek built in, but it would be instructive and fun to solve the problem in Stata, no? Preferably in Stata 10 and writing code in Mata using mf_optimize, I suspect. On 8/8/07, Bob Hammond <robert.g.hammond@vanderbilt.edu> wrote: > I would like to define a new variable based on two current variables, > but the new variable cannot be expressed as an explicit function of the > current variables. The relationship is: > > x = n*y^(n-1) - (n-1)*y^n > > where I have data on x and n and would like to create a new variable, y. > x and y are restricted to the real numbers on the open interval (0,1) > and n is restricted to being a positive integer. Under these > restrictions, the function is well-behaved and provides a unique > solution, but not an explicit formulation. I can generate y with the > following loop: > > forvalues i=0(0.001)1 { > replace y=`i' if x - n*`i'^(n-1) + (n-1)*`i'^n < 0.0001 & x - > n*`i'^(n-1) + (n-1)*`i'^n > -0.0001 > } > > but I am wondering if there is a more efficient and precise way. If this > type of loop is best, what precision would you recommend for the steps > of `i' and the tolerance (the ><0.0001)? (I'm on Intercooled Stata 9 for > Windows if that matters.) Thanks in advance, > > Bob * * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**st: Generate new variable with an implicit formulation***From:*Bob Hammond <robert.g.hammond@vanderbilt.edu>

- Prev by Date:
**Re: st: creating a new variable?** - Next by Date:
**Re: st: dwstat2 test for autocorrelation - storing the residuals** - Previous by thread:
**st: RE: Generate new variable with an implicit formulation** - Next by thread:
**st: Thanks (was Precision issues with double storage type)** - Index(es):

© Copyright 1996–2016 StataCorp LP | Terms of use | Privacy | Contact us | What's new | Site index |