python中的概率密度函数卷积:如何高效地进行?
鉴于这是一篇相当长的文章,我认为最好从我的问题开始:用python实现这个模型的最佳方式是什么 我正在开发一个统计模型,涉及概率密度函数的卷积。在不放弃我所不能的东西的情况下,我的问题是: 参数A描述从t0到t1事件A的时间。它由一个均匀分布给出,上下界分别为a和bpython中的概率密度函数卷积:如何高效地进行?,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
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(AP(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,所以它应该很简单。