View source: R/family.circular.R
vonmises | R Documentation |
Estimates the location and scale parameters of the von Mises distribution by maximum likelihood estimation.
vonmises(llocation = extlogitlink(min = 0, max = 2*pi),
lscale = "loglink", ilocation = NULL, iscale = NULL,
imethod = 1, zero = NULL)
llocation , lscale |
Parameter link functions applied to the
location |
ilocation |
Initial value for the location |
iscale |
Initial value for the scale |
imethod |
An integer with value |
zero |
An integer-valued vector specifying which
linear/additive predictors are modelled as intercepts only.
The default is none of them.
If used, one can choose one value from the set {1,2}.
See |
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.
An object of class "vglmff"
(see vglmff-class
).
The object is used by modelling functions
such as vglm
,
rrvglm
and vgam
.
Numerically, the von Mises can be difficult to fit because of a
log-likelihood having multiple maximums.
The user is therefore encouraged to try different starting values,
i.e., make use of ilocation
and iscale
.
The response and the fitted values are scaled so that
0\leq y< 2\pi
.
The linear/additive predictors are left alone.
Fisher scoring is used.
T. W. Yee
Forbes, C., Evans, M., Hastings, N. and Peacock, B. (2011). Statistical Distributions, Hoboken, NJ, USA: John Wiley and Sons, Fourth edition.
Bessel
,
cardioid
.
CircStats and circular currently have a lot more R functions for circular data than the VGAM package.
vdata <- data.frame(x2 = runif(nn <- 1000))
vdata <- transform(vdata,
y = rnorm(nn, 2+x2, exp(0.2))) # Bad data!!
fit <- vglm(y ~ x2, vonmises(zero = 2), vdata, trace = TRUE)
coef(fit, matrix = TRUE)
Coef(fit)
with(vdata, range(y)) # Original data
range(depvar(fit)) # Processed data is in [0,2*pi)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.