scipy.stats.

theilslopes#

scipy.stats.theilslopes(y, x=None, alpha=0.95, метод='separate', *, ось=None, nan_policy='propagate', keepdims=False)[источник]#

Вычисляет оценку Тейла-Сена для набора точек (x, y).

theilslopes реализует метод устойчивой линейной регрессии. Он вычисляет наклон как медиану всех наклонов между парными значениями.

Параметры:
yarray_like

Зависимая переменная.

xarray_like или None, необязательный

Независимая переменная. Если None, используется arange(len(y)) вместо этого.

alphafloat, опционально

Степень доверия между 0 и 1. По умолчанию — 95% доверительный интервал. Обратите внимание, что alpha симметричен относительно 0.5, т.е. и 0.1, и 0.9 интерпретируются как «найти 90% доверительный интервал».

метод{'joint', 'separate'}, опционально

Метод, используемый для вычисления оценки для пересечения. Поддерживаются следующие методы,

  • ‘joint’: Использует np.median(y - slope * x) в качестве пересечения.

  • ‘separate’: Использует np.median(y) - slope * np.median(x)

    как intercept.

По умолчанию 'separate'.

Добавлено в версии 1.8.0.

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

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

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

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

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

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

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

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

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

Возвращает:
результатTheilslopesResult экземпляр

Возвращаемое значение — объект со следующими атрибутами:

slopefloat

Наклон Тейла.

interceptfloat

Пересечение линии Тейла.

низкий_наклонfloat

Нижняя граница доверительного интервала для slope.

high_slopefloat

Верхняя граница доверительного интервала для slope.

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

siegelslopes

аналогичная техника с использованием повторяющихся медиан

Примечания

Реализация theilslopes следует [1]. Свободный член не определён в [1], и здесь он определяется как median(y) - slope*median(x), который приведён в [3]. Другие определения перехвата существуют в литературе, такие как median(y - slope*x) в [4]. Подход к вычислению интерсепта может определяться параметром method. Доверительный интервал для пересечения не предоставляется, так как этот вопрос не рассматривается в [1].

Для совместимости со старыми версиями SciPy возвращаемое значение ведёт себя как namedtuple длины 4, с полями slope, intercept, low_slope, и high_slope, поэтому можно продолжать писать:

slope, intercept, low_slope, high_slope = theilslopes(y, x)

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

Ссылки

[1] (1,2,3)

P.K. Sen, “Estimates of the regression coefficient based on Kendall’s tau”, J. Am. Stat. Assoc., Vol. 63, pp. 1379-1389, 1968.

[2]

Х. Тейл, «Рангово-инвариантный метод линейного и полиномиального регрессионного анализа I, II и III», Nederl. Akad. Wetensch., Proc. 53:, стр. 386-392, стр. 521-525, стр. 1397-1412, 1950.

[3]

W.L. Conover, «Практическая непараметрическая статистика», 2-е изд., John Wiley and Sons, Нью-Йорк, стр. 493.

Примеры

>>> import numpy as np
>>> from scipy import stats
>>> import matplotlib.pyplot as plt
>>> x = np.linspace(-5, 5, num=150)
>>> y = x + np.random.normal(size=x.size)
>>> y[11:15] += 10  # add outliers
>>> y[-5:] -= 7

Вычислить наклон, пересечение и 90% доверительный интервал. Для сравнения, также вычислить метод наименьших квадратов с linregress:

>>> res = stats.theilslopes(y, x, 0.90, method='separate')
>>> lsq_res = stats.linregress(x, y)

Постройте результаты. Линия регрессии Тейла-Сена показана красным, пунктирные красные линии иллюстрируют доверительный интервал наклона (обратите внимание, что пунктирные красные линии не являются доверительным интервалом регрессии, так как доверительный интервал пересечения не включён). Зелёная линия показывает наименьшие квадраты для сравнения.

>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot(x, y, 'b.')
>>> ax.plot(x, res[1] + res[0] * x, 'r-')
>>> ax.plot(x, res[1] + res[2] * x, 'r--')
>>> ax.plot(x, res[1] + res[3] * x, 'r--')
>>> ax.plot(x, lsq_res[1] + lsq_res[0] * x, 'g-')
>>> plt.show()
../../_images/scipy-stats-theilslopes-1.png