2

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

HDI的定义在这个称为“最高后密度区域”的问题中。

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

输入

  • credMass- 可信区间质量(例如,0.9595% 可信区间)
  • a- 形状参数(例如,HEADS 硬币投掷次数)
  • b- 形状参数(例如,TAILS 掷硬币的次数)

输出

  • ci_min- 质量的最小界限(到 之间0.的值ci_max
  • ci_max- 质量的最大界限(到 之间ci_min的值1.

解决这个问题的一种方法是加速我在同一个问题中找到的这个脚本(从 R 改编为 Python),并取自 John K. Kruschke 的《做贝叶斯数据分析》一书)。我用过这个解决方案,相当可靠,但是多次调用有点太慢了。加速 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, credMass=0.95, a=5, b=4)

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

此外,这个问题不涉及我在 PyMC3 中看到的 MCMC 方法(pymc3.stats.hpd(a)其中a是随机变量样本),而是涉及分析解决方案。

谢谢!

4

0 回答 0