rv_histogram#
- class scipy.stats.rv_histogram(histogram, *args, density=None, **kwargs)[源代码]#
生成由直方图给定的分布。这对于从分箱数据样本生成模板分布很有用。
作为
rv_continuous类的子类,rv_histogram从它继承了一组通用方法(请参阅rv_continuous获取完整列表),并根据提供的分箱数据样本的属性实现它们。- 参数:
- histogramarray_like 类型的元组
包含两个 array_like 对象的元组。第一个包含 n 个 bin 的内容,第二个包含 (n+1) 个 bin 边界。特别是,接受
numpy.histogram的返回值。- densitybool, 可选
如果为 False,则假定直方图与每个 bin 的计数成正比;否则,假定它与 bin 上的密度成正比。对于恒定的 bin 宽度,这些是等效的,但当 bin 宽度变化时,这种区别很重要(请参阅注释)。如果为 None(默认),则为了向后兼容性设置
density=True,但如果 bin 宽度可变,则发出警告。显式设置 density 以消除警告。在 1.10.0 版本中添加。
- 属性:
random_state获取或设置用于生成随机变量的生成器对象。
方法
__call__(*args, **kwds)为给定的参数冻结分布。
cdf(x, *args, **kwds)给定 RV 的累积分布函数。
entropy(*args, **kwds)RV 的微分熵。
expect([func, args, loc, scale, lb, ub, ...])通过数值积分计算函数关于分布的期望值。
fit(data, *args, **kwds)从数据返回形状(如果适用)、位置和比例参数的估计值。
fit_loc_scale(data, *args)使用一阶和二阶矩从数据估计 loc 和 scale 参数。
freeze(*args, **kwds)为给定的参数冻结分布。
interval(confidence, *args, **kwds)围绕中位数的等面积置信区间。
isf(q, *args, **kwds)给定 RV 的 q 处的逆生存函数(
sf的逆)。logcdf(x, *args, **kwds)给定 RV 的 x 处的累积分布函数的对数。
logpdf(x, *args, **kwds)给定 RV 的 x 处的概率密度函数的对数。
logsf(x, *args, **kwds)给定 RV 的生存函数的对数。
mean(*args, **kwds)分布的均值。
median(*args, **kwds)分布的中位数。
moment(order, *args, **kwds)指定阶数的分布的非中心矩。
nnlf(theta, x)负对数似然函数。
pdf(x, *args, **kwds)给定 RV 的 x 处的概率密度函数。
ppf(q, *args, **kwds)给定 RV 的 q 处的分位数函数(
cdf的逆)。rvs(*args, **kwds)给定类型的随机变量。
sf(x, *args, **kwds)给定 RV 的 x 处的生存函数 (1 -
cdf)。stats(*args, **kwds)给定 RV 的一些统计量。
std(*args, **kwds)分布的标准差。
support(*args, **kwargs)分布的支持。
var(*args, **kwds)分布的方差。
注释
当直方图具有不相等的 bin 宽度时,与每个 bin 的计数成正比的直方图和与 bin 上的概率密度成正比的直方图之间存在区别。如果调用
numpy.histogram及其默认density=False,则生成的直方图是每个 bin 的计数数,因此应将density=False传递给rv_histogram。如果调用numpy.histogram并使用density=True,则生成的直方图采用概率密度形式,因此应将density=True传递给rv_histogram。为避免警告,当输入直方图具有不相等的 bin 宽度时,请始终显式传递density。除了 loc 和 scale 之外,没有其他形状参数。pdf 被定义为来自提供的直方图的逐步函数。cdf 是 pdf 的线性插值。
在 0.19.0 版本中添加。
示例
从 numpy 直方图创建一个 scipy.stats 分布
>>> import scipy.stats >>> import numpy as np >>> data = scipy.stats.norm.rvs(size=100000, loc=0, scale=1.5, ... random_state=123) >>> hist = np.histogram(data, bins=100) >>> hist_dist = scipy.stats.rv_histogram(hist, density=False)
行为类似于普通的 scipy rv_continuous 分布
>>> hist_dist.pdf(1.0) 0.20538577847618705 >>> hist_dist.cdf(2.0) 0.90818568543056499
PDF 在直方图的最高(最低)bin 之上(之下)为零,由原始数据集的最大值(最小值)定义
>>> hist_dist.pdf(np.max(data)) 0.0 >>> hist_dist.cdf(np.max(data)) 1.0 >>> hist_dist.pdf(np.min(data)) 7.7591907244498314e-05 >>> hist_dist.cdf(np.min(data)) 0.0
PDF 和 CDF 遵循直方图
>>> import matplotlib.pyplot as plt >>> X = np.linspace(-5.0, 5.0, 100) >>> fig, ax = plt.subplots() >>> ax.set_title("PDF from Template") >>> ax.hist(data, density=True, bins=100) >>> ax.plot(X, hist_dist.pdf(X), label='PDF') >>> ax.plot(X, hist_dist.cdf(X), label='CDF') >>> ax.legend() >>> fig.show()