首先,如果您假设事件本身的发生率是恒定的(或者您只对它的长期平均值感兴趣),那么您可以简单地将其估计为:
λ* = N / ( t - t 0 )
其中t是当前时间,t 0是观察的开始,N是自t 0以来观察到的事件数,λ* 是真实频率 λ 的估计值。
此时,需要注意的是,上面给出的估计公式可以重新表述为积分:
λ* = 积分( δ事件(τ) dτ ) / 积分( 1 dτ )
其中积分变量 τ 的范围从t 0到t,并且 δ event (τ) = sum( δ(τ − t i ), i = 1 .. N ) 是 Dirac delta 函数的和N ,具有单个 delta -每个事件i的发生时间t i的峰值。
当然,这将是一种完全无用的计算λ* 的方法,但事实证明它是一个概念上有用的公式。基本上,查看这个公式的方式是,函数 δ event (τ) 测量事件数量在时间 τ 处增加的瞬时速率,而第二个被积函数,也就是常数 1,测量时间的速率随着时间的推移而增加(当然,这只是每秒一秒)。
好的,但是如果频率 λ 本身可能会随着时间而变化,并且您想估计它的当前值,或者至少是最近一段时间的平均值,该怎么办?
使用上面给出的积分比公式,我们可以简单地通过一些偏向最近时间的加权函数w (τ) 对两个被积函数进行加权来获得这样的估计:
λ*最近=积分(δ事件(τ)w(τ)dτ)/积分(w(τ)dτ)
现在,剩下的就是选择一个合理的w (τ),使这些积分简化为易于计算的东西。事实证明,如果我们为某个衰减率k选择w (τ) = exp( k (τ − t )) 形式的指数衰减加权函数,则积分简化为:
λ*最近= sum( exp( k ( t i - t )), i = 0 .. N ) k / ( 1 - exp( k ( t 0 - t )) )
在t 0 → −∞ 的限制下(即,在实践中,当总观察时间 ( t − t 0 ) 远大于权重衰减时间尺度 1/ k时),这进一步简化为:
λ*最近= k sum( exp( k ( t i − t )), i = 0 .. N )
唉,天真地应用这个公式仍然需要我们记住所有的事件时间t i。但是,我们可以使用与计算通常的指数加权平均值相同的技巧——给定较早时间t'的加权平均事件率 λ*最近( t' ),并假设在t'和t之间没有发生新事件,我们可以简单地计算当前加权平均事件率λ*最近(t):
λ*最近( t ) = exp( k ( t' - t ) ) λ*最近( t' )
此外,如果我们现在观察到恰好在时间t发生的新事件,则事件之后的加权平均事件发生率变为:
λ*最近( t ) = k + exp( k ( t' - t ) ) λ*最近( t' )
因此,我们得到一个非常简单的规则:我们需要存储的只是之前观察到的事件的最后时间t ,以及在所述事件之后的估计最近事件率 λ* 。(我们可以将这些例如初始化为t last = t 0和 λ* last = 0;事实上,当 λ* last = 0 时,t last的值没有区别,尽管对于非零的 λ* last它确实如此。)
每当发生新事件时(在时间t new),我们将这些值更新为:
λ* last ← k + exp( k ( t last − t new ) ) λ* last
t last ← t new
并且每当我们想知道当前时间t的最近事件率平均值时,我们只需将其计算为:
λ*( t ) = exp( k ( t最后- t ) ) λ*最后
附言。为了校正对t last (任意)初始值的初始偏差,我们可以添加回 1 / ( 1 - exp( k ( t 0 - t )) ) 校正项,我们之前假设t时简化了该项。 ≫ t 0。为此,只需在t = t 0时从t last = 0开始,如上所述更新t last ,但计算在时间t的估计最近事件率平均值为:
λ* corr ( t ) = exp( k ( t最后- t ) ) λ*最后 / ( 1 - exp( k ( t 0 - t )) )
(这里,t 0表示您开始测量事件的时间,而不是第一个事件的发生时间。)
这将以增加早期方差为代价消除初始偏差为零。这是一个显示校正效果的示例图,k = 0.1,真实平均事件率为 2:

红线显示没有初始偏差校正的 λ*( t )(从 λ*( t 0 ) = 0 开始),而绿线显示偏差校正的估计值 λ* corr ( t )。
pps。如上图所示,如上计算的 λ* 将不是时间的连续函数:每当事件发生时它会向上跳跃k,而当事件不发生时它会以指数方式衰减到零。
如果您想要更平滑的估计,您可以计算 λ* 本身的指数衰减平均值:
λ**( t ) = 积分( λ*(τ) exp( k 2 (τ - t )) dτ ) / 积分( exp( k 2 (τ - t )) dτ )
其中 λ* 是如上计算的指数衰减平均事件率,k 2是第二个平均值的衰减率,并且积分超过 -∞ < τ ≤ t。
这个积分也可以通过上面的逐步更新规则来计算:
λ** last ← W (Δ t ) λ* last + exp( - k 2 Δ t ) λ** last
λ* last ← k 1 + exp( - k 1 Δ t ) λ* last
t last ← t new
其中k 1和k 2是第一个和第二个平均值的衰减率,Δ t = t new - t last是事件之间的经过时间,并且:
W (Δ t ) = k 2 ( exp( - k 2 Δ t ) - exp( - k 1 Δ t ) ) / ( k 1 - k 2 )
如果k 1 ≠ k 2,或
W (Δ t ) = k Δ t exp( - k Δ t )
如果k 1 = k 2 = k (当 ( k 1 − k 2 ) → 0时,后者由前者作为极限产生)。
要计算任意时间点t的第二个平均值,请使用相同的公式:
λ**( t ) = W (Δ t ) λ*最后 + exp( - k 2 Δ t ) λ**最后
除了 Δ t = t - t last。
如上所述,该估计也可以通过应用合适的时间相关比例因子来校正偏差:
λ** corr ( t ) = λ**( t ) / (1 - S ( t - t 0 ))
在哪里:
S ( Δt ) = ( k 1 exp( - k 2 Δ t ) - k 2 exp( - k 1 Δ t ) ) / ( k 1 - k 2 )
如果k 1 ≠ k 2,或
S ( Δt ) = (1 + k Δt ) exp( - k Δt )
如果k 1 = k 2 = k。
下图显示了这种平滑的效果。红线和绿线显示 λ*( t ) 和 λ* corr ( t ) 如上所述,而黄线和蓝线显示 λ**( t ) 和 λ** corr ( t ),计算公式为k 1 = 0.1 (如上)和k 2 = 0.2:
