Python 中的分析最高密度区间最好用于 Beta 分布

问题描述

我想知道是否有人知道可靠且快速的分析 HDI 计算,最好用于 beta 函数

HDI 的定义在 this question 中称为“最高后密度区域”。

我正在寻找具有以下 I/O函数

输入

  • credMass - 可信区间质量(例如,0.95 表示 95% 可信区间)
  • a - 形状参数(例如,HEADS 抛硬币的次数
  • b - 形状参数(例如,TAILS 抛硬币的次数

输出

  • ci_min - 最小质量界限(0.ci_max间的值)
  • ci_max - 最大质量界限(ci_min1.间的值)

一种方法是加速我发现的这个脚本 在 the same said question 中(改编自 R 到 Python)并取自 John K. Kruschke 的《Doing bayesian data analysis》一书)。我用过这个方案,很可靠,但是对于多次调用来说有点太慢了。 100 倍甚至 10 倍的加速将非常有帮助!

from scipy.optimize import fmin
from scipy.stats import *

def HdiofICDF(dist_name,credMass=0.95,**args):
    # freeze distribution with given arguments
    distri = dist_name(**args)
    # initial guess for HDIlowTailPr
    incredMass =  1.0 - credMass

    def intervalWidth(lowTailPr):
        return distri.ppf(credMass + lowTailPr) - distri.ppf(lowTailPr)

    # find lowTailPr that minimizes intervalWidth
    HDIlowTailPr = fmin(intervalWidth,incredMass,ftol=1e-8,disp=False)[0]
    # return interval as array([low,high])
    return distri.ppf([HDIlowTailPr,credMass + HDIlowTailPr])

使用

print HdiofICDF(beta,a=5,b=4)

注意!一些解决方案将此 HDI 与等尾间隔解决方案(所述问题称为“中央可信区域”)混淆,后者更容易计算,但不回答相同的问题。 (例如,参见 Kruschke 的 Why HDI and not equal-tailed interval?

此外,这个问题与我在 PyMC3 中看到的 MCMC 方法pymc3.stats.hpd(a),其中 a随机变量样本)无关,而是与解析解有关。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)