Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的概率密度函数卷积:如何高效地进行?_Python_Math_Scipy_Statistics - Fatal编程技术网

python中的概率密度函数卷积:如何高效地进行?

python中的概率密度函数卷积:如何高效地进行?,python,math,scipy,statistics,Python,Math,Scipy,Statistics,鉴于这是一篇相当长的文章,我认为最好从我的问题开始:用python实现这个模型的最佳方式是什么 我正在开发一个统计模型,涉及概率密度函数的卷积。在不放弃我所不能的东西的情况下,我的问题是: 参数A描述从t0到t1事件A的时间。它由一个均匀分布给出,上下界分别为a和b A ~ U(a, b) B ~ U(c, d) 参数B描述从t1到t2事件B的时间。它也是由一个均匀分布给出的,其上下界分别为c和d A ~ U(a, b) B ~ U(c, d) 参数G描述在未知时间从t0到事件C

鉴于这是一篇相当长的文章,我认为最好从我的问题开始:用python实现这个模型的最佳方式是什么

我正在开发一个统计模型,涉及概率密度函数的卷积。在不放弃我所不能的东西的情况下,我的问题是:

参数A描述从t0到t1事件A的时间。它由一个均匀分布给出,上下界分别为a和b

A ~ U(a, b) 
B ~ U(c, d) 
参数B描述从t1到t2事件B的时间。它也是由一个均匀分布给出的,其上下界分别为c和d

A ~ U(a, b) 
B ~ U(c, d) 
参数G描述在未知时间从t0到事件C的时间。它由形状和比例参数α和β的伽马分布给出,平均值=α/β,标准偏差=α/(β^2)

我们想知道G落在t1和t2之间的概率。我们还希望对这些参数执行网格搜索,因此高效完成计算非常重要。目标最终用户包括无法使用高性能计算的公务员机构(就像我们一样),因此并行化不是一种选择

t1出现的时间由A给出,而t2出现的时间由A和B之和给出

Y = A + B

W = A - G

Z = Y - G
由于这两种分布是一致的,它们可以进行解析卷积。G出现在A和Y之间的概率为P(A
P(A < G < Y) = P(W < 0 < Z)
P(A < G < Y) = P(Z > 0) - P(W > 0)
P(A < G < Y) = [1 - P(Z < 0)] - [1 - P(W < 0)]
P(A < G < Y) = Fw(0) - Fz(0)
P(A0)-P(W>0)
P(A
Fw(0)和Fz(0)分别指Y和Z分布的积云密度函数

A ~ U(a, b) 
B ~ U(c, d) 

用python计算这个数学的最好方法是什么?我们有一个工作程序,但即使我们限制积分边界并解析卷积a和B以得到Y,它也很慢。策略是使用scipy.integrate中的quad进行数值卷积。这是缓慢的,经常给我们舍入错误,并超过最大细分数

有更好的办法吗


我们可以对照两个现有的实现来验证程序的结果,一个用fortran编程,但使用NAG库集成例程,另一个用matlab编写。fortran版本对于我们自己的科学研究来说是令人满意的,但我们使用python的动机是使用开放源代码例程(如Scipy库中的例程)生成一个以免费可用语言编写的可分发源代码。使用NAG库例程可以从fortran中看出这一点。

您确定公式
p(AA)-p的有效性吗(GConvolutions通常通过快速傅里叶变换计算。对pdf进行离散化并对离散化进行卷积。结果是对结果pdf的离散近似值。您必须小心细节,否则结果会有点偏差。我可以找到一些代码(Java)这是我很久以前写的,但它不是很复杂,而且我确信Python中已经有FFT,所以它应该很简单。