{smcl} {* 6may2004}{...} {hline} help for {hi:egencirc} {hline} {title:Extensions to generate (circular functions)} {p 8 30 2}{cmd:egen} [{it:type}] {it:newvar} {cmd:=} {it:fcn}{cmd:(}{it:arguments}{cmd:)} [{cmd:if} {it:exp}] [{cmd:in} {it:range}] [{cmd:,} {it:options}] {title:Description} {p 4 4 2} {cmd:egen} creates {it:newvar} of the optionally specified storage type equal to {it:fcn}{cmd:(}{it:arguments}{cmd:)}. Depending on {it:fcn()}, {it:arguments}, if present, refers to an expression, {it:varlist}, or a {it:numlist} and the {it:options} are similarly {it:fcn} dependent. {p 4 4 2} This help file documents various user-written {cmd:egen} functions for use with circular variables, usually measured on a scale from 0 to 360 degrees. {title:{cmd:egen} functions} {p 4 8 2}{cmd:atan2(}{it:sinevar cosinevar}{cmd:)} [ {cmd:,} {cmdab:rad:ians} ] returns the arctangent of two variables {it:sinevar} and {it:cosinevar} as a angle in the range 0 to 360 degrees. The option {cmd:radians} specifies that the results should be in radians. {p 4 8 2}{cmd:invvm(}{it:exp}{cmd:)} [{cmd:,} {cmdab:k:appa(}{it:#}{cmd:)} {cmd:tol(}{it:#}{cmd:)} {cmd:log} {cmdab:rad:ians} ] returns the inverse distribution function (quantile function) of a variable following a von Mises distribution with vector mean zero and concentration parameter specified by the {cmd:kappa()} option as angles in the range -180 to 180 degrees, and as a function of an expression giving cumulative probabilities and so taking values between 0 and 1. If {cmd:kappa()} is not specified, the function looks for {cmd:r(kappa)}, as is left in memory by {help circvm}. The quantile function is calculated using the {cmd:vm()} function documented below and an algorithm given by Fisher (1993, p.53). (Note that the steps of that algorithm should be numbered 1 to 4, contrary to early printings of Fisher 1993.) The default tolerance for that algorithm is 1e-6. This may be varied by the {cmd:tol()} option. The {cmd:log} option may be used to see a display of the maximum error of approximation as the algorithm proceeds, as a check on convergence. {cmd:tol} and {cmd:log()} are technical options and are rarely used. The option {cmd:radians} specifies that the results should be in radians. {p 4 8 2}{cmd:rndvm(}{cmd:),} [{cmd:,} {cmdab:k:appa(}{it:#}{cmd:)} {cmdab:m:u(}{it:#}{cmd:)} {cmdab:rad:ians} ] returns a random sample from a von Mises distribution with vector mean specified by the {cmd:mu()} option and concentration parameter specified by the {cmd:kappa()} option, as angles in the range 0 to 360 degrees. Note that no argument is required or allowed. If {cmd:mu()} is not specified, the function looks for {cmd:r(vecmean)}, as is left in memory by {help circvm}; if that is not found, a value of 0 is assumed. Any argument of {cmd:mu()} should be in degrees. If {cmd:kappa()} is not specified, the function looks for {cmd:r(kappa)}, as is left in memory by {help circvm}. The random sample is calculated using an algorithm introduced by Best and Fisher (1979) and given by Fisher (1993, p.49) and Mardia and Jupp (2000, p.43). The option {cmd:radians} specifies that the results should be in radians. {p 4 8 2}{cmd:vm(}{it:varname}{cmd:),} [{cmd:,} {cmdab:k:appa(}{it:#}{cmd:)} {cmdab:m:u(}{it:#}{cmd:)} {cmdab:rad:ians} ] returns the cumulative distribution function of a von Mises distribution with vector mean specified by the {cmd:mu()} option and concentration parameter specified by the {cmd:kappa()} option, given angles in the range 0 to 360 degrees. If {cmd:mu()} is not specified, the function looks for {cmd:r(vecmean)}, as is left in memory by {help circvm}; if that is not found, a value of 0 is assumed. Any argument of {cmd:mu()} should be in degrees, unless the {cmd:radians} option is also specified. If {cmd:kappa()} is not specified, the function looks for {cmd:r(kappa)}, as is left in memory by {help circvm}. The distribution function is calculated using an algorithm discussed and implemented in Fortran by Hill (1976, 1977), using choices of constants to ensure accuracy to 8 decimal places (see Hill 1977, p.280). The option {cmd:radians} specifies that the inputs are in radians. {p 4 8 2}{cmd:vmden(}{it:varname}{cmd:)} [{cmd:,} {cmdab:k:appa(}{it:#}{cmd:)} {cmdab:m:u(}{it:#}{cmd:)} {cmdab:rad:ians} ] returns the density function of a von Mises distribution with vector mean specified by the {cmd:mu()} option and concentration parameter specified by the {cmd:kappa()} option, given angles in the range 0 to 360 degrees. If {cmd:mu()} is not specified, the function looks for {cmd:r(vecmean)}, as is left in memory by {help circvm}; if that is not found, a value of 0 is assumed. Any argument of {cmd:mu()} should be in degrees, unless the {cmd:radians} option is also specified. If {cmd:kappa()} is not specified, the function looks for {cmd:r(kappa)}, as is left in memory by {help circvm}. The option {cmd:radians} specifies that the inputs are in radians. {title:Remarks} {p 4 4 2}{cmd:invvm()} and {cmd:vmden()} use the calculator function {help i0kappa}. {title:Examples} {p 4 8 2}{cmd:. egen angle = atan2(sine cosine)} {p 4 8 2}{cmd:. circvm wallasp}{p_end} {p 4 8 2}{cmd:. egen rndvm = rndvm()}{p_end} {p 4 8 2}{cmd:. egen Fvm = vm(wallasp)}{p_end} {p 4 8 2}{cmd:. egen vmden = vmden(wallasp)}{p_end} {title:Author} {p 4 4 2}Nicholas J. Cox, University of Durham, U.K.{break} n.j.cox@durham.ac.uk {title:References} {p 4 8 2}Best, D.J. and Fisher, N.I. 1979. Efficient simulation of the von Mises distribution. {it:Applied Statistics} 28: 152--157. {p 4 8 2}Fisher, N.I. 1993. {it:Statistical analysis of circular data.} Cambridge: Cambridge University Press. {p 4 8 2}Hill, G.W. 1976. New approximations to the von Mises distribution. {it:Biometrika} 63: 673--676. (Erratum 1997, 64: 655.) {p 4 8 2}Hill, G.W. 1977. ALGORITHM 518: Incomplete Bessel function I_0: the von Mises distribution. {it:ACM Transactions on Mathematical Software} 3: 279--284. {p 4 8 2}Mardia, K.V. and Jupp, P.E. 2000. {it:Directional statistics.} Chichester: John Wiley. {title:Also see} Manual: {hi:[R] egen} {p 4 13 2}Online: help for {help circular}, {help circvm}, {help i0kappa}