广义双曲分布

广义双曲分布定义为以广义逆高斯分布为混合分布的正态方差-均值混合分布。“双曲线”特征是指对数概率分布的形状可以描述为双曲线的事实。双曲分布有时被称为半厚尾分布,因为它们的概率密度比“次双曲”分布(例如,其对数概率按二次曲线递减的正态分布)的下降速度慢,但比其他“极值”分布(例如,正态分布,其对数概率按二次曲线递减)要快。 pareto 分布,其对数概率对数下降)。

功能

文献中存在不同的参数化方法,本论文实现了Prause(1999)中的“第四个参数化方法”。

\BEGIN{eqnarray*} F(x,p,a,b)&=& \frac{(a^2-b^2)^{p/2}} {\sqrt{2\pi}a^{p-0.5} k_p\Big(\sqrt{a^2-b^2}\Big)} e^{bx}\次\frac{K_{p-1/2} (a\sqrt{1+x^2})} {(\sqrt{1+x^2})^{1/2-p}} \end{eqnarray*}

适用于:

  • \(x, p \in ( - \infty; \infty)\)

  • \(|b| < a\) if \(p \ge 0\)

  • \(|b| \le a\) if \(p < 0\)

  • \(K_{p}(.)\) denotes the modified Bessel function of the second kind and order \(p\) (scipy.special.kn)

上面的概率密度是以“标准化”形式定义的。若要移动和/或缩放分布,请使用 \(\text{{loc}}\)\(\text{{scale}}\) 参数。具体地说, \(f(x, p, a, b, \text{{loc}}, \text{{scale}})\) 等同于 \(\frac{{1}}{{\text{{scale}}}}f(y, p, a, b)\) 使用 \(y = \frac{{1}}{{\text{{scale}}}}(x - \text{{loc}})\)

此参数化派生自原始 \((\lambda, \alpha, \beta, \delta, \mu)\) Barndorff(1978)中的参数化设置为:

  • \(\lambda = p\)

  • \(\alpha = \frac{a}{\delta} = \frac{\hat{\alpha}}{\delta}\)

  • \(\beta = \frac{b}{\delta} = \frac{\hat{\beta}}{\delta}\)

  • \(\delta = \text{scale}\)

  • \(\mu = \text{location}\)

的随机变量 scipy.stats.genhyperbolic 可以有效地从上述正态方差-均值混合中采样,其中 scipy.stats.geninvgauss 被参数化为 \(GIG\Big(p = p, b = \sqrt{{\hat{{\alpha}}^2 - \hat{{\beta}}^2}}, \text{{loc}} = \text{{location}}, \text{{scale}} = \frac{{1}}{{\sqrt{{\hat{{\alpha}}^2 - \hat{{\beta}}^2}}}}\Big)\) 以便: \(GH(p, \hat{{\alpha}}, \hat{{\beta}}) = \hat{{\beta}} \cdot GIG + \sqrt{{GIG}} \cdot N(0,1)\)

“广义”特征暗示了这样一个事实,即该分布是几个其他概率分布的超类,例如:

  • \(f(p = -\nu/2, a = 0, b = 0, \text{{loc}} = 0, \text{{scale}} = \sqrt{{\nu}})\) 有一个学生的t分布 (scipy.stats.t )与 \(\nu\) 自由度。

  • \(f(p = 1, a = \hat{{\alpha}}, b = \hat{{\beta}}, \text{{loc}} = \mu, \text{{scale}} = \delta)\) 呈双曲线分布。

  • \(f(p = - 1/2, a = \hat{{\alpha}}, b = \hat{{\beta}}, \text{{loc}} = \mu, \text{{scale}} = \delta)\) 具有正态逆高斯分布 (scipy.stats.norminvgauss )。

  • \(f(p = 1, a = \delta, b = 0, loc = \mu, \text{scale} = \delta)\) has a Laplace Distribution (scipy.stats.laplace) for \(\delta \rightarrow 0\)

示例

