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