# rstanを入れる準備 install.packages('inline') install.packages('Rcpp') # Rtoolsを入れる # https://github.com/stan-dev/rstan/wiki/Install-Rtools-for-Windows # 確認 Sys.getenv('PATH') system('g++ -v') library(inline) library(Rcpp) install.packages("rstan", dependencies = TRUE) # ライブラリの読み込み require(rstan) # 計算の並列化 rstan_options(auto_write = TRUE) options(mc.cores = parallel::detectCores()) # モデルの作成 localLevelModel_1 <- " data { int n; vector[n] Nile; } parameters { real mu; # 確定的レベル(データの平均値) real sigmaV; # 観測誤差の大きさ } model { for(i in 1:n) { Nile[i] ~ normal(mu, sqrt(sigmaV)); } } " # データの指定 Nile # Stanに渡すために整形 NileData <- list(Nile = as.numeric(Nile), n=length(Nile)) NileData # 乱数の種 set.seed(1) # 確定的モデル NileModel_1 <- stan( model_code = localLevelModel_1, data=NileData, iter=1100, warmup=100, thin=1, chains=3 ) # 結果の確認 # 推定されたパラメタ NileModel_1 # 計算の過程を図示 traceplot(NileModel_1) set.seed(1) # warmup期間が短すぎたようなので、増やす NileModel_2 <- stan( model_code = localLevelModel_1, data=NileData, iter=1500, warmup=500, thin=1, chains=3 ) # 推定されたパラメタ NileModel_2 # 計算の過程を図示 traceplot(NileModel_2)