Вычислите и постройте центральные надежные и самые высокие интервалы задней плотности для распределений в распределениях.jl

#julia #plots.jl #julia-plots

Вопрос:

Я хотел бы (i) вычислить и (ii) построить центральный вероятный интервал и самые высокие интервалы задней плотности для распределения в распределениях.библиотека jl. В идеале можно написать собственную функцию для вычисления CI и HPD, а затем использовать Plots.jl для их построения. Тем не менее, я нахожу реализацию довольно сложной (отказ от ответственности: Я новичок в Джулии). Есть какие-либо предложения по библиотекам/gist/репозиториям, которые можно проверить, чтобы упростить их вычисления и построение графиков?

Контекст

 using Plots, StatsPlots, LaTeXStrings
using Distributions

dist = Beta(10, 10)
plot(dist)  # thanks to StatsPlots it nicely plots the distribution

# missing piece 1: compute CI and HPD
# missing piece 2: plot CI and HPD
 

Ожидаемый конечный результат, обобщенный на изображении ниже или на стр. 33 BDA3.

введите описание изображения здесь

Ресурсы, найденные до сих пор:

Ответ №1:

Спасибо за обновление вопроса; это открывает новую перспективу.

Суть в некотором роде верна; только в ней используется более ранняя версия Джулии. Следовательно linspace , следует заменить на LinRange . Вместо using PyPlot использования using Plots . Я бы изменил часть построения на следующую:

 plot(cred_x, pdf(B, cred_x), fill=(0, 0.9, :orange))
plot!(x,pdf(B,x), title="pdf with 90% region highlighted")
 

На первый взгляд, вычисление CI кажется правильным. (Например, ответ из Замкнутых кривых, похожих на Лимбы, или ответ из вопроса [там][1]). Что касается HDP, я согласен с Замкнутыми кривыми, похожими на Лимбы. Только я бы добавил, что вы могли бы построить свою функцию HDP на основе кода gist. У меня также была бы версия для posterior с известным дистрибутивом (как в вашем справочном документе, стр. 33, рис. 2.2), поскольку вам не нужно пробовать. И еще один с выборкой, похожей на Замкнутые кривые, похожие на Известь.

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

1. Привет, Стив, я сократил объем своего вопроса, включив в него только дистрибутивы.jl дистрибутивы

2. Привет, Стив, это полностью ответило на мой вопрос — большое спасибо за вашу помощь!

Ответ №2:

ОП отредактировал вопрос, поэтому я даю новый ответ.

Для центральных достоверных интервалов ответ довольно прост: возьмите квантили в каждой точке:

 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% точек с наибольшей плотностью вероятности; включите все эти точки в интервал наибольшей плотности и любые точки между ними (я предполагаю, что вы имеете дело с одномодовым распределением, подобным нормальному).

Есть лучшие способы сделать это для нормального распределения, но их труднее обобщить.

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

1. Большое спасибо за ваш ответ!

Ответ №3:

Вы ищете ArviZ.jl вместе с Тьюрингом.MCMCChains Джей Эл. MCMCChains предоставит вам очень простые возможности построения графиков, например, график PDF, оцененный по каждой цепочке. ArviZ.jl (оболочка вокруг пакета Python ArviZ) добавляет гораздо больше сюжетов.

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

1. Я думаю, что ОП хочет научиться кодировать его самостоятельно..