Julia 计算并绘制分布中分布的中心可信区间和最高后验密度区间。jl

Julia 计算并绘制分布中分布的中心可信区间和最高后验密度区间。jl,julia,plots.jl,julia-plots,Julia,Plots.jl,Julia Plots,我想(I)计算和(ii)绘制Distributions.jl库中分布的中心可信区间和最高后验密度区间。 理想情况下,可以编写自己的函数来计算CI和HPD,然后使用Plots.jl来绘制它们。然而,我发现实现相当棘手(免责声明:我对Julia是新手)。 关于图书馆/GIST/repo,有什么建议可以让计算和绘图变得更容易吗 上下文 using Plots, StatsPlots, LaTeXStrings using Distributions dist = Beta(10, 10) plot(

我想(I)计算和(ii)绘制Distributions.jl库中分布的中心可信区间和最高后验密度区间。 理想情况下,可以编写自己的函数来计算CI和HPD,然后使用Plots.jl来绘制它们。然而,我发现实现相当棘手(免责声明:我对Julia是新手)。 关于图书馆/GIST/repo,有什么建议可以让计算和绘图变得更容易吗

上下文

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页,共页

迄今发现的资源:

  • :但使用PyPlot


    • 感谢您更新问题;它带来了一个新的视角

      要点有点正确;只是它使用了茱莉亚的早期版本。 因此,应将
      linspace
      替换为
      LinRange
      。不要使用PyPlot而使用
      使用Plot
      。 我会将绘图部分更改为以下内容:

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

      乍一看,CI的计算似乎是正确的。(就像封闭的Limelike曲线的答案或问题[there][1]的答案一样)。对于HDP,我同意闭合的Limelike曲线。只有我要补充的是,您可以在gist代码的基础上构建HDP函数。我也会有一个版本的后部与已知的分布(如在您的参考文件第33页,图2.2),因为您不需要样品。另一种是显示了类似于闭合的石灰样曲线的采样。

      您正在寻找ArviZ.jl,以及Turing.jl的McMcMcChains。MCMCChains将为您提供非常基本的绘图功能,例如,根据每条链估算的PDF绘图。jl(Python ArviZ包的包装器)添加了更多的情节。

      OP编辑了这个问题,所以我给出了一个新的答案

      对于中心可信区间,答案很简单:取每个点的分位数:

      lowerBound = quantile(Normal(0, 1), .025)
      upperBound = quantile(Normal(0, 1), .975)
      
      这将给你一个区间,
      x
      的概率低于下限.025,同样的,上限的概率加起来是.05

      HPD更难计算。此外,它们往往不太常见,因为它们有一些中央可信区间不共享的奇怪属性。最简单的方法可能是使用蒙特卡罗算法。使用
      randomSample=rand(正态(0,1,2^12)
      从正态分布中提取
      2^12
      样本。(或者,无论您想要多少样本,越大的结果越准确,受随机机会的影响越小。)然后,对于每个随机点,使用
      pdf.(randomSample)
      评估该随机点的概率密度。然后,选取概率密度最高的95%点;包括最高密度间隔中的所有这些点,以及它们之间的任何点(我假设您处理的是与正态分布类似的单模式分布)


      对于正态分布,有更好的方法可以做到这一点,但它们更难概括。

      嗨,史蒂夫,我把问题的范围缩小到只包括分布。jl分布嗨,史蒂夫,这完全回答了我的问题-非常感谢你的帮助!我认为OP想学习如何自己编写代码。非常感谢你的回答!