每小时/分钟数据的STL函数
STL function for hourly / minute data
我有一个时间序列,我想使用 STL 对其进行分解。数据每分钟 1 行。我有 10 天的数据(数据集是预加载了 Twitter 异常检测 API 的数据集),我想在一天内找到季节性(例如 activity 从晚上 9 点到晚上 11 点的峰值)
然而,在使用 STL
分解时,我得到一个错误
"series is not periodic or has less than 2 periods".
我理解这是因为数据的时间范围应该>2yrs。但是,由于我想在一天内检查季节性,有没有办法告诉 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")
我试图重现你的错误:
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")
这给出了你的错误。它是德语,但意思是一样的。
Error in 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"))
我有一个时间序列,我想使用 STL 对其进行分解。数据每分钟 1 行。我有 10 天的数据(数据集是预加载了 Twitter 异常检测 API 的数据集),我想在一天内找到季节性(例如 activity 从晚上 9 点到晚上 11 点的峰值)
然而,在使用 STL
分解时,我得到一个错误
"series is not periodic or has less than 2 periods".
我理解这是因为数据的时间范围应该>2yrs。但是,由于我想在一天内检查季节性,有没有办法告诉 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")
我试图重现你的错误:
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")
这给出了你的错误。它是德语,但意思是一样的。
Error in 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"))