R:去季节化时间序列
R: Deseasonalizing a time series
我们可以使用以下代码在 R 中绘制和分解时间序列:
# Monthly Airline Passenger Numbers 1949-1960
data(AirPassengers)
data = data.frame(AirPassengers)
data
#Transform to time series
ts.data1 = ts(data=as.vector(t(data['AirPassengers'])), start = c(1949), end = c(1960), frequency=12)
#Plot seasonality, trend
plot(stl(ts.data1, "periodic"))
plot(ts.data1)
decomposed <- stl(ts.data1, s.window="periodic")
seasonal <- decomposed$time.series[,1]
trend <- decomposed$time.series[,2]
remainder <- decomposed$time.series[,3]
#Show seasonal effect
seasonal
我的问题来了:为了 deseasonalize,我可以简单地输入
# deseasonalize time sereis
ts.data1 <- ts.data1 - seasonal
ts.data1
plot(ts.data1)
要减去季节性值?
我意识到在另一个数据集中,减去季节性值会导致负值。这就是为什么我认为使用一个因子或其他东西会更好。
注意:我不想使用 "deseasonalize" 包。
是的,那行得通。
或者直接使用forecast
包中的seasadj
函数。但是,对于 AirPassengers
数据,stl
中给出的加法分解并不是一个好的选择。你可以先取日志,然后给出合理的结果。
library(forecast)
library(ggplot2)
decomp <- stl(log(AirPassengers), s.window="periodic")
ap.sa <- exp(seasadj(decomp))
autoplot(cbind(AirPassengers, SeasonallyAdjusted=ap.sa)) +
xlab("Year") + ylab("Number of passengers (thousands)")
我们可以使用以下代码在 R 中绘制和分解时间序列:
# Monthly Airline Passenger Numbers 1949-1960
data(AirPassengers)
data = data.frame(AirPassengers)
data
#Transform to time series
ts.data1 = ts(data=as.vector(t(data['AirPassengers'])), start = c(1949), end = c(1960), frequency=12)
#Plot seasonality, trend
plot(stl(ts.data1, "periodic"))
plot(ts.data1)
decomposed <- stl(ts.data1, s.window="periodic")
seasonal <- decomposed$time.series[,1]
trend <- decomposed$time.series[,2]
remainder <- decomposed$time.series[,3]
#Show seasonal effect
seasonal
我的问题来了:为了 deseasonalize,我可以简单地输入
# deseasonalize time sereis
ts.data1 <- ts.data1 - seasonal
ts.data1
plot(ts.data1)
要减去季节性值?
我意识到在另一个数据集中,减去季节性值会导致负值。这就是为什么我认为使用一个因子或其他东西会更好。
注意:我不想使用 "deseasonalize" 包。
是的,那行得通。
或者直接使用forecast
包中的seasadj
函数。但是,对于 AirPassengers
数据,stl
中给出的加法分解并不是一个好的选择。你可以先取日志,然后给出合理的结果。
library(forecast)
library(ggplot2)
decomp <- stl(log(AirPassengers), s.window="periodic")
ap.sa <- exp(seasadj(decomp))
autoplot(cbind(AirPassengers, SeasonallyAdjusted=ap.sa)) +
xlab("Year") + ylab("Number of passengers (thousands)")