#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 )
Комментарии:
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. Было бы лучше, если бы вы могли прикрепить свой код.