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

时间:2016-09-16 07:29:49

标签: r time-series anomaly-detection

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

当我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")

1 个答案:

答案 0 :(得分:2)

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

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

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

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

enter image description here

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