時系列データ分析の初心者に必ず知ってもらいたい重要ポイント ~ 回帰分析 ・相関関係 分析を行う前に必ずやるべきこと(データの形のチェックと変形)

  • 316
    Like
  • 3
    Comment
More than 1 year has passed since last update.

時系列データ分析の初心者に必ず知ってもらいたい重要ポイント

  • 回帰分析 や 相関関係分析 を 行う前に、まず一番最初に、「データの検証」と「データの加工」が絶対に必要

  • 上記のステップを踏まないと、例え、Excel や SPSS、Rで 回帰分析・相関関係を事項して、「実行エラー」起こらないで、ちゃんと数字が画面に出ても、それは『間違った数字』である可能性が非常に高い


回帰分析 や 相関関係分析に使えるデータは、次の 『 NG条件 』にあてはまらないデータだけ

「データの形」必須条件 ~その1

データ期間を通じて、データの平均値が変わるデータだとNG
⇒ 折れ線グラフでチェック必須!

「データの形」必須条件 ~その2

データ期間を通じて、データのぶれ・ばらつきが変わるデータだとNG
⇒ 折れ線グラフチェック必須!

「データの形」必須条件 ~その3

データ期間を通じて、データの値が直線的 or 曲線的に、増加する・減少するデータだとNG
⇒ 折れ線グラフチェック必須!

「データの形」必須条件 ~その4

データ期間を通じて、データが一定(期間)周期で、変動するデータだとNG
⇒ 折れ線グラフチェック必須!

【 発展的な学習 】

より正確には、比較する2時点間の時間幅が同じであれば、どの2時点間で比較しても、平均・分散 一定が満たされているデータ

⇒ 詳細は、Googleで「定常過程」・「単位根検定」・「ADF検定」と打ってキーワード検索して専門的な解説ウェブ・ページをみるか、紀伊国屋書店や丸善ジュンク堂の「統計学」・「データ分析」のコーナー(理工学書ブース)に足を運んで、専門書を開いてみてください。

以上の『 NG条件 』にあてはまるデータは、この記事の以下に示す方法 で、『 NG条件 にあてはまらない 』データに『データ加工』してから、回帰分析・相関分析を行えば、OK


【 実例 】「データの形」チェック と「データの成形」の流れ

Rに最初から入っている英国のガス使用量推移のデータセット「UKgas」を例に、データをチェック

このデータをこのまま用いて、回帰分析や(他のデータとの)相関関係分析をしてもNGにならないか?
⇒ まず最初に、折れ線グラフで『データのかたち』をチェック!!
【その前に・・・】データの中身を目で確認!
R
#getwd()
#setwd("C:/Users/VAIO2000/Desktop/R_markdown")
UKgas
##        Qtr1   Qtr2   Qtr3   Qtr4
## 1960  160.1  129.7   84.8  120.1
## 1961  160.1  124.9   84.8  116.9
## 1962  169.7  140.9   89.7  123.3
## 1963  187.3  144.1   92.9  120.1
## 1964  176.1  147.3   89.7  123.3
## 1965  185.7  155.3   99.3  131.3
## 1966  200.1  161.7  102.5  136.1
## 1967  204.9  176.1  112.1  140.9
## 1968  227.3  195.3  115.3  142.5
## 1969  244.9  214.5  118.5  153.7
## 1970  244.9  216.1  188.9  142.5
## 1971  301.0  196.9  136.1  267.3
## 1972  317.0  230.5  152.1  336.2
## 1973  371.4  240.1  158.5  355.4
## 1974  449.9  286.6  179.3  403.4
## 1975  491.5  321.8  177.7  409.8
## 1976  593.9  329.8  176.1  483.5
## 1977  584.3  395.4  187.3  485.1
## 1978  669.2  421.0  216.1  509.1
## 1979  827.7  467.5  209.7  542.7
## 1980  840.5  414.6  217.7  670.8
## 1981  848.5  437.0  209.7  701.2
## 1982  925.3  443.4  214.5  683.6
## 1983  917.3  515.5  224.1  694.8
## 1984  989.4  477.1  233.7  730.0
## 1985 1087.0  534.7  281.8  787.6
## 1986 1163.9  613.1  347.4  782.8

データの開始期と終了期を確認

R
str(UKgas)
##  Time-Series [1:108] from 1960 to 1987: 160.1 129.7 84.8 120.1 160.1 ...
1960年~1987年のデータであることがわかった。

【データの『かたち』チェック】折れ線グラフを描いて確認!!

R
plot(UKgas,xlab="四半期",ylab="ガス使用量")

image1.jpeg

このデータは、NGデータの条件に引っかかっていた!!


  • ( 理由1 ) データの値が、(上下運動しながらも、) だんだん増えている。
  • ( 理由2 ) データの上下運動の振れ幅が、だんだん増幅されている。
  • ( 理由3 ) データが同じ期間の周期で、上下運動している。

データに含まれる規則性(周期性)成分と、それ以外の成分(上昇トレンドと誤差)に分けてみる
R
plot(stl(UKgas,s.window="periodic"),main="UKgasデータの成分分解", cex.main=2.5)

image2.jpeg

  • "seasonal"(季節変動)の欄に、一定期間の上昇・下降周期(成分)が認められる

  • "trend"(トレンド)欄から、季節変動成分と誤差成分("reminder")を除くと、時間の経過とともに定常的に上昇している傾向が浮かび上がっている。

