前回も平均気温で今回も平均気温と同じようなデータセットが続くなと思ったのですが違いました。米国と英国、場所も違いますが、今回のは月毎のデータで明らかな「季節変動」が見えるデータなのです。これをARIMAモデルに当てはめて処理し、「36か月先まで予測」してみようということみたいです。未来予測?カッコイイけれども。
※「データのお砂場」投稿順Indexはこちら
今回のサンプルデータセット
今回のサンプルデータセット nottem は、英国ノッティンガムの月ごとの平均気温、20年分です。1920年から1939年なので大分古いです。データセットの解説ページが以下に。
Average Monthly Temperatures at Nottingham, 1920–1939
前回同様華氏表示です。英米だものね。前回は華氏摂氏の変換関数作って変換してみましたが今回はいたしませぬ。あるがまま、と。
データを見ると日本的にはかなり涼しい感じを受けます。夏の暑い時期でも20℃以下です。ノッティンガムへは行ったことありませんが、同じイングランドのケンブリッジというところへ真夏に行ったことがあり、シェークスピアの「夏の世の夢」を夜間屋外で見物したことがあるのです。涼しいどころか、結構寒かったです。それにイギリス英語が高尚でまったくわからなかったし。
まずは生データ
まずは生データを眺めてみます。240か月分のTS(時系列)形式データであります。
とりあえず、素のままでプロットしてみます。
ts.plot(nottem, ylab="nottem Temperature [F]")
グラフが以下に。
まあ、当然ですが明確な季節変動が見られます。
STL解析かけてみる
こういう季節変動があるデータに関しては、STL(Seasonal Decomposition of Time Series by Loess)をかければ、季節変動と、トレンド、そして残りと分離できることを学んでます。STLかけるためのコマンドが以下に。
plot(stl(nottem, s.window="per"), main="Monthly Nottem Temperature [F]")
STLかけた結果のグラフが以下に。
処理例、36か月先まで予測せよ、と
しかし、解説ページの処理例は季節変動を分離したくらいでは許してくれませぬ。ARIMA(Autoregressive integrated moving average)モデルを使って解析し、36か月先まで予想してみよ、というのです。3年先まで予測?大丈夫か?(計算するのはRだけれども。)
処理例をみれば、最初に小細工してました。20年分のデータのうち、最後の3年分を切り離し、それ以前の17年分についえARIMAかけてました。前のデータ解析して予測を計算し、とってあった後の3年分のデータと比べてみよう、という趣向のようです。
なお、統計素人はARIMAを語りますまい。あちこちに解説記事あるのでご参照くだされ。
上のようにARIMAの結果が計算できると。計算結果をpredict関数に渡せば「先」を予測することができるみたいです。元のグラフに予測値をプロットする操作が以下に。
ただの季節変動なら、私でもテキトーに描けるけれど、真ん中の年がちょっと凹んでいるのを予測できているのは、何気にすごいです。まぐれじゃないよね。