Python 用PyMC拟合非齐次泊松过程

Python 用PyMC拟合非齐次泊松过程,python,pymc,mcmc,model-fitting,stochastic-process,Python,Pymc,Mcmc,Model Fitting,Stochastic Process,我是PyMC新手,尝试使用最大后验概率估计拟合我的非齐次泊松过程,使用分段恒定速率函数 我的过程描述了一天中的一些事件。所以我把一天分成24小时,也就是说,我的速率函数中有24个常数(分段常数) 结合以下观点: 我提出了以下代码,这并不令人满意(结果方面,我确信它是错误的): a0、a1中的值。。。似乎不适合我的数据(通过从给定lambdas->testcase的非齐次泊松过程中采样生成) 我如何拟合/估算我的lambdas? 我做错了什么 (我正在使用pyMC 2.3.2!)这个问题似

我是PyMC新手,尝试使用最大后验概率估计拟合我的非齐次泊松过程,使用分段恒定速率函数

我的过程描述了一天中的一些事件。所以我把一天分成24小时,也就是说,我的速率函数中有24个常数(分段常数)

结合以下观点:

我提出了以下代码,这并不令人满意(结果方面,我确信它是错误的):

a0、a1中的值。。。似乎不适合我的数据(通过从给定lambdas->testcase的非齐次泊松过程中采样生成)

我如何拟合/估算我的lambdas? 我做错了什么


(我正在使用pyMC 2.3.2!)

这个问题似乎离题了,因为它可能属于。。。但是官方的邮件列表提到了StackOverflow的问题。请看,我认为这更多的是关于代码问题或实现中的错误——您的问题似乎是关于底层理论/方法的,这不是本文的主题。
import numpy as np
import pymc

eventCounter = np.zeros(24) # will be filled with real counts before going on
alpha = 1.0 / eventCounter.mean()

a0 = pymc.Exponential('a0', alpha)
a1 = pymc.Exponential('a1', alpha)
a2 = pymc.Exponential('a2', alpha)
a3 = pymc.Exponential('a3', alpha)
a4 = pymc.Exponential('a4', alpha)
a5 = pymc.Exponential('a5', alpha)
a6 = pymc.Exponential('a6', alpha)
a7 = pymc.Exponential('a7', alpha)
a8 = pymc.Exponential('a8', alpha)
a9 = pymc.Exponential('a9', alpha)
a10 = pymc.Exponential('a10', alpha)
a11 = pymc.Exponential('a11', alpha)
a12 = pymc.Exponential('a12', alpha)
a13 = pymc.Exponential('a13', alpha)
a14 = pymc.Exponential('a14', alpha)
a15 = pymc.Exponential('a15', alpha)
a16 = pymc.Exponential('a16', alpha)
a17 = pymc.Exponential('a17', alpha)
a18 = pymc.Exponential('a18', alpha)
a19 = pymc.Exponential('a19', alpha)
a20 = pymc.Exponential('a20', alpha)
a21 = pymc.Exponential('a21', alpha)
a22 = pymc.Exponential('a22', alpha)
a23 = pymc.Exponential('a23', alpha)

@pymc.deterministic
def piecewise_constant(a0=a0, a1=a1, a2=a2, a3=a3, a4=a4, a5=a5, a6=a6, a7=a7, a8=a8, a9=a9, a10=a10, a11=a11, a12=a12, a13=a13, a14=a14, a15=a15, a16=a16, a17=a17, a18=a18, a19=a19, a20=a20, a21=a21, a22=a22, a23=a23):
    out = np.zeros(24)
    out[0] = a0
    out[1] = a1
    out[2] = a2
    out[3] = a3
    out[4] = a4
    out[5] = a5
    out[6] = a6
    out[7] = a7
    out[8] = a8
    out[9] = a9
    out[10] = a10
    out[11] = a11
    out[12] = a12
    out[13] = a13
    out[14] = a14
    out[15] = a15
    out[16] = a16
    out[17] = a17
    out[18] = a18
    out[19] = a19
    out[20] = a20
    out[21] = a21
    out[22] = a22
    out[23] = a23
    return out

 observation = pymc.Poisson('obs', piecewise_constant, value=eventCounter, observed=True)
 model = pymc.Model([observation, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23])
 map = pymc.MAP(model)
 map.fit()
 map.revert_to_max() # i'm not sure if i need this, even after reading the docs!

 print a0._value #...