Оценка логарифмической вероятности появления невидимых данных в rstan

#r #bayesian #stan #rstan #log-likelihood

#r #байесовский #stan #rstan #логарифмическая вероятность

Вопрос:

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

 ...

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/loo/articles/loo2-lfo.html )

Комментарии:

1. Один из методов описан в этом сообщении: medium.com/@alex.pavlakis / … : Вы можете написать другую программу Stan, содержащую только блоки data и generated quantities , где data содержатся уже оцененные апостериорные распределения.

Ответ №1:

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

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

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

Комментарии:

1. Было бы лучше, если бы вы могли прикрепить свой код.