ダイエットとStataの使い方 6

今回は、時系列分析の入門のようなものを行う。

まず、以前の記事で回帰分析を行ったと思うが
その結果は当然ながらあまり良くなさそうである。

念のために復習しておくとOLS推定を行うと

reg bmi date if date>= date("1/1/2022","MDY",.)

     Source |       SS           df       MS      Number of obs   =        67
-------------+----------------------------------   F(1, 65)        =   1109.31
      Model |  44.9312816         1  44.9312816   Prob > F        =    0.0000
   Residual |  2.63274943        65  .040503837   R-squared       =    0.9446
-------------+----------------------------------   Adj R-squared   =    0.9438
      Total |   47.564031        66  .720667136   Root MSE        =    .20126

------------------------------------------------------------------------------
        bmi | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
       date |  -.0423449   .0012714   -33.31   0.000     -.044884   -.0398058
      _cons |     988.86    28.8425    34.28   0.000     931.2575    1046.462
------------------------------------------------------------------------------

となる。左辺がBMIで右辺が定数項と日付である。(データが最新のものなので以前と少し係数が変わっている可能性がある)

そして、このOLSの残差をプロットするために残差の変数を作成する。

predict e, residual

分析を行った後にpredict 作成したい変数名を実行すると予測値を出してくれる。オプションをつけないとxb(y-hat)を作成してくれて、, residualオプションで残差を作成してくれる。

上のものは、残差をeという変数で作成している。
プロットしてみると下のようになり、明らかにランダムな誤差ではないことがわかる。

scatter e date if  date>= date("1/1/2022","MDY",.), yline(0)

画像2

そして、残差と前日の残差の散布図を作成すると明らかに正の相関がある。

 scatter e L.e if  date>= date("1/1/2022","MDY",.), xline(0) yline(0)

画像1

これは、系列相関と呼ばれるものでありOLSの仮定であった誤差項間では無相関というものが満たされていない。

ここでは、t期の誤差項は前日(t-1期)の誤差項と相関関係にある、すなわち1次の自己回帰(AR)過程にあるような気がする。そこで、ダービン・ワトソン検定を行うことで系列相関を検定していく。方法はいたってシンプルでOLSの後に

estat dwatson

と入力するだけである。

結果は、下のようになった。

. estat dwatson

Durbin–Watson d-statistic(  2,    67) =  .5660003

この意味について諸説あるが数字が大体2を下回っていれば系列相関にありそれ以上だと系列相関がないと解釈できる。今回は明らかに下回っているので、系列相関が存在していることがわかる。

ちなみに、系列相関は1次とは限らない、すなわち今期の誤差項が前期以前の誤差項と相関しているという可能性も考えられる。これはDurbin's alternative 検定を実施することで検定することができる。オプションでラグを指定できる。

estat durbinalt, lags(1/10) // lag(1 2 3 ...)みたいなものでも代替可能

さて、系列相関があるときによく使われるのが1階の差分を取る方法である。
y_t   =a +b x_t     +e_t
y_t-1=a +b x_t-1 +e_t-1
の差を取り、dy_t=b d_t +de_tとする方法である。(noteで数式を入力する方法がわからないので雑であるが許してほしい。dxの定義はdx_t-dx_t-1である。)

差分は変数の前にD.をつけると作成でき、さらに定数項がキャンセルアウトされたことに注意して分析をすると、

. reg D.bmi D.date if date>= date("1/1/2022","MDY",.), noconstant

     Source |       SS           df       MS      Number of obs   =        66
-------------+----------------------------------   F(1, 65)        =      6.04
      Model |   .13836051         1   .13836051   Prob > F        =    0.0167
   Residual |  1.48935539        65   .02291316   R-squared       =    0.0850
-------------+----------------------------------   Adj R-squared   =    0.0709
      Total |   1.6277159        66  .024662362   Root MSE        =    .15137

------------------------------------------------------------------------------
      D.bmi | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
       date |
        D1. |  -.0457861   .0186325    -2.46   0.017    -.0829978   -.0085745
------------------------------------------------------------------------------

という結果になる。

次回はもう少し進みます。

この記事が気に入ったらサポートをしてみませんか?