ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Rで経済時系列コミュの単位根

  • mixiチェック
  • このエントリーをはてなブックマークに追加
単位根があるかないか、あるとしたらどの程度か?
と言うのをチェックするのが、単位根検定です。

Rには、2種類の単位根検定が付いています。

PP.test()とadf.test()です。

adf.test()は、tseriesパッケージに入っている為
まず、パッケージを呼んでから使う必要があります。

Nileで実際にやってみます。

> PP.test(Nile)

Phillips-Perron Unit Root Test

data: Nile
Dickey-Fuller = -6.6901, Truncation lag parameter = 3, p-value =
0.01

> library("tseries")
要求されたパッケージ quadprog をロード中です
要求されたパッケージ zoo をロード中です

次のパッケージを付け加えます: 'zoo'


The following object(s) are masked from package:base :

as.Date.numeric


‘tseries’ version: 0.10-15

‘tseries’ is a package for time series analysis and
computational finance.

See ‘library(help="tseries")’ for details.

> adf.test(Nile)

Augmented Dickey-Fuller Test

data: Nile
Dickey-Fuller = -3.3657, Lag order = 4, p-value = 0.0642
alternative hypothesis: stationary

と、こういう結果が出てきました。

ここでどちらも、p-valueと書いたところがありますが、この
部分が、定常なのか非定常なのかの度合いを示しています。

adf.test()の結果として

p-value = 0.0642

とありますが、0.06つまり6%程度、この時系列は非定常っぽいと
言っている訳です。

逆に言えば、94%くらい定常っぽいと言う事でもあるわけで、
目で見たplot(Nile)も、確かに定常っぽい感じですよね。

まぁ所詮降る雨の量や川の幅は、そう大きくは変わらないので
長い目で見れば、水量は定常なのかな?とも思うわけです。

ここまでは、よろしいですか?

コメント(20)

単位根があれば単位根検定のp-valueは 1 に
なる筈で、つまりランダムウオーク(非定常)
だよと言う事になり、単位根がなければ 0 に
なり、定常だよと言っている事になります。

で、この程度がp値に出ているわけで、これを
見れば、どのくらいランダムウオークなのよ?
と言うのが一発で判ると言う事。


おはようございます。
計算してみました。
問題なくできたようです。
ま、定常かどうか判ればそれで良い話なので単位根って何だよ?って
話は飛ばしているので、少しだけ。

時系列モデルにar(自己回帰)と呼ばれているモデルがあります。
一方でランダムウオークモデルと呼ばれている物もあります。

時系列 Y(t)を一期のarモデルで表現すると

Y(t) = a Y(t-1) +ε(t) (1)

ε(t) 〜 N(0,σ^2) (2)

(1)は、今の値Y(t)は、一期前の値Y(t-1)をa倍した物にノイズεtが
乗ったものだよと言う意味です。

(2)は、〜と言うのは、従うよという意味なのですが、N(0,σ^2)つまり
正規分布したノイズが乗っているんだよと言っているわけ。

実はこの式のa=1な場合の事を、ランダムウオークモデルと呼ぶのです。

で単位根検定とは、a=1か、どうかを帰無仮説検定している訳です。

早い話a=1であると仮説を立てて、これが破棄されれば、定常だよと
言うことになります。

帰無仮説ってなんだよ?とか、どうしてこの場合は帰無仮説なんだよ?
って話は、Howさんやります?
数学の世界には背理法という証明の仕方がありまして、それを確率の世界でやってしまうのが帰無仮説を使った検定です。

背理法は、たとえば、√2が無理数(m/nの形であらわせない数)であることを証明するのに、√2が無理数でない、つまりm/nの形で表せると正反対のこと(数学的では対偶と言います)を仮定することからスタートします

すると矛盾が生じることが示せるのですが、その矛盾が生じた原因はどこかというと、「√2が無理数でない」とそもそも仮定したことにあります。したがって、この「正反対のこと」が間違いだった(=>√2は無理数)として示したいことが証明されます。

検定の場合は、同じような手続きをとるのですが、矛盾が生じたというようなことは言えないで、滅多に起きないことが起きた場合に(Rならp-valueが小さい時)、上の例の「正反対のこと」が間違っている(のではないか)として言いたいことがいえるわけです。

つまり、この「正反対のこと」が帰無仮説です。

ちなみに「帰無」と呼ぶのは間違っていると言いたいから(無に帰したいから)です。

まぁ、わざと好きな子に意地悪する小学生のようなものでしょうかねぇ???
ご丁寧に説明を有難うございます。

AとBは、違うものだ!と言いたい時にAとBは同じものだとして
話のつじつまが合わなくなるので、やっぱ違うものだろ?と
するのが帰無仮説の、あらましです。

どうして最初から違うものだ!として話を進めないのかは、
世の中違うものは山ほどあるわけで、全部の違う物の中の
ひとつだから、他の違う物の全てと比較しないといけなく
なる為です。勿論こんな事は無理なわけです。

同じものは、一種類なので、同じじゃないだろ!とする
と、ひとつだけと違う所を示せれば良くなる為です。

ま、そんなことは実用面では、さほど関係ない話でp値を
見て、どの程度なのか判れば終わりです。