了解这些参数如何影响分布的形状是很有用的。虽然解释…的含义相当简单 \(b\) 作为偏斜度,了解两者之间的区别 \(a\)\(p\) 不是很明显,因为两者都影响分布的峰度。 \(a\) 可以解释为概率密度的衰减速度(其中 \(a > 1\) 渐近衰减的速度比 \(log_e\) 反之亦然)或等效地作为对数概率双曲线渐近线的斜率(其中 \(a > 1\) 腐烂的速度比 \(|1|\) 反之亦然)。 \(p\) 可以看作是概率密度分布的肩部宽度(其中 \(p < 1\) 导致肩部变窄,反之亦然),或者等效地,作为对数概率双曲线的形状,其对于 \(p < 1\) 否则就是凹形的。

import numpy as np
from matplotlib import pyplot as plt
from scipy import stats

p, a, b, loc, scale = 1, 1, 0, 0, 1
x = np.linspace(-10, 10, 100)

# plot GH for different values of p
plt.figure(0)
plt.title("Generalized Hyperbolic | -10 < p < 10")
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        label = 'GH(p=1, a=1, b=0, loc=0, scale=1)')
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'red', alpha = 0.5, label='GH(p>1, a=1, b=0, loc=0, scale=1)')
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'red', alpha = 0.1) for p in np.linspace(1, 10, 10)]
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'blue', alpha = 0.5, label='GH(p<1, a=1, b=0, loc=0, scale=1)')
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'blue', alpha = 0.1) for p in np.linspace(-10, 1, 10)]
plt.plot(x, stats.norm.pdf(x, loc, scale), label = 'N(loc=0, scale=1)')
plt.plot(x, stats.laplace.pdf(x, loc, scale), label = 'Laplace(loc=0, scale=1)')
plt.plot(x, stats.pareto.pdf(x+1, 1, loc, scale), label = 'Pareto(a=1, loc=0, scale=1)')
plt.ylim(1e-15, 1e2)
plt.yscale('log')
plt.legend(bbox_to_anchor=(1.1, 1))
plt.subplots_adjust(right=0.5)

# plot GH for different values of a
plt.figure(1)
plt.title("Generalized Hyperbolic | 0 < a < 10")
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        label = 'GH(p=1, a=1, b=0, loc=0, scale=1)')
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'blue', alpha = 0.5, label='GH(p=1, a>1, b=0, loc=0, scale=1)')
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'blue', alpha = 0.1) for a in np.linspace(1, 10, 10)]
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'red', alpha = 0.5, label='GH(p=1, 0<a<1, b=0, loc=0, scale=1)')
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
        color = 'red', alpha = 0.1) for a in np.linspace(0, 1, 10)]
plt.plot(x, stats.norm.pdf(x, loc, scale),  label = 'N(loc=0, scale=1)')
plt.plot(x, stats.laplace.pdf(x, loc, scale), label = 'Laplace(loc=0, scale=1)')
plt.plot(x, stats.pareto.pdf(x+1, 1, loc, scale), label = 'Pareto(a=1, loc=0, scale=1)')
plt.ylim(1e-15, 1e2)
plt.yscale('log')
plt.legend(bbox_to_anchor=(1.1, 1))
plt.subplots_adjust(right=0.5)

plt.show()

参考文献

  • 正态方差-均值混合https://en.wikipedia.org/wiki/Normal_variance-mean_mixture

  • 广义双曲分布https://en.wikipedia.org/wiki/Generalised_hyperbolic_distribution

  • O.Barndorff-Nielsen,“双曲线分布和双曲线上的分布”,“斯堪的纳维亚统计杂志”,第5卷(3),第151-157页,1978年。https://www.jstor.org/stable/4615705

  • Eberlein E.,Prause K.(2002)“广义双曲模型:金融衍生工具与风险度量”。收录于:Geman H.,Madan D.,Pliska S.R.,Vorst T.(编辑)数学金融-学士大会,2000。斯普林格金融公司。斯普林格,柏林,海德堡。https://doi.org/10.1007/978-3-662-12429-1_12

  • 司各特,J,伍兹,迪特姆,董,克里斯汀和陈,谭恩美,(2009年),广义双曲线分布的矩,MPRA论文,慕尼黑大学类库,德国,https://EconPapers.repec.org/RePEc:pra:mprapa:19081.

实施: scipy.stats.genhyperbolic