Как иметь переменную в блоке данных Stan быть массивом длины J> = 1? - PullRequest
0 голосов
/ 06 ноября 2018

Я использую следующую очень простую модель Stan, сохраненную как model.stan,

data {
  int<lower=1> J;
  real x[J];
}

parameters {
  real mu[J];
  real<lower=0> sigma[J];
}

model {
  sigma ~ inv_gamma(1, 1);
  mu ~ normal(0, 10);
  x ~ normal(mu, sigma);
} 

В этой модели у меня есть единственная точка данных x[j], которую я моделирую исходя из J различных нормальных распределений.

Когда J> 1, следующий код R работает отлично:

library(rstan)
model <- stan_model('~/model.stan')
data <- list(J = J, x = runif(J))
stan.fit <- rstan::sampling(model, data=data)

Однако, когда J = 1, я получаю следующую ошибку:

failed to create the sampler; sampling not done

Как я могу написать эту модель Стэна, чтобы она работала для всех J> = 1?

1 Ответ

0 голосов
/ 06 ноября 2018

Это общая проблема (и она усугубляется ошибкой, когда описание проблемы подавляется в rstan 2.18.1). Если вы объявляете реальный массив в блоке данных программы Stan, соответствующий объект R должен иметь атрибут измерения. Таким образом,

stan.fit <- sampling(model, data = list(J = J, x = as.array(runif(J))))

работает (хотя есть много расходящихся переходов), потому что x имеет атрибут dim, который J.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...