R
par(mfrow=c(2,1))
plot(window(UKgas, start=1980, end=1983),xlab="四半期",ylab="ガス使用量")
plot(window(UKgas, start=1980, end=1982),xlab="四半期",ylab="ガス使用量")

image3.jpeg

  • 半年毎に山谷のピークを繰り返していることが読み取れる

  • 自己相関をみて、何期離れた期間との相関関係が強いかを洗い出してみる

R
acf(UKgas)

image4.jpeg

  • 1年間(四半期)離れた(自己)データとの相関が強い(周期性が1年周期)ことが判明

1階の差分をとって、翌期との差(次の期との上昇分・加工分)を(各期について)グラフに出してみると、(上昇と下降の繰り返しの連続グラフになるので)上昇トレンドが取り除かれる

R
plot(diff(UKgas),xlab="四半期",ylab="ガス使用量",main="UKgas\n1階の差分系列")
diff.UKgas <- diff(UKgas)

image5.jpeg

データが「NGデータではないための条件」(=定常性の条件)を満たしているかを確認
R
install.packages("tseries")
library(tseries)
adf.test(diff.UKgas)
 Augmented Dickey-Fuller Test

 data:  diff.UKgas
 Dickey-Fuller = -7.168, Lag order = 4, p-value = 0.01
 alternative hypothesis: stationary
  • 「p-value = 0.01」で、「p-value」(p値)の数値が、0.05(5%)や0.01(1%)より小さいので、加工処理したUKgasデータは、NGデータではない状態(「定常過程のデータ」)に変換されている。

【 解説 】p値とは?

(上記の場合)「もしもこのデータがNGデータ(※専門用語「非定常過程のデータ」)である」と仮定した場合、「このデータが得られる確率の大きさ」を表す数値

【 今回の値 】

今回は、p値は 0.01なので、もしも、ここまで加工して得られたUKgasデータがNGデータだった場合、このデータが目の前にある確率は1%よりも小さい。
⇒ << 解釈!>> 『1%』はあまりにも小さい(注1)ので、 最初に設定した仮定:「このデータはNGデータである」そのものが間違っていたと考える。

【 結論 】

ここまで加工したUKgasデータは、(この段階で、) もはやNGデータではない!

  • このデータを使って、(他のデータとの)回帰分析したり、相関関係を分析しても、間違った結果は画面に表示されない!!

【 注意点 】

(ここまで加工した)UKgasデータ と 比較する 「他のデータ」も、折れ線グラフの形をチェックしたり、上記のステップを踏んだりして、「NGデータではない!」ことを確認しないといけない。

分析に使う「すべての時系列データ」が、(1つ残らずすべて)「NGデータではない」ことが必要

  • ( 注1 )5%や1%の場合、経済分析の分野では、「小さい」とみなす。宇宙物理学では、0.00000000・・・000・・・1%以下 or 未満でないと、「小さい」とはみなさない)

ここまでのデータ加工作業で、データはNGデータではない状態に加工できた!


しかし、学習のために、さらにデータを加工して、冒頭の「NGデータでないための条件」4つ をすべて満たすパーフェクトなデータを作ってみよう。


時間が経過するとともに、上下の変動幅が増加している。

この増加速度をゆるめるために、対数変換をとる。まずは最初のUKgasデータ(原系列)に対して行う。

R
plot(log(UKgas),xlab="四半期",ylab="ガス使用量",main="UKgas\n対数変換系列")

image6.jpeg

さらに、トレンド成分を除去するために、1回の差分をとる。

R
plot(diff(log(UKgas)),xlab="四半期",ylab="ガス使用量",main="UKgas\n対数変換+1階差分 系列")
diff_log_UKgas <- diff(log(UKgas))
adf.test(diff_log_UKgas)

image7.jpeg

 Augmented Dickey-Fuller Test

 data:  diff_log_UKgas
 Dickey-Fuller = -7.512, Lag order = 4, p-value = 0.01
 alternative hypothesis: stationary

  • グラフは、トレンド上昇成分もほぼなくなり、且つ、上下の変動幅も小さくほぼ一定に抑えられている。

  • また、データは定常である

  • p値=0.01 → 定常でないと仮定した場合、このようなデータの得られる確率は0.01(1%)

    そのような小さい確率の事象が起きていると考えるのは不合理なので、データが定常でないという仮定が間違っていた(つまり、データは定常)と考える。統計学における帰無仮説と仮説検定の考え方)

最後に残った、季節成分を取り除くために、移動平均をとる。

まず、最初のUKgas (原系列)データに対して季節調整(1年周期=4(四半)期)をとる
R
install.packages("TTR")
library(TTR)
plot(SMA(UKgas, n=4))

image8.jpeg

次に、ここまで加工した1階差分(トレンド除去)+対数変換(上下変動幅縮小)データに4期の季節調整をとる

R
plot(SMA(diff_log_UKgas, n=4))
SMA_diff_log_UKgas <- SMA(diff_log_UKgas)

image9.jpeg

データはほぼ平坦な定常過程に変換された。

Rに(ここまで作成した)データを保存

R
save.image()

【 関連記事 】

【 R言語 で 時系列解析 】分析前のデータチェック自動化 ~ 用意した時系列データが、(そのままの形で)データ解析に使って問題ないデータかどうかチェックしてくれる自作関数をつくってみた


( 参考 )

野村 友和(神戸大学)「時系列データについて –基礎統計分析演習–」