cmdstanR: извлечение dr aws из соответствия модели stan - PullRequest
1 голос
/ 06 января 2020

Я пытаюсь извлечь др aws из модели Стэна. Файл stan выглядит следующим образом:

data {
  int<lower=0> N;
  int<lower=0, upper=1> obs_data[N];
}

parameters {
  real<lower=0, upper=1> lambda;
}

model {
  target += uniform_lpdf(lambda | 0,1);
  for (n in 1:N) {
    target += bernoulli_logit_lpmf(obs_data[n] | lambda);
  }
}

Я использую cmdstanR для компиляции и выборки из модели.

dl <- list(N = 10, obs_data = c(1,0,1,1,1,0,0,1,1,1))

mod <- cmdstan_model("model.stan") // file pasted above
fit <- mod$sample(data, data = dl, num_chains = 4, num_cores = 4)

Полученные объекты подгонки выглядят следующим образом:

> fit$draws()
, , variable = lambda

         chain
iteration           1          2           3          4
     1    0.419819000 0.85642500 0.319154000 0.73338700
     2    0.807612000 0.78189500 0.737518000 0.73338700
     3    0.609196000 0.65826000 0.601450000 0.37992200
     4    0.390631000 0.84544000 0.601450000 0.17992400

Из объекта fit, который является объектом R6, я хочу получить только значения переменных рисования. как мне это сделать?

На основе последующего комментария я добавляю дополнительную информацию о внутренней структуре объекта R6 для большей ясности:

> str(fit$draws())
 'draws_array' num [1:1000, 1:4, 1:2] 0.42 0.808 0.609 0.391 0.391 ...
 - attr(*, "dimnames")=List of 3
  ..$ iteration: chr [1:1000] "1" "2" "3" "4" ...
  ..$ chain    : chr [1:4] "1" "2" "3" "4"
  ..$ variable : chr [1:2] "lambda" "lp__"

1 Ответ

1 голос
/ 06 января 2020

Спасибо за подсказки / предложения от @ StéphaneLaurent и @ RomanLuštrik, я смог получить то, что хотел. Я искал др aws значения результата выборки из stan.

На основе предложений @ RomanLuštrik,

str (подходит $ dr aws ()), дает сопоставить с различными показателями; сначала «итерация», затем «цепочка» и, наконец, «переменная».

Так как я искал для извлечения dr aws для параметра "лямбда" ("переменная"); Я мог получить к нему доступ через

fit$draws()[,,1].

Чтобы нарисовать сэмплы из 1-й и 3-й цепочек и первые 25 сэмплов для параметра "лямбда", мне нужно использовать

fit$draws()[1:25,c(1,3),1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...