14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

INTECAdvent Calendar 2022

Day 22

周期を持つ時系列データの分解とRでの実行例

Last updated at Posted at 2019-05-31

はじめに

時系列データには、一定の周期を持つデータを扱うことが良くあります。そのデータを扱う際は、いくつかの成分に分解することで、より良い分析を進めることが出来ます。Rではstlという関数を使うことが一般的です。

stlについて

stl(Seasonal Decomposition Of Time Series By Loess)は次のモデルを考えて、それぞれのデータに分解することが出来ます。

  • トレンド(Trend): 長期的に変動する要素
  • 周期変動(Seasonal): 一定の時間で周期的に変動する要素
  • 残差(Remainder): 残りの細かく変動する要素

なので、「元データ=トレンド+周期変動+残差」となります。
stlについてのより詳しい説明やアルゴリズムついては、この論文参照ください。

Rで実施してみる

UKgas(イギリスのガス消費量)とnottem(イギリスの町の20年分の月次平均気温)をstlで分解し可視化してみます。

> ukgas.stl <- stl(UKgas, s.window ="per")
> plot(ukgas.stl)

ukgas_stl.png

季節変動とトレンドが綺麗に取れました。残差の変動も興味深く見えます。
なお、各成分をデータとして取り出したいときは、次のようにすれば良いです。

ukgas.stl <- stl(UKgas, s.window ="per")
#周期成分
ukgas.seasonal <- ukgas.stl$time.series[,1]
#トレンド成分
ukgas.trend <- ukgas.stl$time.series[,2]
#残差
ukgas.remainder <- ukgas.stl$time.series[,3]

次はnottemのデータで行います。

> nottem.stl <- stl(nottem, s.window ="per")
> plot(nottem.stl)

nottem_stl.png

トレンドに注目することで、いつもとは違う変化に注目できるかも知れません。
より詳しい使い方はhelp(stl)でご確認ください。

最後に

このような感じでstlで周期データを分解することで、あなたが持つ仮説を示すことの助けになるかも知れません。

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?