Оценка логарифмической вероятности невидимых данных в рстане - PullRequest
1 голос
/ 27 марта 2019

Я понимаю, что могу рассчитать логарифмическую вероятность каждой выборки во время выборки, например,

...

model {

  for (i in 1:N) {
    (y[i] - 1) ~ bernoulli(p[i, 2]);
  }

}

generated quantities {

  vector[N] log_lik;
  for (i in 1:N){
    log_lik[i] = bernoulli_lpmf((y[i] - 1) | p[i, 2]);
  }

}

После подгонки я могу извлечь логарифмическую вероятность, используя пакет loo:

log_lik_m <- extract_log_lik(stan_fit)

Но я хочу оценить вероятность регистрации невидимых данных. Это возможно в brms:

ll <- log_lik(fit_star, newdata = new_df)

Но я бы хотел сделать это с rstan, поскольку я не могу легко определить свою модель в brms (я предполагаю).

Для справки, я пытаюсь использовать Оценочное LFO-CV для оценки и сравнения моей модели временных рядов. (например, https://github.com/paul-buerkner/LFO-CV-paper/blob/master/sim_functions.R#L186)

(https://mc -stan.org / Лоо / статьи / loo2-lfo.html )

1 Ответ

0 голосов
/ 28 марта 2019

Благодаря ссылке от @dipetkov, я решил это сам. Я не использовал точные методы в ссылке , но предложил альтернативу. Вы можете вызывать функции stan из R, чтобы они вычисляли вероятность записи в журнал для вашей модели, даже с невидимыми данными (и это очень быстро!).

Сначала я поместил все в своем блоке transformed parameters в функцию в блоке functions в stan. Затем я создал вторую функцию, которая оборачивает первую функцию и оценивает логарифмическую вероятность для данных наблюдений и предоставляет оценки параметров (затем я удалил свой блок generated_quantities). rstan имеет функцию expose_stan_functions, которая добавляет все функции из блока stan functions в среду R.

Затем вы можете вызвать созданную вами функцию правдоподобия для оценки вашей модели с любыми наблюдениями (ранее замеченными или невидимыми) вместе с набором оценок параметров.

...