scipy.stats.boxcox

scipy.stats.boxcox(x, lmbda=None, alpha=None, optimizer=None)[源代码]

返回由Box-Cox幂变换转换的数据集。

参数
xndarray

输入数组。必须为正一维。不能是常量。

lmbda{无,标量},可选

如果 lmbda 不是None,则对该值执行转换。如果 lmbda 为None,则找到最大化对数似然函数的lambda并将其作为第二个输出参数返回。

alpha{无,浮动},可选

如果 alpha 不是None,则返回 100 * (1-alpha)% 的置信区间 lmbda 作为第三个输出参数。必须介于0.0和1.0之间。

优化器 ,可选可调用,可选

如果 lmbda 是没有的, optimizer 是用于查找 lmbda 这最小化了负对数似然函数。 optimizer 是接受一个参数的可调用对象:

有趣的可调用

目标函数,其以提供的值求值为负的对数似然函数 lmbda

并返回一个对象,如 scipy.optimize.OptimizeResult ,它保存的最佳值是 lmbda 在属性中 x

请参见中的示例 boxcox_normmax 或文档中的 scipy.optimize.minimize_scalar 了解更多信息。

如果 lmbda 不是没有, optimizer 被忽略。

退货
boxcoxndarray

Box-Cox幂变换阵列。

maxlog浮动,可选

如果 lmbda 参数为NONE,则返回的第二个参数是最大化对数似然函数的lambda。

(min_ci, max_ci)浮点数组,可选

如果 lmbda 参数为None,并且 alpha 不是NONE,则此返回的浮点数组表示给定的最小和最大置信度限制 alpha

注意事项

Box-Cox变换由以下公式给出::

y = (x**lmbda - 1) / lmbda,  for lmbda != 0
    log(x),                  for lmbda = 0

boxcox 要求输入数据为正数。有时Box-Cox变换提供一个移位参数来实现这一点; boxcox 不会的。这样的移位参数相当于将正常数加到 x 在打电话之前 boxcox

在以下情况下返回置信度限制 alpha 提供的时间间隔如下:

\[LLF(\hat{\lambda})-LLF(\lambda)<\frac{1}{2}\chi^2(1-\alpha,1),\]

使用 llf 对数似然函数和 \(\chi^2\) 卡方函数。

参考文献

G.E.P.Box和D.R.Cox,“转型分析”,“皇家统计学会学报B”,第26页,第211-252页(1964)。

示例

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

我们从一个非正态分布中产生一些随机变量,并对它做一个概率图,以表明它在尾部是非正态的:

>>> fig = plt.figure()
>>> ax1 = fig.add_subplot(211)
>>> x = stats.loggamma.rvs(5, size=500) + 5
>>> prob = stats.probplot(x, dist=stats.norm, plot=ax1)
>>> ax1.set_xlabel('')
>>> ax1.set_title('Probplot against normal distribution')

我们现在使用的是 boxcox 要转换数据以使其最接近正常,请执行以下操作:

>>> ax2 = fig.add_subplot(212)
>>> xt, _ = stats.boxcox(x)
>>> prob = stats.probplot(xt, dist=stats.norm, plot=ax2)
>>> ax2.set_title('Probplot after Box-Cox transformation')
>>> plt.show()
../../_images/scipy-stats-boxcox-1.png