Learn R Programming

VGAM (version 0.8-3)

vonmises: von Mises Distribution Family Function

Description

Estimates the location and scale parameters of the von Mises distribution by maximum likelihood estimation.

Usage

vonmises(llocation="elogit", lscale="loge",
         elocation=if(llocation=="elogit") list(min=0, max=2*pi)
         else list(), escale=list(), ilocation=NULL,
         iscale=NULL, imethod=1, zero=NULL)

Arguments

llocation, lscale
Parameter link functions applied to the location $a$ parameter and scale parameter $k$, respectively. See Links for more choices. For $k$, a log link is the default because the parameter is positive.
elocation, escale
List. Extra argument for each of the link functions. See earg in Links for general information.
ilocation
Initial value for the location $a$ parameter. By default, an initial value is chosen internally using imethod. Assigning a value will override the argument imethod.
iscale
Initial value for the scale $k$ parameter. By default, an initial value is chosen internally using imethod. Assigning a value will override the argument imethod.
imethod
An integer with value 1 or 2 which specifies the initialization method. If failure to converge occurs try the other value, or else specify a value for ilocation and iscale.
zero
An integer-valued vector specifying which linear/additive predictors are modelled as intercepts only. The default is none of them. If used, choose one value from the set {1,2}.

Value

Warning

Numerically, the von Mises can be difficult to fit because of a log-likelihood having multiple maxima. The user is therefore encouraged to try different starting values, i.e., make use of ilocation and iscale.

Details

The (two-parameter) von Mises is the most commonly used distribution in practice for circular data. It has a density that can be written as $$f(y;a,k) = \frac{\exp[k\cos(y-a)]}{ 2\pi I_0(k)}$$ where $0 \leq y < 2\pi$, $k>0$ is the scale parameter, $a$ is the location parameter, and $I_0(k)$ is the modified Bessel function of order 0 evaluated at $k$. The mean of $Y$ (which is the fitted value) is $a$ and the circular variance is $1 - I_1(k) / I_0(k)$ where $I_1(k)$ is the modified Bessel function of order 1. By default, $\eta_1=\log(a/(2\pi-a))$ and $\eta_2=\log(k)$ for this family function.

References

Evans, M., Hastings, N. and Peacock, B. (2000) Statistical Distributions, New York: Wiley-Interscience, Third edition.

See Also

Bessel, cardioid.

CircStats and circular currently have a lot more R functions for circular data than the VGAM package.

Examples

Run this code
vdata = data.frame(x = runif(nn <- 1000))
vdata = transform(vdata, y = rnorm(nn, m=2+x, sd=exp(0.2))) # Bad data!!
fit = vglm(y  ~ x, vonmises(zero=2), vdata, trace=TRUE)
coef(fit, matrix=TRUE)
Coef(fit)
with(vdata, range(y))   # original data
range(fit@y)            # processed data is in [0,2*pi)

Run the code above in your browser using DataLab