scipy.stats.

boxcox_normmax#

scipy.stats.boxcox_normmax(x, brack=None, method='pearsonr', optimizer=None, *, ymax=BIG_FLOAT)[Quelle]#

Berechnet den optimalen Box-Cox-Transformationsparameter für Eingabedaten.

Parameter:
xarray_like

Eingabearray. Alle Einträge müssen positive, endliche, reelle Zahlen sein.

brack2-Tupel, optional, Standard: (-2.0, 2.0)

Das Startintervall für eine abwärtsgerichtete Klammersuche für den Standard-Solver optimize.brent. Beachten Sie, dass dies in den meisten Fällen nicht kritisch ist; das Endergebnis darf außerhalb dieser Klammer liegen. Wenn optimizer übergeben wird, muss brack None sein.

methodstr, optional

Die Methode zur Bestimmung des optimalen Transformationsparameters (Parameter lmbda von boxcox). Optionen sind

‘pearsonr’ (Standard)

Maximiert den Pearson-Korrelationskoeffizienten zwischen y = boxcox(x) und den erwarteten Werten für y, wenn x normalverteilt wäre.

‘mle’

Maximiert die Log-Likelihood boxcox_llf. Dies ist die Methode, die in boxcox verwendet wird.

‘all’

Verwendet alle verfügbaren Optimierungsmethoden und gibt alle Ergebnisse zurück. Nützlich zum Vergleichen verschiedener Methoden.

optimizeraufrufbar, optional

optimizer ist eine aufrufbare Funktion, die ein Argument akzeptiert

funcallable

Die zu minimierende Zielfunktion. fun akzeptiert ein Argument, den Box-Cox-Transformationsparameter lmbda, und gibt den Wert der Funktion (z. B. die negative Log-Likelihood) am angegebenen Argument zurück. Die Aufgabe von optimizer besteht darin, den Wert von lmbda zu finden, der fun *minimiert*.

und gibt ein Objekt zurück, z. B. eine Instanz von scipy.optimize.OptimizeResult, das den optimalen Wert von lmbda in einem Attribut x enthält.

Siehe das folgende Beispiel oder die Dokumentation von scipy.optimize.minimize_scalar für weitere Informationen.

ymaxfloat, optional

Der unbeschränkte optimale Transformationsparameter kann dazu führen, dass die Box-Cox-transformierten Daten extreme Größenordnungen aufweisen oder sogar überlaufen. Dieser Parameter beschränkt die MLE-Optimierung so, dass die Größe des transformierten x ymax nicht überschreitet. Der Standardwert ist der maximale Wert des Eingabe-Datentyps. Wenn er auf unendlich gesetzt wird, gibt boxcox_normmax den unbeschränkten optimalen Lambda-Wert zurück. Wird ignoriert, wenn method='pearsonr'.

Rückgabe:
maxlogfloat oder ndarray

Der gefundene optimale Transformationsparameter. Ein Array anstelle eines Skalars für method='all'.

Beispiele

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

Wir können einige Daten generieren und den optimalen lmbda auf verschiedene Arten bestimmen

>>> 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

Alternativ können wir unsere eigene optimizer-Funktion definieren. Angenommen, wir sind nur an Werten von lmbda im Intervall [6, 7] interessiert, wir möchten scipy.optimize.minimize_scalar mit method='bounded' verwenden, und wir möchten engere Toleranzen bei der Optimierung der Log-Likelihood-Funktion verwenden. Um dies zu tun, definieren wir eine Funktion, die das Positionsargument fun akzeptiert und scipy.optimize.minimize_scalar verwendet, um fun unter den angegebenen Grenzen und Toleranzen zu minimieren

>>> 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