scipy.stats.mstats.

linregress#

scipy.stats.mstats.linregress(x, y=None)[источник]#

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

Параметры:
x, yarray_like

Два набора измерений. Оба массива должны иметь одинаковую длину N. Если только x задано (и y=None), тогда это должен быть двумерный массив, где одно измерение имеет длину 2. Два набора измерений затем находятся путем разделения массива по измерению длины 2. В случае, когда y=None и x представляет собой массив 2xN, linregress(x) эквивалентно linregress(x[0], x[1]).

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

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

slopefloat

Наклон линии регрессии.

interceptfloat

Свободный член линии регрессии.

rvaluefloat

Коэффициент корреляции Пирсона. Квадрат rvalue равен коэффициенту детерминации.

p-значениеfloat

P-значение для проверки гипотезы, нулевая гипотеза которой состоит в том, что наклон равен нулю, с использованием критерия Вальда с t-распределением статистики критерия. См. альтернатива выше для альтернативных гипотез.

stderrfloat

Стандартная ошибка оценённого наклона (градиента), в предположении нормальности остатков.

intercept_stderrfloat

Стандартная ошибка оцененного пересечения, в предположении нормальности остатков.

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

scipy.optimize.curve_fit

Использовать нелинейный метод наименьших квадратов для подгонки функции к данным.

scipy.optimize.leastsq

Минимизировать сумму квадратов набора уравнений.

Примечания

Пропущенные значения рассматриваются попарно: если значение отсутствует в x, соответствующее значение в y замаскировано.

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

slope, intercept, r, p, se = linregress(x, y)

Однако при таком стиле стандартная ошибка пересечения не доступна. Чтобы иметь доступ ко всем вычисленным значениям, включая стандартную ошибку пересечения, используйте возвращаемое значение как объект с атрибутами, например:

result = linregress(x, y)
print(result.intercept, result.intercept_stderr)

Примеры

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy import stats
>>> rng = np.random.default_rng()

Сгенерировать некоторые данные:

>>> x = rng.random(10)
>>> y = 1.6*x + rng.random(10)

Выполнить линейную регрессию:

>>> res = stats.mstats.linregress(x, y)

Коэффициент детерминации (R-квадрат):

>>> print(f"R-squared: {res.rvalue**2:.6f}")
R-squared: 0.717533

Постройте график данных вместе с подобранной линией:

>>> plt.plot(x, y, 'o', label='original data')
>>> plt.plot(x, res.intercept + res.slope*x, 'r', label='fitted line')
>>> plt.legend()
>>> plt.show()
../../_images/scipy-stats-mstats-linregress-1_00_00.png

Вычислить 95% доверительный интервал для наклона и пересечения:

>>> # Two-sided inverse Students t-distribution
>>> # p - probability, df - degrees of freedom
>>> from scipy.stats import t
>>> tinv = lambda p, df: abs(t.ppf(p/2, df))
>>> ts = tinv(0.05, len(x)-2)
>>> print(f"slope (95%): {res.slope:.6f} +/- {ts*res.stderr:.6f}")
slope (95%): 1.453392 +/- 0.743465
>>> print(f"intercept (95%): {res.intercept:.6f}"
...       f" +/- {ts*res.intercept_stderr:.6f}")
intercept (95%): 0.616950 +/- 0.544475