如何使用 R 中的 Bursts 包查找时间序列中的突发事件

How to find bursts in time series using the Bursts package in R

我试过使用 bursts 包进行突发检测。我这样做是因为我想在时间序列中找到峰值。

当我执行 kleinberg(ts) 时,它说:

Error in kleinberg(ts) : 
  Input cannot contain events with zero time between!

时间序列为:

Time Series:
Start = 1 
End = 120 
Frequency = 1 
  [1]   5   5   5   5   5  14   4   8  11  11  11   4   7   3  10   7  13   6   3   3   6   9   9  12   6   6   9   3   9
 [30]   6  12   3   3   3   6   9   6   3   3   4   6   6   6   3   6   7   9   9   6   6  15   9  21   9   9   9   9  12
 [59]   6  12   3   3  17   9   9   9   9  12   3  12   3   3  13  13   3   7   6   6   6   9  10   3   7   6  16   3   9
 [88]   9   9  17  12   9   9  19  20  13  13  16  17  11  14  20  15  14 100  70  20  15  26  44  20  19   8  38  14  15
[117]  11   6  19  21

对于我感兴趣的某个特定时间序列,dput(ts) 的输出是

structure(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 2L, 4L, 9L, 100L, 
78L, 21L, 13L, 15L, 12L, 11L, 9L, 9L, 7L, 8L, 5L, 6L, 6L, 6L, 
6L, 4L, 3L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 2L, 3L, 3L), .Tsp = c(1, 
120, 1), class = "ts")

似乎 kleinberg 需要更改后续值,请参阅 function code。在您的时间序列中,有些情况下您有一系列相同的数字。

当我尝试使用 kleinberg(unique(ts)) 时,它运行良好。

此外,使用随机生成的时间序列,kleinberg() 工作正常:

ts2 <- as.ts(rnorm(1000,mean=1,sd=10))
plot(ts2)
burst <- kleinberg(ts2)
plot(burst)

默认形式的 kleinberg 可能无法满足您的需求,但您可能会发现 Twitter 的 AnomalyDetection 包很有用。