scipy.stats.

bayes_mvs#

scipy.stats.bayes_mvs(data, alpha=0.9)[source]#

均值、方差和标准差的贝叶斯置信区间。

参数:
**data**array_like

输入数据,如果多维,则由 bayes_mvs 平铺为一维。要求至少 2 个数据点。

**alpha**float, 可选

返回的置信区间包含真实参数的概率。

返回:
**mean_cntr, var_cntr, std_cntr**元组

三个结果分别用于均值、方差和标准差。每个结果都是一个元组,形式为

(center, (lower, upper))

其中 center 是给定数据的条件 pdf 的值的均值,而 (lower, upper) 是一个置信区间,以中位数为中心,包含估计值为概率 alpha

另请参阅

mvsdist

注释

每个均值、方差和标准差估计值的元组都代表 (center, (lower, upper)),其中 center 是给定数据的条件 pdf 的值的均值,而 (lower, upper) 是一个置信区间,以中位数为中心,包含估计值为概率 alpha

将数据转换为一维,并假设所有数据具有相同的均值和方差。对于方差和标准差使用杰弗里斯先验。

等效于 tuple((x.mean(), x.interval(alpha)) for x in mvsdist(dat))

参考文献

T.E. Oliphant,“从数据估计均值、方差和标准差的贝叶斯视角”,https://scholarsarchive.byu.edu/facpub/278,2006 年。

示例

首先是一个基本示例,用于演示输出

>>> from scipy import stats
>>> data = [6, 9, 12, 7, 8, 8, 13]
>>> mean, var, std = stats.bayes_mvs(data)
>>> mean
Mean(statistic=9.0, minmax=(7.103650222612533, 10.896349777387467))
>>> var
Variance(statistic=10.0, minmax=(3.176724206, 24.45910382))
>>> std
Std_dev(statistic=2.9724954732045084,
        minmax=(1.7823367265645143, 4.945614605014631))

现在,我们生成一些正态分布的随机数据,并获得均值和标准差的估计值,以及这些估计值的 95% 置信区间

>>> n_samples = 100000
>>> data = stats.norm.rvs(size=n_samples)
>>> res_mean, res_var, res_std = stats.bayes_mvs(data, alpha=0.95)
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.hist(data, bins=100, density=True, label='Histogram of data')
>>> ax.vlines(res_mean.statistic, 0, 0.5, colors='r', label='Estimated mean')
>>> ax.axvspan(res_mean.minmax[0],res_mean.minmax[1], facecolor='r',
...            alpha=0.2, label=r'Estimated mean (95% limits)')
>>> ax.vlines(res_std.statistic, 0, 0.5, colors='g', label='Estimated scale')
>>> ax.axvspan(res_std.minmax[0],res_std.minmax[1], facecolor='g', alpha=0.2,
...            label=r'Estimated scale (95% limits)')
>>> ax.legend(fontsize=10)
>>> ax.set_xlim([-4, 4])
>>> ax.set_ylim([0, 0.5])
>>> plt.show()
../../_images/scipy-stats-bayes_mvs-1.png