R Time Series Analysis 時系列解析(12) 単位根検定1
単位根
において となる過程を「ランダム・ウォーク(RW, 酔歩)」と呼ぶ。この場合、この過程は、特性方程式がのとき1(単位根)を解にもつため、単位根過程と言う事が出来る。ちなみに、<1ならこの過程は定常過程となり、>1なら確率過程とはならない。
単位根検定が必要とされる理由
確定的トレンドと確率的トレンド
例えば、の場合、は毎期一定値ずつ増減する。一方、とすると、は毎期確率変数で増減が決まる。前者を確定的トレンドと言い、後者を確率的トレンドという。 (ただし、)
見分けがつかない例
以下の2つの例はよくある例。
1つ目:
<1,
ただし、 Bはラグ演算子を表す。
2つ目:
1つ目は確定的トレンドと定常過程MA(∞)が合わさった形、2つ目は確定的なトレンドとRWが合わさった形をしている。これらを図示する例を以下に示す。
n <- 100 d <- 0 sig2 <- 1.2 mu <- 0 beta <- 0.07 phi <- c(0.5,0.3);p <- length(phi) theta <- c(0.3,0.2);q <- length(theta) time <- 1:n; trend <- mu+beta*time pdq <- list(order=c(p,d,q),ar=phi,ma=theta) wt <- arima.sim(n,model=pdq,sd=sqrt(sig2)) y1 <- trend + wt y2 <- cumsum(beta+rnorm(n,sd=sqrt(sig2))) yl <- c(min(y1,y2),max(y1,y2)) ttl <- "確率的トレンドとドリフト付きRW" plot(y1,type="l",main=ttl,ylim=yl) lines(y2,lty=2) hanrei <- c("確定的トレンド+定常過程","ドリフト付きRW") xx <- 0 yy <- max(y1,y2) legend(xx,yy,legend=hanrei,lty=c(1,2),box.lty=0,col=0)
実際の時系列データには様々な"仕組"が内在し、見た目だけではどの過程かは見分けがつかない。時系列データにトレンドがあるのか、トレンドを除いたらそれは定常過程なのか、単位根を含むのかについて調べる手段が必要と思われる。
見せかけの回帰
全く独立にRWで発生させた系列を用意し、これを単回帰により推定する場合、一般に回帰係数が有意とである場合がある。
#2つの独立なRWを、単回帰分析で推定し、係数が有意となる割合を調べる
misekake <- function(n) { p <- numeric(n); cnta <- 0; r <- 0.05 for (j in 1:n) { y <- cumsum(rnorm(100)); x <- cumsum(rnorm(100)) kekka <- summary(lm(y~x)) q <- kekka$coefficients[[2,4]] p[j] <- q; if(q<r){cnta <- cnta + 1} } rate <- cnta/n*100 print(paste("n =",n,"rate = ",rate)) } for(j in 1:10){misekake(100)}
結果は、
[1] "n = 100 rate = 78" [1] "n = 100 rate = 74" [1] "n = 100 rate = 77" [1] "n = 100 rate = 76" [1] "n = 100 rate = 70" [1] "n = 100 rate = 76" [1] "n = 100 rate = 73" [1] "n = 100 rate = 77" [1] "n = 100 rate = 75" [1] "n = 100 rate = 75"
となり、7割強の場合で単回帰係数が有意となることが確認される。このように、単位根を含む系列で回帰を行うと、見せかけの回帰が発生する場合がある。
単位根検定
単位根を持つか否かを判定する方法として有名なのがADF検定(Augmented DF test)。まず、基本的なアイデアを整理する。検定式で最もシンプルなのはAR(1)の場合。
において、これが単位根を持つにはの帰無仮説をt検定し、棄却されれば単位根を持たないと判断すればよい。ただし、の場合、求める推定量のt値がt分布をしないことが証明されている(Fuller 1976)ため、以下のように変形する:
と変形し、 を帰無仮説としてt検定を行う。帰無仮説が棄却されない場合は、単位根を持つ可能性を否定出来ない。
上記をp次に拡張する。AR(p)モデル
が単位根を1つ持つとすると、これは下記のように変形できる。
よって、
が成り立つことを踏まえ、 検定式を
と置く。 実際はトレンドを含む可能性もあるので、
などとトレンドの項(上記では線形トレンドを含めて置くことが多い。ここによると、ADF検定の論点は3つ。
1. 次数pをいくつにすべきか?
2. トレンド項を加えるべきか?
3. が棄却出来ない場合、どのように考えるべきか?
Rではurcaパッケージのur.df()関数が上記を扱う。株価のデータを使って早速やってみる。
#終値に対して、トレンド項(線形項)を含む4次(p=4)のACF検定 stockACF <- summary(ur.df(stocksub[,2],type="trend",lag=4))
stockACF
以下の結果が表示される。
############################################### # Augmented Dickey-Fuller Test Unit Root Test # ############################################### Test regression trend Call: lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag) Residuals: Min 1Q Median 3Q Max -80.421 -11.975 -0.543 11.078 67.279 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.554065 2.719037 0.204 0.839 z.lag.1 -0.975098 0.143974 -6.773 9.88e-11 *** tt 0.006029 0.018799 0.321 0.749 z.diff.lag1 -0.025066 0.128846 -0.195 0.846 z.diff.lag2 0.039974 0.110123 0.363 0.717 z.diff.lag3 -0.057675 0.092208 -0.625 0.532 z.diff.lag4 -0.009274 0.065302 -0.142 0.887 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 20.66 on 237 degrees of freedom Multiple R-squared: 0.5141, Adjusted R-squared: 0.5018 F-statistic: 41.8 on 6 and 237 DF, p-value: < 2.2e-16 Value of test-statistic is: -6.7727 15.2971 22.9349 Critical values for test statistics: 1pct 5pct 10pct tau3 -3.99 -3.43 -3.13 phi2 6.22 4.75 4.07 phi3 8.43 6.49 5.47
少しずつ見ていく。
Test regression trend Call: lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
これはz.diffは、z.lag.1はの項、1は定数項、ttは線形項、z.diff.lagはを表しているのであろう。
Residuals: Min 1Q Median 3Q Max -80.421 -11.975 -0.543 11.078 67.279
これは残差の正規分布性のチェックのためのものか。通常の線形回帰と同様、残差の正規分布性が前提となっているのであろう。
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.554065 2.719037 0.204 0.839 z.lag.1 -0.975098 0.143974 -6.773 9.88e-11 *** tt 0.006029 0.018799 0.321 0.749 z.diff.lag1 -0.025066 0.128846 -0.195 0.846 z.diff.lag2 0.039974 0.110123 0.363 0.717 z.diff.lag3 -0.057675 0.092208 -0.625 0.532 z.diff.lag4 -0.009274 0.065302 -0.142 0.887 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
z.lag.1はの項以外有意水準5%で係数が有意ではない。つまり、
と推定出来るということか?実質はAR(1)ということか。
Residual standard error: 20.66 on 237 degrees of freedom Multiple R-squared: 0.5141, Adjusted R-squared: 0.5018 F-statistic: 41.8 on 6 and 237 DF, p-value: < 2.2e-16
順に残差の標準誤差、決定係数、自由度調整済み決定係数、F値、p.value。回帰と読み方は同様のようだ。
Value of test-statistic is: -6.7727 15.2971 22.9349
一番左はのt値らしい。一番右の値は帰無仮説のF検定のF値らしい。真ん中の値は帰無仮説のF検定のF値とのこと。
Critical values for test statistics: 1pct 5pct 10pct tau3 -3.99 -3.43 -3.13 phi2 6.22 4.75 4.07 phi3 8.43 6.49 5.47
tau3の5pctは、帰無仮説に対応しているとのこと。t値は-6.7727で5pctを下回っているので、帰無仮説は棄却される。つまり、単位根はない。同様にphi2, phi3はそれぞれ、に対応し、F値はそれぞれ15.2971, 22.9349だから棄却される。
ur.df関数のオプション
なお、ur.df関数のtype引数と各モデルは下記のように対応する。
stockACF <- summary(ur.df(stocksub[,2],type="drift"))
だと、
に対応し(をdriftと呼ぶことに由来するようだ)、
stockACF <- summary(ur.df(stocksub[,2],type="none"))
だと、
に対応する。
それぞれやってみる。上側はtype="drift"の場合、下側はtype="none"の場合。(一部抜粋)
Call: lm(formula = z.diff ~ z.lag.1 - 1) Residuals: Min 1Q Median 3Q Max -79.09 -10.96 0.00 12.92 65.00 Coefficients: Estimate Std. Error t value Pr(>|t|) z.lag.1 -1.00673 0.06373 -15.8 <2e-16 ***
Call: lm(formula = z.diff ~ z.lag.1 + 1) Residuals: Min 1Q Median 3Q Max -80.379 -12.177 -1.246 11.633 63.754 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.24599 1.30384 0.956 0.34 z.lag.1 -1.01026 0.06385 -15.822 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
最終的な結果はtype="trend"の場合との係数が異なる。
まとめ
ur.df関数により、単位根を含むか否かの判定が出来る。単位根を含まないと判断が出来れば、その結果の次数応じてARIMAモデルを当てはめることが出来る。単位根が存在する場合は、階差をとって再びur.df関数を用いて単位根を含むかどうかの判定を行う。
残課題
- ADF検定で推定しているモデルは単位根の項、トレンドの項、系列相関の項(ARモデル)を含んでいるが、MAモデルの項は含んでいないのは何故か。
- type引数は、"trend", "drift", "none"の順番で検定を行い、いずれでも単位根の存在が棄却出来ない場合、階差系列を取り、再び同じプロセスで単位根の検定を行う。単位根の存在が棄却出来た段階で、その時点の階差次数dに対して、ARIMA(p,d,q)を適用する、という理解だが、確信が無い。