お薦めHP:

RjpWiki
  (Rでエコノメトリクス)

R-Tips

Quick-R

scratch-R

Econometrics in R

EconWiki R

R/Finance : Applied Finance with R

Statistics with R

Rで国際金融

A Brief Guide to R for Beginners in Econometrics

金明哲さんのHP

Atsushi Matsumoto's Website #Materials for R

石田基広さんのHP

奥村泰之さんのHP(主に心理学)

久保拓弥さんのHP(主に生態学)

R Graphical Manual

Japan.R (勉強会)

Tokyo.R (勉強会)

Tsukuka.R (勉強会)

Nagoya.R (勉強会)

Osaka.R (勉強会)

Okinawa.R (勉強会)


1.基本概念

 http://d.hatena.ne.jp/teramonagi/ を参考にし、「R」を用いて、粒子フィルタ(詳しくは下記の参考文献を参考にされたい)の実行の仕方を説明する。
 ここでは「Rcpp、inline」というパッケージを利用することにより、 「R」での計算を「C++」で実行させることによって粒子フィルタを実行させる。

2.インストール

 1)Rtools.exeのインストール

http://cran.md.tsukuba.ac.jp/bin/windows/Rtools/ から「R」のバージョンにあったRtoolsをインストール。 (自分の場合は2.14.0)

 2)「R」の再インストール

 通常、「R」は「C:\Program Files\R\R-2.14.0」にインストールされていると思います。 しかしここではCのすぐ下である「C:\R\R-2.14.0」に再インストールする必要があります。

 3)環境変数の設定 (システムのプロパティーから)

Pathのところに、次の3つを付け加える。
C:\Rtools\bin
C:\Rtools\MinGW64\bin
C:\R\R-2.14.0\bin

 4)「Rcpp」と「inline」のテスト

 Rを起動し、次のパッケージをインストール。

install.packages("Rcpp")
install.packages("inline")

library(Rcpp)
library(inline)
src <- '
  Rcpp::NumericVector xa(a);
  Rcpp::NumericVector xb(b);
  int n_xa = xa.size(), n_xb = xb.size();
  Rcpp::NumericVector xab(n_xa + n_xb - 1);
  for (int i = 0; i < n_xa; i++){
    for (int j = 0; j < n_xb; j++){
      xab[i + j] += xa[i] * xb[j];
    }
  }
  return xab;
'
fun <- cxxfunction(signature(a = "numeric", b = "numeric"), src, plugin = "Rcpp")

cygwin warning:
  MS-DOS style path detected: C:/R/R-214~1.1/etc/i386/Makeconf
  Preferred POSIX equivalent is: /cygdrive/c/R/R-214~1.1/etc/i386/Makeconf
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
> fun(1:3, 1:4)
[1]  1  4 10 16 17 12


これは ”R上にRcppパッケージを使ったC++のコードを文字列として書いておいて、 それをinlineパッケージのcxxfunction関数を使用することによってそのままDLLとしてコンパイル、 更に自動でR上へロードしてそれをfun関数として割り当てる” ということを行っている。

 5)再度環境変数の設定 (システムのプロパティーから)

 4)で実行すると、エラーはでるものの結果は出ると思います。 その中のエラーをよく見ていると、 「CYGWIN environment variable option "nodosfilewarning" turns off this warning.」 と書かれており、 これに従い、再度環境設定すればよい。 よってCYGWINを新規作成し、nodosfilewarningとすればよい。 これで再度Rを起動させ同様のことをしても、エラーはなくなる。

3.サンプルテスト

 次に、「RcppSMC」というパッケージをインストールする。
install.packages("RcppSMC")

 ここでは最も簡単な線形の場合を 「simGaussian関数」を用いて、「線形ガウシアン状態空間モデル」を考察する。 よって次のモデルを考察していることとなる。

状態方程式: x(n)=x(n-1)+e(n)
観測方程式: y(n)=x(n)+f(n)

e,f はそれぞれ独立な標準正規分布に従う乱数。

> library(RcppSMC)
 要求されたパッケージ Rcpp をロード中です 
 警告メッセージ: 
1:  パッケージ '‘RcppSMC’' はバージョン 2.14.2 の R の下で造られました  
2:  パッケージ '‘Rcpp’' はバージョン 2.14.2 の R の下で造られました  
> sim<-simGaussian(len=10)
> sim
$state
 [1] 0.5336825 1.4585169 3.8950859 2.7643721 2.4902512 3.5997874 3.2826262
 [8] 4.3629772 3.7565205 4.1641225

$data
 [1] -0.00524223  1.45214378  2.76761464  4.12528078  2.55867236  3.83060418
 [7]  2.05302909  4.85767138  3.93369179  4.17252643


stateがxでdataがyに対応し、 観測値であるyのみの値を使ってxを推定する場合に使われます。 このときには、blockpfGaussianOpt関数を使用します。 ただしこの関数は線形の場合のみ。

4.実行結果

> sim <- simGaussian(len=250)
> res <- blockpfGaussianOpt(sim$data,lag=5,plot=TRUE)
> lines(sim$state, lty=1, lwd = 3, col="red")



青が推定値、赤が実際の状態の値。 予測値の誤差は次のように計算することができます。
> error <- as.numeric(t(res$weight) %*% res$values / sum(res$weight)) - sim$state
> plot(error, ylab ="Error")



【参考文献】


時系列解析入門


予測にいかす統計モデリングの基本―ベイズ統計入門から応用まで


樋口知之(2011)データ同化入門


数理・計算の統計科学 (21世紀の統計科学) (第11章) 【FREE-PDF】


Sequential Monte Carlo Methods in Practice

Kitagawa, G. (1996), "Monte Carlo Filter and Smoother for Non-Gaussian Nonlinear State Space Models", Journal of Computational and Graphical Statistics, Vol. 5, 1-25.

北川源四郎 (1996)「モンテカルロ・フィルタおよび平滑化について」統計数理 Vol. 44. [PDF]

樋口知之 (1996)「遺伝的アルゴリズムとモンテカルロフィルタ」統計数理 Vol. 44. [PDF]

樋口知之 (2005) 「粒子フィルター入門」 [PDF]

C言語では、次を参照。
Particle Filter, Monte Carlo Filter


Back to R

Google


R 関連図書:


【初級編】 基本事項

【中級編】 Iの応用編

【初級編】 基本事項 [HP]

【初級編】 基本事項 [HP]

【中級編】 グラフィックス [HP]

【中級編】 いろいろ

【中級編】 計量経済学

【中級編】 計量経済学

【中級編】 計量経済学

【中級編】 計量経済学 [HP]

【中級編】 多次元データ一般

【中級編】 計量経済学 [HP]

【中級編】 時系列

【中級編】 時系列

【中級編】 ベイズ統計

【中級編】 ベイズ統計

【中級編】 ベイズ統計

【中級編】 ベイズ統計を用いたマーケティング

【中級編】 マーケティング

【中級編】 テキストマイニング [HP]

【中級編】 テキストマイニング

【中級編】 テキストマイニング

【中級編】 ネットワーク

【中級編】 パターン認識

【中級編】 マシーンラーニング

【中級編】 モンテカルロ法、ブートストラップ、MCMCなど [HP]

【中級編】 基本事項