将速率参数拟合为时间的函数,以实现非均匀泊松过程

时间:2019-01-22 20:45:23

标签: python pymc3 poisson mcmc

我有多个数据集(不同的飞机类型)。每个都有一个时间单位列表(机队总飞行小时数)和在每个时间单位之间的每个时间间隔内发生的事件(崩溃)列表。事件的发生率通常会随着时间的推移而降低,因此我将其视为不均匀的泊松过程。我不完全知道发生率的功能形式是什么,但是我目前将其视为指数递减(a * e ^(-b * t))。

我正在尝试从中获得两点好处:

1)能够预测在给定的未来时间(飞行时间)下会发生多少未来事件(崩溃)。我也需要在这些值上具有良好的误差线,以考虑任何参数相关性。这使我进入了MCMC。

2)能够根据时间单位(飞行时间)预测新飞机类型的未来事件(崩溃)数量。例如,如果波音797于2030年问世,我想预测随着飞行时间的增加,有多少架飞机会坠毁。这需要对'a'和'b'进行拟合,以便我可以看到这些参数如何随我的数据集的属性(例如飞机开始日期,公司,发动机数量等)而变化。我还需要在这些值上使用良好的误差线,以将任何参数相关性考虑在内。

我所有的数据都在非互联网连接的计算机上,因此我为任何小的错字表示歉意:

t=[1.95e-03, 7.38e-03, 3.414e-02, 1.1773e-01, 3.147e-01, 5.757e-01, 
   8.4279e-01, 1.076, 1.345, 1.649, 1.942, 2.219, 2.483, 2.731, 2.969, 3.197, 
   3.444, 3.691, 3.952, 4.162, 4.440, 4.655, 4.851, 5.092, 5.316, 5.540, 5.768, 
   6.003, 6.291, 6.538, 6.755, 6.981, 7.113, 7.223] # Flying hours / 100,000
events=[1, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 
        0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]
totalevents=[1, 1, 1, 2, 2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 7, 7, 7, 7, 8, 8, 8, 
             8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10] 

因为我想要强大的错误范围,所以我曾尝试使用pymc3进行MCMC拟合,但是显然,我误解了我在做什么。我认为适合MCMC会给我很好的(a,b)配对。然后,我可以将它们插入Poisson公式中,以便可以得到带有错误范围的预期未来事件(崩溃)数量的分布。我还可以使用“ a”和“ b”的平均值来帮助解决问题2。

这是我尝试过的。它没有给我我想要的东西。

import pymc3 as pm
import numpy as np
with pm.Model() as model:
    a=pm.TruncatedNormal(name='a', mu=1, sd=1, lower=0)  # Random guesses for mu, sd
    b=pm.Normal(name='b', mu=1, sd=1) # Random guesses for mu, sd
    lam=pm.Deterministic('lam', a*np.exp(-b*t))
    count=pm.Poisson(mu=lam, name='count', observed=events)
    trace=pm.sample(10000, chains=4, tune=1000)

我知道我有概念上的错误,但我只是不知道该怎么做。一种替代方法是根据时间的功率定律(累积的飞行小时数)与累积的事件(累积的失事)​​进行拟合,为每种飞机类型获得一个“ a”和“ b”值,然后使用Poisson公式模拟未来的失事,但是我感觉两者都抛出了我知道所观察到的碰撞是泊松现象的信息,而且也没有给我关于初始拟合误差的良好数据。

我可以使用pymc3来解决此问题吗?我需要做什么才能得到我想要的东西?

0 个答案:

没有答案