每小时/分钟数据的STL功能

时间:2015-10-30 14:13:48

标签: r time-series forecasting

我有一个时间序列,我想用STL分解。数据每分钟有1行。我有10天的数据(数据集是预装了twitter的异常检测API的数据集),我想在一天内找到季节性(例如活动从晚上9点到晚上11点达到峰值)

然而,在使用STL进行分解时,出现错误

  

“系列不是周期性的或少于2个周期”。

我理解这是因为数据的时间范围应该> 2年。但是,由于我想在一天内检查季节性,有没有办法告诉STL在一天内寻找季节性?

我尝试在xts中使用频率选项,同时转换为时间序列格式但不起作用(1440 =一天中的分钟数)

install.packages("devtools")
devtools::install_github("twitter/AnomalyDetection")
library(AnomalyDetection)
library(xts)

#data is part of the pacakage anomaly detection 
data(raw_data)
View(raw_data)

#converting raw_data to xts format 

raw_data_ts <- ts(raw_data$count, as.POSIXct(raw_data$timestamp, format='%m-%d-%y %H:%M:%S'), frequency = 1440)
raw_data_ts1<-as.ts(raw_data_ts)

# Using STL for seasonal decomposition 
modelStl <- stl(raw_data_ts1, s.window = "periodic")

1 个答案:

答案 0 :(得分:0)

我试图重现您的错误:

date_seq<-seq(as.Date("2000/1/1"), by = "day", length.out = 24)
data<-sin(1:24)+rnorm(24)

> stl(xts(x=data, date_seq, 2*pi),s.window="periodic")

这会出错。它是德语,但意思相同。

  

stl中的错误(xts(x = data,date_seq,2 * pi),s.window =“periodic”):   Zeitreihe ist nicht periodisch oder umfasst weniger als zwei Perioden

如果我使用ts代替xts,则可以正常使用:

stl(ts(data=data, start = 1, frequency = 2 * pi), s.window="periodic")

*编辑以回应更新的问题

这对我有用:

install.packages("devtools") 
devtools::install_github("twitter/AnomalyDetection") 
library(AnomalyDetection)

time_series<-ts(data=raw_data[,2], start = 1, frequency = 1440)
plot(stl(time_series, s.window = "periodic"))

enter image description here