我想知道是否有人可以解释scipy.stats中的以下功能:
rv_continuous.expect
rv_continuous.pdf
我已阅读文档,但我仍感到困惑。
这是我的任务,理论上非常简单,但我仍然对这些功能的作用感到困惑。
所以,我有一个区域列表,16383个值。我想找到变量区域在较小值(称为“inf”)和较大值“sup”之间取任何值的概率。
所以,我的想法是:
scipy.stats.rv_continuous.pdf(a) #a being the list of areas
scipy.stats.rv_continuous.expect(pdf, lb = inf, ub = sup)
这样我就可以得到任何区域在sup和inf之间的概率。
任何人都可以通过简单的方式解释函数的功能以及如何计算inf和sup之间f(a)的积分的任何提示来帮助我吗?
由于
布莱斯
答案 0 :(得分:3)
rv_continuous
是scipy.stats
中实现的所有概率分布的基类。你不会自己在rv_continuous
上调用方法。
你的问题并不完全清楚你想做什么,所以我假设你有一个从一些未知概率分布中得出的16383个数据点的数组。从原始数据中,您需要估算累积分布,在sup
和inf
值处找到该累积分布的值,然后减去以查找从未知分布中获取的值的概率。
根据您想要做多少建模以及想要做多少假设,有很多方法可以估算数据中的未知分布。在更复杂的频谱末端,您可以尝试将一个标准参数概率分布拟合到数据中。例如,如果您怀疑数据是对数正态分布的,则可以使用scipy.stats.lognorm.fit(data, floc=0)
查找适合您数据的对数正态分布参数。然后,您可以使用scipy.stats.lognorm.cdf(sup, *params) - scipy.stats.lognorm.cdf(inf, *params)
来估计值在这些值之间的概率。
中间是分布估计的非参数形式,如直方图和核密度估计。例如,scipy.stats.gaussian_kde(data).integrate_box_1d(inf, sup)
是使用未知分布的高斯核密度估计进行此估计的简单方法。但是,核密度估计并不总是合适的,需要进行一些调整才能正确。
您可以做的最简单的事情就是计算介于inf
和sup
之间的数据点数,并除以您拥有的数据点总数。这只适用于大量的点(你有)以及在数据尾部不太远的界限。
答案 1 :(得分:2)