首先,如果您假设事件本身的发生率是恒定的(或者您只关心其长期平均值),那么您可以简单地估计它为:
λ* = N / (t − t0)
其中,t 是当前时间,t0 是观测开始时间,N 是自 t0 起观察到的事件数量,λ* 是真实频率 λ 的估计。
此时,有必要注意,上述估计公式可以改写为积分形式:
λ* = integral( δevent(τ) dτ ) / integral( 1 dτ )
其中积分变量τ的范围从t0到t,δevent(τ) = sum( δ(τ − ti), i = 1 .. N )是狄拉克δ函数的和,每个事件i的发生时间ti处有一个单独的delta峰。
当然,这将是一种完全无用的计算λ*的方式,但事实证明这是一个概念上有用的公式。基本上,观察这个公式的方法是,函数δevent(τ)测量在时间τ时事件数量增加的瞬时速率,而第二个被积函数(只是常数1)测量时间随时间增加的速率(当然,这只是每秒钟增加一秒)。
好的,但是如果频率λ本身可能随时间变化,并且您想要估计其当前值,或者至少是最近一段时间的平均值,该怎么办?使用上面给出的积分比公式,我们可以通过将两个积分加权来得到这样的估计值,加权函数w(τ)偏向于最近的时间:
λ*recent = integral( δevent(τ) w(τ) dτ ) / integral( w(τ) dτ )
现在,唯一需要做的就是选择一个合理的w(τ),使得这些积分简化为易于计算的内容。事实证明,如果我们选择一个指数衰减的加权函数,形式为w(τ) = exp(k(τ − t)),其中k是衰减速率,则积分简化为:
λ*recent = sum( exp(k(ti − t)), i = 0 .. N ) k / ( 1 − exp(k(t0 − t)) )
当 t0 → −∞ 时(即,在实践中,当总观测时间(t − t0)远大于权重衰减时间尺度 1/k 时),这进一步简化为:
λ*recent = k sum( exp(k(ti − t)), i = 0 .. N )
很遗憾,天真地应用这个公式仍需要我们记住所有事件时间t_i。然而,我们可以使用与计算常规指数加权平均值相同的技巧——在较早时间t'处给出加权平均事件率λ*_recent_*(t'),并假设在t'和t之间没有发生新事件,我们可以简单地计算当前加权平均事件率λ*_recent_*(t)为:
λ*
recent(t) = exp(k(t' - t)) λ*
recent(t')
此外,如果我们现在观察到一个恰好发生在时间t的新事件,那么事件后的加权平均事件率将变为:
λ*recent(t) = k + exp( k(t' − t) ) λ*recent(t')
因此,我们得出一个非常简单的规则:我们需要存储的是上一个观察事件的时间
tlast和在该事件之后估计的最近事件率λ*
last。 (例如,我们可以将它们初始化为
tlast =
t0和λ*
last = 0; 实际上,对于λ*
last = 0,
tlast的值没有影响,但对于非零λ*
last,它会有影响。)
每当发生新事件(在时间
tnew),我们更新这些值如下:
λ*
last ←
k + exp(
k(
tlast −
tnew) ) λ*
last
tlast ←
tnew
每当我们想要知道当前时间的最近事件率平均值时,我们只需按以下方式计算:
λ*()= exp((
last - ))λ*
last
提示:为了纠正对tlast(任意的初始值)的初始偏差,我们可以添加回之前简化的 1 / ( 1 − exp(k(t0 − t)) ) 校正项。要做到这一点,只需从tlast = 0开始,在t = t0时更新tlast,但计算时间t的估计事件率平均值如下:
λ*corr(t) = exp( k(tlast − t) ) λ*last / ( 1 − exp(k(t0 − t)) )
(这里,
t0表示您开始测量事件的时间,而不是第一个事件的发生时间。)
这将消除对零的初始偏差,但代价是增加早期方差。以下是一个示例图,显示了进行校正的效果,其中
k = 0.1,真实平均事件率为2:
![Plot of λ* over time, with or without initial bias correction](https://istack.dev59.com/1WoX8.gif)
红线显示没有进行初始偏差校正的 λ*(
t)(从 λ*(
t0) = 0 开始),而绿线显示经过校正的估计值 λ*
corr(
t)。
Pps. 如上图所示,λ*并非时间的连续函数:每当事件发生时,它会跃升k,在未发生事件时指数衰减至零。
如果您希望得到更平滑的估计值,则可以计算λ*本身的指数衰减平均值:
λ**(t) = integral( λ*(τ) exp(k2(τ − t)) dτ ) / integral( exp(k2(τ − t)) dτ )
其中,λ*是如上所述的指数衰减平均事件率,k2是第二个平均值的衰减率,积分范围为−∞ ≤ τ ≤ t。
此积分也可以通过以上的逐步更新规则进行计算:
λlast ← W(Δt) λ*last + exp(−k2 Δt) λlast*
λ*last ← k1 + exp(−k1 Δt) λ*last
tlast ← tnew
其中 k1 和 k2 是第一和第二平均值的衰减率,Δt=tnew − tlast 是事件之间的经过时间,且:
如果k1 ≠ k2,则:
W(Δt) = k2 ( exp( −k2 Δt ) − exp( −k1 Δt ) ) / (k1 − k2)
如果k1 = k2 = k,则:
W(Δt) = k Δt exp( −k Δt ) (当(k1 − k2) → 0时,后一个式子由前者的极限得出。)
要计算任意时间点
t的第二个平均值,请使用相同的公式:
λ**(t) = W(Δt) λ*last + exp( −k2 Δt ) λ**last
除了Δt = t − tlast之外,不要更改任何内容。
如上所述,这个估计值也可以通过应用合适的时间依赖缩放因子进行偏差校正:
λ**
corr(
t) = λ**(
t) / (1 -
S(
t −
t0))
其中:
S(Δ
t) = (
k1 exp( −
k2 Δ
t ) −
k2 exp( −
k1 Δ
t ) ) / (
k1 −
k2)
如果
k1 ≠
k2,或者
S(Δt) = (1 + k Δt) exp( −k Δt )
如果k1 = k2 = k,则如上所述,下图显示了平滑的效果。红色和绿色线条显示λ*(t)和λ*corr(t),而黄色和蓝色线条显示λ**(t)和λ**corr(t),使用k1 = 0.1(如上所述)和k2 = 0.2进行计算:
![Plot of λ* and λ** over time, with or without initial bias correction](https://istack.dev59.com/mRuti.gif)