5

stan 次のようなWeb ページから標準的な例を開始する場合:

schools_code <- '
  data {
   int<lower=0> J; // number of schools 
   real y[J]; // estimated treatment effects
   real<lower=0> sigma[J]; // s.e. of effect estimates 
 } 
 parameters {
   real theta[J]; 
   real mu; 
   real<lower=0> tau; 
 } 
 model {
   theta ~ normal(mu, tau); 
   y ~ normal(theta, sigma);
 } 
 '

  schools_dat <- list(J = 8, 
                 y = c(28,  8, -3,  7, -1,  1, 18, 12),
                 sigma = c(15, 10, 16, 11,  9, 11, 10, 18))

 fit <- stan(model_code = schools_code, data = schools_dat, 
           iter = 1000, n_chains = 4)

(こちらから入手しました)

ただし、これはパラメーターの事後分位数のみを提供します。私の質問は次のとおりです。他のパーセンタイルを取得する方法は? 私はそれがバグに似ているはずだと思います(? )

remark:タグ付けstanてみたけど評判悪すぎ(;_;)ごめんなさい

4

2 に答える 2

9

rstan v1.0.3(まだリリースされていませんapply())からstanfit classstan() function. fit が から取得されたオブジェクトである場合stan()、たとえば、

apply(fit, MARGIN = "parameters", FUN = quantile, probs = (1:100) / 100)

また

apply(as.matrix(fit), MARGIN = 2, FUN = quantile, probs = (1:100) / 100)

前者は各チェーンの各パラメーターに FUN を適用しますが、後者は FUN を各パラメーターに適用する前にチェーンを結合します。1 つのパラメーターのみに関心がある場合は、次のようなものです。

beta <- extract(fit, pars = "beta", inc_warmup = FALSE, permuted = TRUE)[[1]]
quantile(beta, probs = (1:100) / 100)

はオプションです。

于 2012-10-21T10:55:21.060 に答える
0

これが私の試みです。これが正しいことを願っています:

fitから取得したオブジェクトであるとしますstan(...)。次に、任意のパーセンタイルの事後が次から取得されます。

quantile(fit@sim$sample[[1]]$beta, probs=c((1:100)/100))

角括弧内の数字は、私が推測するチェーンです。これが明確でない場合:私は使用しますrstan

于 2012-09-04T19:41:07.423 に答える