当前位置: 首页>>代码示例>>用法及示例精选>>正文


python scipy stats.yeojohnson用法及代码示例

用法:

scipy.stats.yeojohnson(x, lmbda=None)

返回通过Yeo-Johnson幂变换而变换的数据集。

参数:

xndarray

输入数组。应该是一维的。

lmbdafloat, 可选参数

如果lmbdaNone,找到使log-likelihood函数最大化的lambda并将其作为第二个输出参数返回。否则,将针对给定值进行转换。

返回值:

yeojohnson:ndarray

Yeo-Johnson功率转换阵列。

maxlog浮动,可选

如果lmbda参数为None,则返回的第二个参数是最大化log-likelihood函数的lambda。

注意:

Yeo-Johnson转换由下式给出:

y = ((x + 1)**lmbda - 1) / lmbda,                for x >= 0, lmbda != 0
    log(x + 1),                                  for x >= 0, lmbda = 0
    -((-x + 1)**(2 - lmbda) - 1) / (2 - lmbda),  for x < 0, lmbda != 2
    -log(-x + 1),                                for x < 0, lmbda = 2

不像boxcoxyeojohnson不需要输入数据为正。

1.2.0版的新函数。

参考文献:

I.Yeo和R.A.约翰逊,“改善正态性或对称性的功率变换新家族”,Biometrika 87.4(2000):

例子:

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

我们现在使用yeojohnson转换数据,使其最接近正常值:

>>> ax2 = fig.add_subplot(212)
>>> xt, lmbda = stats.yeojohnson(x)
>>> prob = stats.probplot(xt, dist=stats.norm, plot=ax2)
>>> ax2.set_title('Probplot after Yeo-Johnson transformation')
>>> plt.show()
../_images/scipy-stats-yeojohnson-1.png

源码:

scipy.stats.yeojohnson的API实现见:[源代码]

相关用法

注:本文由纯净天空筛选整理自 scipy.stats.yeojohnson。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。