scipy.stats.

circstd#

scipy.stats.circstd(образцы, высокий=6.283185307179586, низкий=0, ось=None, nan_policy='propagate', *, нормализовать=False, keepdims=False)[источник]#

Вычислить круговое стандартное отклонение выборки угловых наблюдений.

Учитывая \(n\) угловые наблюдения \(x_1, \cdots, x_n\) измеряется в радианах, их круговое стандартное отклонение определяется как ([2], Ур. 2.3.11)

\[\sqrt{ -2 \log \left| \frac{1}{n} \sum_{k=1}^n e^{i x_k} \right| }\]

где \(i\) является мнимой единицей, а \(|z|\) даёт длину комплексного числа \(z\). \(|z|\) в приведенном выше выражении известно как средняя результирующая длина.

Параметры:
образцыarray_like

Входной массив наблюдений углов. Значение полного угла равно (high - low).

высокийfloat, опционально

Верхняя граница главного значения угла. По умолчанию 2*pi.

низкийfloat, опционально

Нижняя граница главного значения угла. По умолчанию 0.

нормализоватьлогический, необязательный

Если False (по умолчанию), возвращаемое значение вычисляется по вышеуказанной формуле с входными данными, масштабированными на (2*pi)/(high-low) и выход масштабирован (обратно) на (high-low)/(2*pi). Если Trueвыходные данные не масштабируются и возвращаются напрямую.

осьint или None, по умолчанию: None

Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если None, вход будет сведён в одномерный массив перед вычислением статистики.

nan_policy{‘propagate’, ‘omit’, ‘raise’}

Определяет, как обрабатывать входные значения NaN.

  • propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.

  • omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.

  • raise: если присутствует NaN, то ValueError будет вызвано исключение.

keepdimsbool, по умолчанию: False

Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.

Возвращает:
circstdfloat

Круговое стандартное отклонение, опционально нормализованное.

Если входной массив пуст, np.nan возвращается.

Смотрите также

circmean

Круговая средняя.

circvar

Круговая дисперсия.

Примечания

В пределе малых углов круговая стандартная ошибка близка к 'линейной' стандартной ошибке, если normalize является False.

Начиная с SciPy 1.9, np.matrix входные данные (не рекомендуется для нового кода) преобразуются в np.ndarray перед выполнением вычисления. В этом случае результатом будет скаляр или np.ndarray подходящей формы вместо 2D np.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр или np.ndarray вместо маскированного массива с mask=False.

Ссылки

[1]

Мардия, К. В. (1972). 2. В Статистика направленных данных (стр. 18-24). Academic Press. DOI:10.1016/C2013-0-07425-7.

[2]

Мардия, К. В. и Джапп, П. Е. Направленная статистика. John Wiley & Sons, 1999.

Примеры

>>> import numpy as np
>>> from scipy.stats import circstd
>>> import matplotlib.pyplot as plt
>>> samples_1 = np.array([0.072, -0.158, 0.077, 0.108, 0.286,
...                       0.133, -0.473, -0.001, -0.348, 0.131])
>>> samples_2 = np.array([0.111, -0.879, 0.078, 0.733, 0.421,
...                       0.104, -0.136, -0.867,  0.012,  0.105])
>>> circstd_1 = circstd(samples_1)
>>> circstd_2 = circstd(samples_2)

Постройте график выборок.

>>> fig, (left, right) = plt.subplots(ncols=2)
>>> for image in (left, right):
...     image.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...                np.sin(np.linspace(0, 2*np.pi, 500)),
...                c='k')
...     image.axis('equal')
...     image.axis('off')
>>> left.scatter(np.cos(samples_1), np.sin(samples_1), c='k', s=15)
>>> left.set_title(f"circular std: {np.round(circstd_1, 2)!r}")
>>> right.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...            np.sin(np.linspace(0, 2*np.pi, 500)),
...            c='k')
>>> right.scatter(np.cos(samples_2), np.sin(samples_2), c='k', s=15)
>>> right.set_title(f"circular std: {np.round(circstd_2, 2)!r}")
>>> plt.show()
../../_images/scipy-stats-circstd-1.png