如何使用 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 包很有用。
我试过使用 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 包很有用。