scipy.stats.yeojohnson_llf

scipy.stats.yeojohnson_llf(lmb, data)[源代码]

yojohnson对数似然函数。

参数
lmb标量

YEO-JONSON变换的参数。看见 yeojohnson 有关详细信息,请参阅。

dataarray_like

要计算Yeo-Johnson对数似然率的数据。如果 data 是多维的,则沿第一轴计算对数似然。

退货
llf浮动

Yeo-Johnson对数似然率 data 给定的 lmb

注意事项

这里将Yeo-Johnson对数似然函数定义为

\[lLF=-N/2\log(\HAT{\sigma}^2)+(\lambda-1) \sum_i\text{sign}(X_I)\log( |x_i| +1)\]

哪里 \(\hat{{\sigma}}^2\) 是Yeo-Johnson变换的输入数据的估计方差 x

1.2.0 新版功能.

示例

>>> from scipy import stats
>>> import matplotlib.pyplot as plt
>>> from mpl_toolkits.axes_grid1.inset_locator import inset_axes

生成一些随机变量,并计算它们在以下范围内的Yeo-Johnson对数似然值 lmbda 值:

>>> x = stats.loggamma.rvs(5, loc=10, size=1000)
>>> lmbdas = np.linspace(-2, 10)
>>> llf = np.zeros(lmbdas.shape, dtype=float)
>>> for ii, lmbda in enumerate(lmbdas):
...     llf[ii] = stats.yeojohnson_llf(lmbda, x)

还可以使用以下命令查找最佳lmbda值 yeojohnson

>>> x_most_normal, lmbda_optimal = stats.yeojohnson(x)

将对数似然率绘制为lmbda的函数。将最优lmbda添加为水平线,以检查这是否真的是最优的:

>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot(lmbdas, llf, 'b.-')
>>> ax.axhline(stats.yeojohnson_llf(lmbda_optimal, x), color='r')
>>> ax.set_xlabel('lmbda parameter')
>>> ax.set_ylabel('Yeo-Johnson log-likelihood')

现在添加一些概率图,以显示在对数似然最大化的情况下,使用 yeojohnson 看起来最接近正常:

>>> locs = [3, 10, 4]  # 'lower left', 'center', 'lower right'
>>> for lmbda, loc in zip([-1, lmbda_optimal, 9], locs):
...     xt = stats.yeojohnson(x, lmbda=lmbda)
...     (osm, osr), (slope, intercept, r_sq) = stats.probplot(xt)
...     ax_inset = inset_axes(ax, width="20%", height="20%", loc=loc)
...     ax_inset.plot(osm, osr, 'c.', osm, slope*osm + intercept, 'k-')
...     ax_inset.set_xticklabels([])
...     ax_inset.set_yticklabels([])
...     ax_inset.set_title(r'$\lambda=%1.2f$' % lmbda)
>>> plt.show()
../../_images/scipy-stats-yeojohnson_llf-1.png