欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

实操指南:用Python scipy.stats.boxcox_normmax的实例解析与示范

最编程 2024-07-25 14:31:50
...
>>> from scipy import stats
>>> import matplotlib.pyplot as plt

我们可以通过各种方式生成一些数据并确定最佳lmbda

>>> rng = np.random.default_rng()
>>> x = stats.loggamma.rvs(5, size=30, random_state=rng) + 5
>>> y, lmax_mle = stats.boxcox(x)
>>> lmax_pearsonr = stats.boxcox_normmax(x)
>>> lmax_mle
1.4613865614008015
>>> lmax_pearsonr
1.6685004886804342
>>> stats.boxcox_normmax(x, method='all')
array([1.66850049, 1.46138656])
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> prob = stats.boxcox_normplot(x, -10, 10, plot=ax)
>>> ax.axvline(lmax_mle, color='r')
>>> ax.axvline(lmax_pearsonr, color='g', ls='--')
>>> plt.show()
scipy-stats-boxcox_normmax-1_00_00.png

或者,我们可以定义自己的优化器函数。假设我们只对值感兴趣lmbda在区间 [6, 7] 上,我们要使用scipy.optimize.minimize_scalarmethod='bounded',并且我们希望在优化log-likelihood 函数时使用更严格的公差。为此,我们定义了一个接受位置参数的函数乐趣和用途scipy.optimize.minimize_scalar尽量减少乐趣受限于提供的界限和公差:

>>> from scipy import optimize
>>> options = {'xatol': 1e-12}  # absolute tolerance on `x`
>>> def optimizer(fun):
...     return optimize.minimize_scalar(fun, bounds=(6, 7),
...                                     method="bounded", options=options)
>>> stats.boxcox_normmax(x, optimizer=optimizer)
6.000...