Nileは、定常っぽいぞと判ったので、次はこれの予測を
考えてみます。
>ここまでは、よろしいですか?

はい、無事

PP.test(Nile)  p-value = 0.01

と、

adf.test(Nile)  p-value = 0.0642

出来ました。

そこで、質問。
温泉さんの説明では・・・

adf.test()の結果として p-value = 0.0642
とありますが、0.06つまり6%程度、この時系列は非定常っぽいと
言っている訳です。

としております。
ということは、> PP.test(Nile) こちらの結果は見なくていいということですか?(というか、PP.testの p-value値は何を示しているのでしょうか?)



両方とも単位根検定なのですが、早く言えば年式が
違うんです。

実用面では、どちらを使っても問題ないと思いますが
今時は後者が流行りなので、adf.testの値だけを
説明しました。

もちろん、細かな性能の差?を述べても良いのですけど
カローラとサニーの違いのような物なので割愛しました。
温泉さん、おはようございます。

>カローラとサニーの違いのような物なので割愛しました。

了解です。。
(機械系の私にわかりやすい説明ありがとうです)
ま、Nileが定常だと判っても、これじゃトレード出来ないわけで
なんとか株価の類を取り込んで処理してみたい所。

以下にガソリンと灯油の一代足データを置いたので、取ってきて
マイドキュメントに解凍してください。

ダウンロードするファイル名はGT.zipです。

http://briefcase.yahoo.co.jp/bc/nozawa_onsen_potta/lst?.dir=/&.src=bc&.done=http%3a//briefcase.yahoo.co.jp/&.view=l

> dir()

とやるとGTって見えればOKです。

ここで、ファイル->ディレクトリの変更で

 マイドキュメント\GT\01

として、OKを押し、もう一度dir()とすると

> dir()
[1] "G200101.csv" "G200201.csv" "G200301.csv" "G200401.csv" "G200501.csv"
[6] "G200601.csv" "G200701.csv" "T200101.csv" "T200201.csv" "T200301.csv"
[11] "T200401.csv" "T200501.csv" "T200601.csv" "T200701.csv"
>

となりましたか?

ここまでがOKならばcsvをRに取り込む所をやってみます。

準備OKです。
よろしくお願い致します。
> dir()
>とやるとGTって見えればOKです。

これは、どういうことか、わからなかったけど、

? 解凍後のGTフォルダを、マイドキュメントに入れる
? Rの上のファイル->ディレクトリの変更、マイドキュメント\GT\01で指定
? OKを押す

そしたら、

Rで、dir()とすると

[1] "G200101.csv" "G200201.csv" "G200301.csv" "G200401.csv" "G200501.csv" ・・・・

出来ました。
OKですよね?


ではここで、G200101.csvをgasと言う変数に入れてみます。

> gas <- read.csv("G200101.csv")

画面の横幅を広げられるだけ広げて

> gas

とやると、全体が見える筈。

次に1列目だけを見てみます。

> gas[,1]
[1] 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406
[22] 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406
[43] 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406
[64] 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406
[85] 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406
[106] 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406 1406
>

と、銘柄番号が出てきています。こんな感じで
gas[,2]やgas[,3]を、覗いていく事が出来ると思います。

とりあえず、読み込めたわけですが、もう少し詳しく知りたい場合は

> help()

として、目次(c)からread.csvを探せば詳しい使い方が、これでもか?
と言う位に載っている筈です。

さて、単位根の話でしたよね。

6列目が終値なので、

> library("tseries")
要求されたパッケージ quadprog をロード中です
要求されたパッケージ zoo をロード中です

次のパッケージを付け加えます: 'zoo'


The following object(s) are masked from package:base :

as.Date.numeric


‘tseries’ version: 0.10-15

‘tseries’ is a package for time series analysis and computational finance.

See ‘library(help="tseries")’ for details.

> adf.test(gas[,5])

Augmented Dickey-Fuller Test

data: gas[, 5]
Dickey-Fuller = -0.7745, Lag order = 4, p-value = 0.9615
alternative hypothesis: stationary

>

と、極めてランダムウオークっぽい結果となりました。

> plot(gas[,6])

としても、やっぱ、これは如何にも相場っぽいですね。

ここまで、よろしいでしょうか?


>極めてランダムウオークっぽい結果となりました。

はい、たしか・・・ p-value = 0.9615  ←こやつが、1 に近い程

ランダムウォークだ! ということだったですね。

とりあえず、ここまでは、出来ました。。
グラフまでは出力できました。

よろしくお願い致します。
CSV形式を読み込んで、単位根検定が出来るようになれば
後は相場データをCSV形式にすれば、取り合えずRに
食わせてやれるようになったわけです。

エクセルで、データを扱えるならば、CSV形式の出力が
付いている筈だし、多くの相場ソフトのデータもCSVの
出力を持っている筈。

またメモ帳などの、テキストエディタで、CSVの中身を
見れば、ちょっと考えれば細工できる筈。

と言う事で、単位根の話から、実際の取り込みまで出来たので
この話はFIXする事にします。

ここまでで、わからないところがあれば受け付けますけどね。

ログインすると、残り2件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Rで経済時系列 更新情報

Rで経済時系列のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング