scipy.stats.boxcox_llf¶
- scipy.stats.boxcox_llf(lmb, data)[源代码]¶
boxcox对数似然函数。
- 参数
- lmb标量
Box-Cox变换的参数。看见
boxcox
有关详细信息,请参阅。- dataarray_like
要计算Box-Cox对数似然的数据。如果 data 是多维的,则沿第一轴计算对数似然。
- 退货
- llf浮动或ndarray
Box-Cox对数-概率 data 给定的 lmb 。一维浮点 data ,否则为数组。
注意事项
Box-Cox对数似然函数在这里定义为
\[lLF=(\lambda-1)\sum_i(\log(X_I))- N/2\log(\sum_i(y_i-\bar{y})^2/N),\]哪里
y
是Box-Cox变换后的输入数据x
。示例
>>> from scipy import stats >>> import matplotlib.pyplot as plt >>> from mpl_toolkits.axes_grid1.inset_locator import inset_axes
生成一些随机变量并计算它们在以下范围内的Box-Cox对数似然值
lmbda
值:>>> rng = np.random.default_rng() >>> x = stats.loggamma.rvs(5, loc=10, size=1000, random_state=rng) >>> lmbdas = np.linspace(-2, 10) >>> llf = np.zeros(lmbdas.shape, dtype=float) >>> for ii, lmbda in enumerate(lmbdas): ... llf[ii] = stats.boxcox_llf(lmbda, x)
还可以使用以下命令查找最佳lmbda值
boxcox
:>>> x_most_normal, lmbda_optimal = stats.boxcox(x)
将对数似然率绘制为lmbda的函数。将最优lmbda添加为水平线,以检查这是否真的是最优的:
>>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> ax.plot(lmbdas, llf, 'b.-') >>> ax.axhline(stats.boxcox_llf(lmbda_optimal, x), color='r') >>> ax.set_xlabel('lmbda parameter') >>> ax.set_ylabel('Box-Cox log-likelihood')
现在添加一些概率图,以显示在对数似然最大化的情况下,使用
boxcox
看起来最接近正常:>>> locs = [3, 10, 4] # 'lower left', 'center', 'lower right' >>> for lmbda, loc in zip([-1, lmbda_optimal, 9], locs): ... xt = stats.boxcox(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()