時系列を予測するモデルがあります。したがって、5つのパラメーターしかありません。これを使用して、7200x3マトリックスを生成する変換パラメーターとして時系列を計算し、観測と比較します。
これまでのところ、100回の反復を行うだけで期待どおりに機能します。しかし、今は SNOW を使用してこの計算を並列化し、6x1000 の反復を作成しました。1 時間かかりましたが、問題ないようです。唯一の問題は、結果の rdata ファイルを読み込めなくなったことです。サイズは 11GB です。
シミュレーションの数を増やす必要があるため、このサイズのデータを処理する方法を見つける必要があります。他の人々はこの問題にどのように対処しますか?
コード
(簡単な例を作成しようとしています-読みやすくなります)
R スクリプト
library(rstan)
library(foreach)
library(doSNOW)
model.c <- stanc(file="3c_model.stan")
model.comp <- stan_model(stanc_ret=model.c)
cl <- makeCluster(6, type="SOCK")
registerDoSNOW(cl)
num_chains <- 6
parallel_fit <- foreach(i = 1:num_chains,.packages='rstan') %dopar% {
s <- sampling(model.comp, data=stan.list, chains=1, iter= 1000)
}
fits <- sflist2stanfit(parallel_fit)
stopCluster(cl)
モデルの関連部分
functions {
vector evolve(vector pre, real inp, real p1){
vector[3] out;
out[1] <- pre[1] + pre[2]/p1;
out[2] <- pre[2] + pre[3]/p1;
out[3] <- pre[3]/p1 + inp;
}
}
data {
int<lower=1> N ;
real<lower=0> y[N] ;
real<lower=0> inp[N] ;
}
parameters {
vector<lower=0, upper=5000>[3] init_ss;
real<lower=0, upper=60> p1;
}
transformed parameters {
vector[3] state[N];
state[1] <- init_ss;
for (i in 2:N){
state[i] <- evolve(state[i-1], inp[i-1] ,p1);
}
}
model {
p1 ~ gamma(1, 10);
init_ss ~ gamma(1,100);
for (i in 100:N){
if (y[i] >0 )
y[i] ~ normal(state[i][1], 1) ;
}
}
アップデート
Modeling Language Manual p41の例に従ってコードを再編成することに成功しました。現在、状態空間は保存されていません。残念ながら、まだ軌道が必要です (少なくともこの開発段階では)。したがって、誰かが賢い解決策を持っていることを願って、これを開いたままにします。