scipy.stats.vonmises — SciPy v1.15.2 Manual (original) (raw)

scipy.stats.vonmises = <scipy.stats._continuous_distns.vonmises_gen object>[source]#

A Von Mises continuous random variable.

As an instance of the rv_continuous class, vonmises object inherits from it a collection of generic methods (see below for the full list), and completes them with details specific for this particular distribution.

Notes

The probability density function for vonmises and vonmises_line is:

\[f(x, \kappa) = \frac{ \exp(\kappa \cos(x)) }{ 2 \pi I_0(\kappa) }\]

for \(-\pi \le x \le \pi\), \(\kappa \ge 0\). \(I_0\) is the modified Bessel function of order zero (scipy.special.i0).

vonmises is a circular distribution which does not restrict the distribution to a fixed interval. Currently, there is no circular distribution framework in SciPy. The cdf is implemented such thatcdf(x + 2*np.pi) == cdf(x) + 1.

vonmises_line is the same distribution, defined on \([-\pi, \pi]\)on the real line. This is a regular (i.e. non-circular) distribution.

Note about distribution parameters: vonmises and vonmises_line takekappa as a shape parameter (concentration) and loc as the location (circular mean). A scale parameter is accepted but does not have any effect.

Examples

Import the necessary modules.

import numpy as np import matplotlib.pyplot as plt from scipy.stats import vonmises

Define distribution parameters.

loc = 0.5 * np.pi # circular mean kappa = 1 # concentration

Compute the probability density at x=0 via the pdf method.

vonmises.pdf(0, loc=loc, kappa=kappa) 0.12570826359722018

Verify that the percentile function ppf inverts the cumulative distribution function cdf up to floating point accuracy.

x = 1 cdf_value = vonmises.cdf(x, loc=loc, kappa=kappa) ppf_value = vonmises.ppf(cdf_value, loc=loc, kappa=kappa) x, cdf_value, ppf_value (1, 0.31489339900904967, 1.0000000000000004)

Draw 1000 random variates by calling the rvs method.

sample_size = 1000 sample = vonmises(loc=loc, kappa=kappa).rvs(sample_size)

Plot the von Mises density on a Cartesian and polar grid to emphasize that it is a circular distribution.

fig = plt.figure(figsize=(12, 6)) left = plt.subplot(121) right = plt.subplot(122, projection='polar') x = np.linspace(-np.pi, np.pi, 500) vonmises_pdf = vonmises.pdf(x, loc=loc, kappa=kappa) ticks = [0, 0.15, 0.3]

The left image contains the Cartesian plot.

left.plot(x, vonmises_pdf) left.set_yticks(ticks) number_of_bins = int(np.sqrt(sample_size)) left.hist(sample, density=True, bins=number_of_bins) left.set_title("Cartesian plot") left.set_xlim(-np.pi, np.pi) left.grid(True)

The right image contains the polar plot.

right.plot(x, vonmises_pdf, label="PDF") right.set_yticks(ticks) right.hist(sample, density=True, bins=number_of_bins, ... label="Histogram") right.set_title("Polar plot") right.legend(bbox_to_anchor=(0.15, 1.06))

../../_images/scipy-stats-vonmises-1.png

Methods

rvs(kappa, loc=0, scale=1, size=1, random_state=None) Random variates.
pdf(x, kappa, loc=0, scale=1) Probability density function.
logpdf(x, kappa, loc=0, scale=1) Log of the probability density function.
cdf(x, kappa, loc=0, scale=1) Cumulative distribution function.
logcdf(x, kappa, loc=0, scale=1) Log of the cumulative distribution function.
sf(x, kappa, loc=0, scale=1) Survival function (also defined as 1 - cdf, but sf is sometimes more accurate).
logsf(x, kappa, loc=0, scale=1) Log of the survival function.
ppf(q, kappa, loc=0, scale=1) Percent point function (inverse of cdf — percentiles).
isf(q, kappa, loc=0, scale=1) Inverse survival function (inverse of sf).
moment(order, kappa, loc=0, scale=1) Non-central moment of the specified order.
stats(kappa, loc=0, scale=1, moments=’mv’) Mean(‘m’), variance(‘v’), skew(‘s’), and/or kurtosis(‘k’).
entropy(kappa, loc=0, scale=1) (Differential) entropy of the RV.
fit(data) Parameter estimates for generic data. See scipy.stats.rv_continuous.fit for detailed documentation of the keyword arguments.
expect(func, args=(kappa,), loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds) Expected value of a function (of one argument) with respect to the distribution.
median(kappa, loc=0, scale=1) Median of the distribution.
mean(kappa, loc=0, scale=1) Mean of the distribution.
var(kappa, loc=0, scale=1) Variance of the distribution.
std(kappa, loc=0, scale=1) Standard deviation of the distribution.
interval(confidence, kappa, loc=0, scale=1) Confidence interval with equal areas around the median.