Learn R Programming

rotations (version 1.6.5)

Fisher: The matrix-Fisher distribution

Description

Density, distribution function and random generation for the matrix-Fisher distribution with concentration kappa \(\kappa\).

Usage

dfisher(r, kappa = 1, nu = NULL, Haar = TRUE)

pfisher(q, kappa = 1, nu = NULL, lower.tail = TRUE)

rfisher(n, kappa = 1, nu = NULL)

Value

dfisher

gives the density

pfisher

gives the distribution function

rfisher

generates random deviates

Arguments

r, q

vector of quantiles.

kappa

concentration parameter.

nu

circular variance, can be used in place of kappa.

Haar

logical; if TRUE density is evaluated with respect to the Haar measure.

lower.tail

logical; if TRUE (default), probabilities are \(P(X \le x)\) otherwise, \(P(X > x)\).

n

number of observations. If length(n)>1, the length is taken to be the number required.

Details

The matrix-Fisher distribution with concentration \(\kappa\) has density $$C_\mathrm{{F}}(r|\kappa)=\frac{1}{2\pi[\mathrm{I_0}(2\kappa)-\mathrm{I_1}(2\kappa)]}e^{2\kappa\cos(r)}[1-\cos(r)]$$ with respect to Lebesgue measure where \(\mathrm{I}_p(\cdot)\) denotes the Bessel function of order \(p\) defined as \(\mathrm{I}_p(\kappa)=\frac{1}{2\pi}\int_{-\pi}^{\pi}\cos(pr)e^{\kappa\cos r}dr\). If kappa>354 then random deviates are generated from the Cayley distribution because they agree closely for large kappa and generation is more stable from the Cayley distribution.

For large \(\kappa\), the Bessel functon gives errors so a large \(\kappa\) approximation to the matrix-Fisher distribution is used instead, which is the Maxwell-Boltzmann density.

See Also

Angular-distributions for other distributions in the rotations package.

Examples

Run this code
r <- seq(-pi, pi, length = 500)

#Visualize the matrix Fisher density fucntion with respect to the Haar measure
plot(r, dfisher(r, kappa = 10), type = "l", ylab = "f(r)")

#Visualize the matrix Fisher density fucntion with respect to the Lebesgue measure
plot(r, dfisher(r, kappa = 10, Haar = FALSE), type = "l", ylab = "f(r)")

#Plot the matrix Fisher CDF
plot(r,pfisher(r,kappa = 10), type = "l", ylab = "F(r)")

#Generate random observations from matrix Fisher distribution
rs <- rfisher(20, kappa = 1)
hist(rs, breaks = 10)

Run the code above in your browser using DataLab