オーム社トップページ >
Rで学ぶVAR実証分析
更新日:2022年1月10日 公開日:2019年12月15日
村尾 博
本書に用いたプログラム(Rスクリプト)およびデータを提供します。 ファイル名の後に簡単な説明を書き、それぞれの役割や目的が分かるようにしています。
その他の資料も含めています。それらは目次の2と3に示すものです。
最後にディレクトリ(フォルダ)の表記法に関する説明を行っています。 Rスクリプト(プログラム)を書く人にとっては自明な内容ですが、念を押しを兼ね、書いています。
これらのファイルは「Chap_1
」や「Chap_2
」といったフォルダに入っています。
different_Id_process.R
--- 図1.1の作成。matplot()関数やtext()関数を使ってラベル付き折れ線グラフを作成します。このプログラムは、前半がインパルス応答分析の基本を示すプログラムになっています。 インパルス応答分析の計算カラクリが簡単なループ計算であることが示されています。
lagSelect_VAR.R
--- パッケージ「vars」のVARselect()関数を用い、VARモデルにおけるラグ次数の選択問題に関する情報を得ます。test_ur_df.R
--- パッケージ「urca」のur.df()関数を用い、拡張ディッキー=フラー(ADF)検定を実行します。test_pgff.R
--- パッケージ「egcm」のpgff.test()関数を用い、Pantula, Gonzales-Farias, Fuller(PGFF)検定を実行します。この検定はWeighted Symmetric検定とも呼ばれています。test_ur_ers.R
--- パッケージ「urca」のur.ers()関数を用い、Elliott-Rothenberg-Stock(ERS)検定を実行します。
この検定はADF-GLS検定とも呼ばれています。test_ur_pp.R
--- パッケージ「urca」のur.pp()関数を用い、Phillips-Perron(PP)検定を実行します。test_ur_kpss.R
--- パッケージ「urca」のur.kpss()関数を用い、Kwiatkowski, Phillips, Schmidt, and Shin (KPSS)検定を実行します。test_ur_za.R
--- パッケージ「urca」のur.za()関数を用い、Zivot and Andrews (ZA)検定を実行します。test_ca_jo.R
--- パッケージ「urca」のca.jo()関数を用い、ヨハンセン検定を実行します。test_egcm.R
--- パッケージ「egcm」のegcm()関数を用い、エングル=グランジャー検定を実行します。test_serial.R
--- パッケージ「vars」のserial.test()関数を用い、系列無相関の検定を実行します。test_arch.R
--- パッケージ「vars」のarch.test()関数を用い、均一分散の検定を実行します。test_normality.R
--- パッケージ「vars」のnormality.test()関数を用い、正規分布の検定を実行します。est_VAR_vars.R
--- パッケージ「vars」のVAR()関数を用い、誘導VARモデルを推定します。est_VEC_urca.R
--- パッケージ「urca」のcajorls()関数を用い、誘導VECモデルを推定します。est_SVAR_vars.R
--- パッケージ「vars」のSVAR()関数を用い、構造VARモデルを推定します。est_SVEC_vars.R
--- パッケージ「vars」のSVEC()関数を用い、構造VECモデルを推定します。est_restrict_vars.R
--- パッケージ「vars」のrestrict()関数を用い、制約付き誘導VARモデルを推定します。グランジャー因果性検定は、該当セクションへ入れています。
test_stability_vars.R
--- パッケージ「vars」のstability()関数を用い、構造安定性の検定を実行します。test_js_svars.R
--- パッケージ「svars」のjs.test()関数を用い、B型構造モデル特有の検定を実行します。test_ablrtest_urca.R
--- パッケージ「urca」のablrtest()関数を用い、VECモデル特有の検定を実行します。irf_VAR_vars.R
--- パッケージ「vars」のirf()関数を用い、直交化インパルス応答関数に基づく分析を行ないます。
使用データ「Canada」はVECや構造VECに適したデータです。そのような意味で、使用データ「Canada」と誘導VARとの組み合わせは、よい組み合わせではありません。次は筆者が作成したRスクリプトです。 一般化インパルス応答関数と直交化インパルス応答関数に基づき、2つの方法で実行します。 モデルは誘導VARモデルです。 使用データの名称も合わせて示しておきます。
irf_two_methods_VAR.R
--- 筆者が作成したRスクリプトdata_KPSW.csv
--- データファイル(csvフォーマット)
データ「data_KPSW.csv
」の出所については、練習用データを参照してください。
irf_vec2var_vars.R
--- パッケージ「vars」のvec2var()関数とirf()関数を使うのが特徴的です。
推定はVECモデルで行ない、モデル推定後にレベルVARへ変換し、そのレベルVARに基づくインパルス応答分析を実行します。
使用パッケージは「urca」と「vars」であり、そこに含まれているca.jo()関数、vec2var()関数、irf()関数を使います。irf_SVEC_vars.R
--- パッケージ「vars」のSVEC()関数とirf()関数を使うのが特徴的です。
いわゆる構造VECモデルに基づくインパルス応答分析を行います。
使うパッケージは「urca」と「vars」であり、そこに含まれているca.jo()関数、SVEC()関数、irf()関数を使います。irf_SVAR_vars.R
--- パッケージ「vars」のSVAR()関数とirf()関数を使うのが特徴的です。
いわゆる構造VARモデルに基づくインパルス応答分析を行います。使用データ「Canada」と構造VARとの組み合わせは、よい組み合わせではありません。筆者が作成したRスクリプトです。 ブートストラップ法のRスクリプトは長いので2つのファイルに分けています。 1番ショック(s1)から3番内生変数(y3)へのインパルス応答分析といった意味で「y3s1」といった情報をファイル名に含めています。
boot_y3s1_1of2.R
--- ブートストラップ法のパート1。ブートストラップ複製を得るまで。boot_y3s1_2of2.R
--- ブートストラップ法のパート2。ブートストラップ複製からグラフを描くまで。data_Stock.csv
--- データファイル(csvフォーマット)
データ「data_Stock.csv
」の出所については、練習用データを参照してください。
fevd_vec2var_vars.R
--- パッケージ「vars」のvec2var()関数とfevd()関数を使うのが特徴的です。
推定はVECモデルで行ない、モデル推定後にレベルVARへ変換し、そのレベルVARモデルに基づいて予測誤差の分散分解を実行します。
使用パッケージは「urca」と「vars」であり、そこに含まれているca.jo()関数、vec2var()関数、fevd()関数を使います。次は筆者が作成したRスクリプトです。 直交化インパルス応答関数に基づきつつ、2つの異なった方法で実行します。 モデルは誘導VARモデルです。 使用データの名称も合わせて示しておきます。
fevd_two_methods_VAR.R
--- 筆者が作成したRスクリプト。モデルは誘導VARモデル。data_Stock.csv
--- データファイル(csvフォーマット)
データ「data_Stock.csv
」の出所については、練習用データを参照してください。
test_causality_vars.R
--- パッケージ「vars」のcausality()関数を使い、グランジャー因果性検定を実行します。
causality()関数は(1)グランジャー因果性検定、(2)グランジャー瞬間的因果性検定といった2つのタイプの検定を行います。
predict_vec2var_vars.R
--- パッケージ「vars」のpredict()関数を使い、予測を実行します。
推定はVECモデルで行ない、モデル推定後にレベルVARへ変換し、そのレベルVARに基づいて予測を行います。hd_id_svars.R
--- パッケージ「svars」のhd()関数とid()関数を用い、ヒストリカル分解を実行します。
hd()関数はVMA表現と配列を使っている特徴があります。次は筆者が作成したRスクリプトです。 使用データの名称も合わせて示しておきます。
hd_SVAR_v1.R
--- VMA表現に基づかず、VAR表現に基づいています。配列を使わない特徴があります。hd_SVAR_array_v1.R
--- VAR表現と配列を使っている特徴があります。hd_VMA_v1.R
--- VMA表現と配列を使っている特徴があります。data_Stock.csv
--- データファイル(csvフォーマット)
データ「data_Stock.csv
」の出所については、練習用データを参照してください。
normal_table.R
--- 標準正規分布表を作成します。chisq_table.R
--- カイ2乗分布表を作成します。t_table.R
--- t分布表を作成します。F_table.R
--- F分布表を作成します。
これらはフォルダ「stat_tables
」に入っています。
次の回帰では残差回帰の理論どうりの結果が得られます。 残差回帰のテクニックを推定に適用するものであり、具体的にはリンゴの需要関数を推定します。 理論どうりの結果が得られる具体例でもって残差回帰を実感してください。
resid_reg_OK.R
--- 理論どうりの結果が得られる残差回帰apple_JP.csv
--- Rスクリプト「resid_reg_OK.R
」に用いるアップル・データ(csvフォーマット)説明書_apple_JP.pdf
--- アップル・データ「apple_JP.csv
」の説明書(PDFファイル)
これらはフォルダ「data_apple_JP
」に入っています。
アップル・データは果物関連の時系列データであり、1980年から2004年までの年周期データです。 53個の変数を含んでいます。 その中からリンゴ需要関数用の変数を選び出すといった想定のデータセットになっています。 他の果物の需要分析にも使えます。
大きなシステムから一部だけを取り出して議論(推定や検定)する場合に残差回帰は有用なテクニックです。 残差回帰は次の分析などに使われています。
残差回帰は頻繁に使うことがないかも知れませんが、頭の片隅に残しておきたいテクニックです。
VAR分析の練習に使えるデータを示します。 Rパッケージ「vars」や「svars」に含まれているデータも練習に使えますが、そのようなデータはここで再び示すようなことはしません。 学術論文や教科書に使われ、公開されているデータが対象になります。 最後に、著者が編集したデータも含めています。
データセット「data_Stock.csv
」はStock and Watson (2001)に使用されたデータです。
米国マクロ経済の四半期データであり、(インフレ率、失業率、利子率)からなる3変量を含みます。
データ収録期間は1954QI - 2000Q4です。
その元となるデータは次のウェブページから入手しました。
http://www.princeton.edu/~mwatson/publi.html
--- プリンストン大学Watson博士のウェブページこのページを開き、次の論文のところへ移動してください。
この論文に使われている(物価指数GDPD、失業率LHUR、利子率FYFF)のデータを入手し、論文の結果を自分で再現することが考えられます。
物価指数GDPDが四半期データ、失業率LHURと利子率FYFFが月周期データであること、さらに観測期間が異なることから、
これらのデータは共通の期間からなる四半期データに編集する必要があります。
このようなデータ編集は面倒と思われる場合は、既に編集済みの四半期データ「data_Stock.csv
」を使うことが考えられます。
「data_Stock.csv
」を使う場合でも、次の3変量はつくる必要があります。
インフレ率は年率でパーセント表示にするために400を掛けています。 詳しいデータの計算法については論文に記載されています。 特にp.102のフットノートが役立ちます。 「sample period」は、論文(p.105)に示されている如く、「1960Q1-2000Q4」になります。
この論文はVAR分析の練習資料として有用です。 有名なVAR実証分析はVECモデルを使用し、複雑な内容になっている事例が多く、練習用資料に適していないのが実情です。 一方、この論文は3変量からなる誘導VARモデルを使い、基本的なVAR分析「インパルス応答分析」「予測誤差の分散分析」「グランジャー因果性検定」を行っています。 VAR分析の練習に対する「答え」が示されていること、簡単なVARモデルであることから、この論文はVAR分析の練習に適しています。 特に最初の練習資料としては最適でしょう。
これは King, Plosser, Stock and Watson (1991)に使用されたデータであり、VAR分野では「KPSWデータ」として知られています。
米国マクロ経済の四半期データであり、データ収録期間は1947Q1 - 1988Q4です。
変数の個数は最大で6個であり、(消費C、投資I、生産量Y、貨幣供給量M、利子率R、インフレ率DP)からなります。
本書で使用した3変量データ「data_KPSW.csv
」は別の場所から入手しましたが、元々の出所はKPSWデータです。
KPSWデータは次のウェブページから入手できます。
http://www.princeton.edu/~mwatson/publi.html
--- プリンストン大学Watson博士のウェブページこのページを開き、次の論文のところへ移動してください。
ダウンロードしたファイルの中には数個のデータセットが含まれていますが、(消費C、投資I、生産量Y、貨幣供給量M、利子率R、インフレ率DP)からなるデータセット「CIYMRDP.PRN」がメインになります。 「CIYMRDP.PRN」からデータを読み取り、King et al. (1991)のFigure 1を再現するためのRスクリプトを作成し、ここに提供しています。 文言や表現法の差異はありますが、Figure 1が再現されていると言えます。
kpsw_zip
--- Watson博士のウェブページからダウンロードしたファイルであり、KPSWデータを含みます。read_KPSW_data.R
--- 「kpsw_zip」に含まれているKPSWデータを読み取り、King et al. (1991)のFigure 1を描きます。data_KPSW.csv
--- 別の場所からダウンロードしたKPSWデータであり、本書11章で使用しました。
これらはフォルダ「data_KPSW
」に入っています。
King et al. (1991)のFigure 1が再現できたので、Figure 2もRでもって再現することを試みました。 しかし、R関数の組み合わせだけでもってFigure 2を再現することは難しいようです。 したがってFigure 2はRの練習対象にならないと判断しました。 もちろん、一から始めるようなRスクリプトを自分で書けば、Figure 2は再現できるでしょう。 その方向性へ進む場合でも不明な点があり、Figure 2の再現は容易ではありません。
話が変わりますが、King et al. (1991)のTable 4は、統計解析ソフトRが計算する分散寄与度(RVC)に対応していません。 したがってTable 4もRの練習対象になりません。
King et al. (1991)はRの練習に対する「答え」が示されているとは言い難いですが、それでも幾らかの練習に役立ちます。 少なくとも単位根検定や共和分検定に対する「答え」は示されています。
これは著名な教科書『Econometric Analysis』(Greene, William H.)に使われている米国マクロ経済の四半期データであり、 データ収録期間は1950QI - 2000Q4、14個の変数が含まれています。 50年間の四半期データですから、貴重なデータセットです。 次のウェブページからダウンロードできます。
http://pages.stern.nyu.edu/~wgreene/Text/econometricanalysis.htm
--- ニューヨーク大学Greene博士のウェブページ次の経路を経て「Table F5.2」に移動します。 変数の説明を含め、データの詳細が記載されています。
VAR分析の「答え」が示されていませんが、VAR分析の練習に役立つデータです。 マクロ経済に関する構造VARモデルを自分でつくり、それを米国のデータで試してみたいといった場合に役立つと考えます。
マクロ経済学の教科書に記載されている標準的なIS-LMモデルを想定し、日本マクロ経済のデータを集めたことがあります。 かなり昔に作ったデータですが、ここに公開します。 日本統計局の「日本の長期統計系列」から入手した年周期データであり、データ収録期間は1955年 - 1998年です。 元々のデータ構成を維持しつつ、ただちに統計解析ソフトに読み込むことのできる状態のデータセットになっています。 そのため変数の個数は45個と多いです。これらの中からIS-LMモデル用の変数を選び出したり作ったりする想定になっています。 AD−ASモデルを想定し、雇用労働者数や失業率など、労働市場の変数も幾らか含めています。
VAR用データとしては極めて小さいですが、3次元ぐらいの小型VARであれば使用可能かも知れません。 一方、IS-LMモデルを含め、伝統的な計量モデルであれば、いろいろな意味で役立つデータです。
macro_JP.csv
--- 日本マクロ経済データ(csvフォーマット)macro_JP.xlsx
--- 同データのExcelファイル説明書_macro_JP.pdf
--- 日本マクロ経済データ「macro_JP.csv
」の説明書(PDFファイル)read_macro_JP.R
--- データファイル「macro_JP.csv
」からデータを読み取り、幾らかのグラフを描きます。
これらはフォルダ「data_macro_JP
」に入っています。
プログラミング初心者を対象とし、ディレクトリ(フォルダ)の表記法に関する説明を行います。 Rスクリプト(プログラム)を書く人にとっては自明な内容であり、ざーと読み流してください。
まず、ディレクトリも、ファルダも、ファイルの保存場所といった意味では同じです。 フォルダは入れ物(容器)といった意味合いが強くなります。 一方、ディレクトリはツリー構造を持ったファイルの組織体といった意味合いが強くなります。
ダウンロードしたプログラムが問題なく動くためには、ディレクトリやフォルダと呼ばれるファイル保存場所の表記が重要であり、次の一致が必要です。
プログラムに記載されているディレクトリ(ファルダ) = コンピュータ上の実際のディレクトリ(ファルダ)
これだけです。 これだけでは味も素っ気もないので、もう少し詳しく説明します。 ここからは具体例でもって説明します。
まず、当サイトからダウンロードしたファイルを入れるための保存場所(フォルダ)を作ります。 「book_VAR」と名付けたファルダを作り、そこにダウンロードしたファイルを入れたとします。 ファルダ「book_VAR」の場所は次の場所とします。
C:/data_works/time_multi_eqs/book_VAR
「C:/data_works/time_multi_eqs」の部分は、自分のコンピュータ環境に応じて選んでください。
ダウンロードしたファイルの中には11章で用いたプログラム「irf_two_methods_VAR.R
」が入っています。
このプログラム「irf_two_methods_VAR.R
」は、フォルダ「Chap_11」に入っていますから、それを絶対参照
の形で表記すると、次のようになります。
C:/data_works/time_multi_eqs/book_VAR/Chap_11/irf_two_methods_VAR.R
14章で用いたプログラム「fevd_two_methods_VAR.R
」は、
フォルダ「Chap_14」に入っていますから、それを絶対参照の形で表記すると、次のようになります。
C:/data_works/time_multi_eqs/book_VAR/Chap_14/fevd_two_methods_VAR.R
ところで、サブフォルダに関しては、全てのフォルダに対し、次の3つのサブフォルダを作っています。
サブフォルダ「data_temp
」は、研究やプロジェクトが終了すると、削除するデータの保管場所といった意味で作っています。
どのサブフォルダが必要かは個々のプログラムによって異なります。
説明の単純化のため、全てのフォルダに対し、3つのサブフォルダを作っています。
次はプログラムに記載されているディレクトリ(フォルダ)構造を変更します。
フォルダ「Chap_11」内のプログラム「irf_two_methods_VAR.R
」を例に取ると、setwd()のところの内容を次のように変更します。
setwd("C:/book_VAR/data_works/Pesaran_EL/R_prg") ↓ setwd("C:/data_works/time_series/multi_eqs/book_VAR/Chap_11")
この操作は、「プログラムに記載されているディレクトリ(フォルダ)」=「コンピュータ上の実際のディレクトリ(フォルダ)」となるようにするための変更です。
フォルダ「Chap_11」のサブフォルダ「data
」や「outputs
」を絶対参照の形で表示すると、次のようになります。
C:/data_works/time_multi_eqs/book_VAR/Chap_11/data C:/data_works/time_multi_eqs/book_VAR/Chap_11/outputs
一方、working directory(現在位置)から見て、下のフォルダ、上のフォルダ、隣のファルダといった形でフォルダ指定(一般的にはオブジェクト指定)を行う方式は相対参照
と呼ばれます。
working directory(現在位置)が「Chap_11」であるとき、そのサブフォルダ「data
」や「outputs
」を相対参照で表記すると、次のようになります。
./data ./outputs
working directory「Chap_11」から見て、「Chap_11」内のサブフォルダが「data」や「outputs」といった名前になっているといった意味です。 このように相対参照を利用すると、フォルダ指定の表記が簡単できます。 フォルダ指定のために、長々と続く絶対参照を書く必要がなくなります。
setwd()でもってworking directoryを指定しない場合は、Rの実行ファイルがある場所がworking directoryになっています。 「データが上手く読み取れない」「出力が思うように出力されない」といったトラブルは、相対参照の誤りであるケースが意外と多いものです。 このような経験から、私がRスクリプトを書く場合は、setwd()でもってworking directoryを特定化し、それを最初のコマンドとして書くようにしています。 つまり、自分の作業場所(現在位置)をコンピュータに伝えてから具体的な作業に入っていきます。 このような準備作業は、相対参照に関する指示ミスを少なくします。
次はworking directory「Chap_11」内のサブフォルダ「data」や「outputs」の名前や構造を変更した場合の対処法を説明します。
データの保存場所(フォルダ)の名前を「data
」から「external_data
」に変更した場合は、プログラム「irf_two_methods_VAR.R
」における該当部分を変更します。
変更前と変更後を示すと、次のような変更を行います。
read.csv("./data/data_KPSW.csv") ↓ read.csv("./external_data/data_KPSW.csv")
ファイルの保存場所は絶対参照の形で書くことも出来ますが、ここでは相対参照の形で書いています。
画像ファイルの保存場所(フォルダ)を「outputs
」から「outputs_irf
」に変更した場合は、プログラム「irf_two_methods_VAR.R
」における該当部分を変更します。
変更前と変更後を示すと、次のような変更を行います。
dev.copy(jpeg, file = "./outputs/Persaran_Fig1.jpg") ↓ dev.copy(jpeg, file = "./outputs_irf/Persaran_Fig1.jpg")
このような操作も、「プログラムに記載されているディレクトリ(フォルダ)」=「コンピュータ上の実際のディレクトリ(フォルダ)」となるようにするための変更です。
サブフォルダの相対参照に関し、次の2つは同等です。
read.csv("./data/data_KPSW.csv") read.csv("data/data_KPSW.csv")
一方、working directory(現在位置)から1つ上のディレクトリ(フォルダ)へ移動する場合は「../」の表記を使います。 2つ上のディレクトリ(フォルダ)へ移動する場合は「../../」、3つ上のディレクトリ(フォルダ)へ移動する場合は「../../../」の表記を使います。 したがってworking directory「Chap_11」から隣のフォルダ「Chap_14」へアクセスする場合は、
../Chap_14
といった相対参照にします。 現在、自分のいる部屋「Chap_11」から別の部屋へ移動する場合は、一度、廊下へ出てから別の部屋「Chap_14」へ移動する必要があります。 コンピュータにおいても同様であり、一度、上のディレクトリ(フォルダ)へ移動し、そこから見える「Chap_14」へアクセスするように指示します。
このページのトップに戻る。