scipy.stats.

boxcox_normmax#

scipy.stats.boxcox_normmax(x, brack=None, метод='pearsonr', оптимизатор=None, *, ymax=BIG_FLOAT)[источник]#

Вычислить оптимальный параметр преобразования Бокса-Кокса для входных данных.

Параметры:
xarray_like

Входной массив. Все элементы должны быть положительными, конечными, вещественными числами.

brack2-кортеж, опционально, по умолчанию (-2.0, 2.0)

Начальный интервал для поиска вниз по склону для значения по умолчанию optimize.brent решатель. Обратите внимание, что в большинстве случаев это не критично; конечный результат может быть вне этого интервала. Если оптимизатор передается, brack должно быть None.

методstr, optional

Метод определения оптимального параметра преобразования (boxcox lmbda параметр). Варианты:

‘pearsonr’ (по умолчанию)

Максимизирует коэффициент корреляции Пирсона между y = boxcox(x) и ожидаемые значения для y if x были бы нормально распределены.

'mle'

Максимизирует логарифмическое правдоподобие boxcox_llf. Это метод, используемый в boxcox.

‘all’

Использовать все доступные методы оптимизации и вернуть все результаты. Полезно для сравнения различных методов.

оптимизаторвызываемый объект, необязательный

оптимизатор является вызываемым объектом, принимающим один аргумент:

funcallable

Целевая функция для минимизации. fun принимает один аргумент, параметр преобразования Бокса-Кокса lmbdaи возвращает значение функции (например, отрицательное логарифмическое правдоподобие) для предоставленного аргумента. Задача оптимизатор состоит в нахождении значения lmbda что минимизирует fun.

и возвращает объект, например экземпляр scipy.optimize.OptimizeResult, которая содержит оптимальное значение lmbda в атрибуте x.

См. пример ниже или документацию scipy.optimize.minimize_scalar для получения дополнительной информации.

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

Неограниченный оптимальный параметр преобразования может привести к тому, что данные, преобразованные по Боксу-Коксу, будут иметь экстремальную величину или даже переполнение. Этот параметр ограничивает оптимизацию методом максимального правдоподобия так, что величина преобразованных x не превышает ymax. По умолчанию это максимальное значение входного типа данных. Если установлено в бесконечность, boxcox_normmax возвращает неограниченную оптимальную лямбду. Игнорируется, когда method='pearsonr'.

Возвращает:
maxlogfloat или ndarray

Найденный оптимальный параметр преобразования. Массив вместо скаляра для method='all'.

Примеры

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

Мы можем сгенерировать некоторые данные и определить оптимальный lmbda различными способами:

>>> rng = np.random.default_rng()
>>> x = stats.loggamma.rvs(5, size=30, random_state=rng) + 5
>>> y, lmax_mle = stats.boxcox(x)
>>> lmax_pearsonr = stats.boxcox_normmax(x)
>>> lmax_mle
2.217563431465757
>>> lmax_pearsonr
2.238318660200961
>>> stats.boxcox_normmax(x, method='all')
array([2.23831866, 2.21756343])
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> prob = stats.boxcox_normplot(x, -10, 10, plot=ax)
>>> ax.axvline(lmax_mle, color='r')
>>> ax.axvline(lmax_pearsonr, color='g', ls='--')
>>> plt.show()
../../_images/scipy-stats-boxcox_normmax-1_00_00.png

В качестве альтернативы мы можем определить собственный оптимизатор функция. Предположим, мы интересуемся только значениями lmbda на интервале [6, 7], мы хотим использовать scipy.optimize.minimize_scalar с method='bounded', и мы хотим использовать более жёсткие допуски при оптимизации функции логарифмического правдоподобия. Для этого мы определяем функцию, которая принимает позиционный аргумент fun и использует scipy.optimize.minimize_scalar для минимизации fun с учётом предоставленных ограничений и допусков:

>>> from scipy import optimize
>>> options = {'xatol': 1e-12}  # absolute tolerance on `x`
>>> def optimizer(fun):
...     return optimize.minimize_scalar(fun, bounds=(6, 7),
...                                     method="bounded", options=options)
>>> stats.boxcox_normmax(x, optimizer=optimizer)
6.000000000