2016-10-28 14 views
0

をDeaseasonalizing:R:私たちは、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) 

、つまり季節の値を減算しますか?

Iは、別のデータセットに、季節の値を減算すると、負の値を引き起こしたことに気づきました。だから私は、何かを使うのが良いと思ったのです。

注:私は「deseasonalize」パッケージを使用しないと思います。

答えて

2

はい、うまくいきます。

それとも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)") 

enter image description here

関連する問題