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
Метод определения оптимального параметра преобразования (
boxcoxlmbdaпараметр). Варианты:- ‘pearsonr’ (по умолчанию)
Максимизирует коэффициент корреляции Пирсона между
y = boxcox(x)и ожидаемые значения дляyif 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()
В качестве альтернативы мы можем определить собственный оптимизатор функция. Предположим, мы интересуемся только значениями 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