Compute central credible and highest posterior density intervals in Julia
I would like to plot the central credible interval and the highest posterior density intervals for a distribution. Ideally, this can be easily achieved using Distributions.jl and Plots.jl, however I'm finding the implementation quite tricky (disclaimer: I'm new to Julia). Any suggestions?
End results I'd like to achieve is at p. 33 of BDA3.
Resources found so far:
- [gist](https://gist.github.com/ahwillia/59af6ad67021a4b91fd5]: uses PyPlot, though
3 ответа
Для байесовского анализа данных я бы заглянул в Turing.jl. Вы получите возможность построить график распределения и поработать над другими аспектами анализа.
Учебники https://turing.ml/dev/tutorials/0-introduction/ , вероятно, хорошее место для начала. (Основная ссылка дает «Страница не найдена»).
OP отредактировал вопрос, поэтому я даю новый ответ.
Для центральных достоверных интервалов ответ довольно прост: возьмите квантили в каждой точке:
lowerBound = quantile(Normal(0, 1), .025)
upperBound = quantile(Normal(0, 1), .975)
Это даст вам интервал, в котором вероятность
x
лежащая ниже нижней границы 0,025, и аналогично для верхней границы, в сумме до 0,05.
HPD рассчитать сложнее. Кроме того, они, как правило, менее распространены, потому что обладают некоторыми странными свойствами, которые не разделяются центральными достоверными интервалами. Самый простой способ сделать это, вероятно, - использовать алгоритм Монте-Карло. Использовать
randomSample = rand(Normal(0, 1), 2^12)
рисовать
2^12
образцы из нормального распределения. (Или, сколько выборок вам нужно, больше дает более точные результаты, на которые в меньшей степени влияет случайный случай.) Затем для каждой случайной точки оцените плотность вероятности в этой случайной точке, используя
pdf.(randomSample)
. Затем выберите 95% точек с наибольшей плотностью вероятности; включите все эти точки в интервал наивысшей плотности и любые точки между ними (я предполагаю, что вы имеете дело с одномодовым распределением, таким как нормальное).
Есть более эффективные способы сделать это для нормального распределения, но их труднее обобщить.
Вы ищете ArviZ.jl вместе с MCMCChains Turing.jl. MCMCChains предоставит вам очень простые возможности построения графиков, например, график PDF, оцененный для каждой цепочки. ArviZ.jl (оболочка пакета Python ArviZ) добавляет намного больше графиков.