Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

逆卡方分布

#include <boost/math/distributions/inverse_chi_squared.hpp>
namespace boost{ namespace math{

template <class RealType = double,
          class Policy   = policies::policy<> >
class inverse_chi_squared_distribution
{
public:
   typedef RealType value_type;
   typedef Policy   policy_type;

   BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df = 1); // Not explicitly scaled, default 1/df.
   BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df, RealType scale = 1/df);  // Scaled.

   BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const; // Default 1.
   BOOST_MATH_GPU_ENABLED RealType scale()const; // Optional scale [xi] (variance), default 1/degrees_of_freedom.
};

}} // namespace boost // namespace math

逆卡方分布是一个连续概率分布,它表示服从卡方分布的变量的倒数

以下来源给出了令人困惑的不同公式,使用了不同的符号来表示分布的概率密度函数 (pdf),但它们都是相同的,或者通过变量的更改或尺度的选择而相关。

提供了两个构造函数来实现缩放版本和(隐式)未缩放版本。

主要版本具有显式的尺度参数,它实现了缩放逆卡方分布

第二个版本具有隐式尺度 = 1/自由度,并给出了维基百科逆卡方分布中的第一个定义。第二个维基百科逆卡方分布定义可以通过显式指定尺度 = 1 来实现。

这两个定义在Wolfram MathematicaR 统计计算项目 (geoR) 中也可用,默认尺度 = 1/自由度。

参见

逆卡方分布用于贝叶斯统计:缩放逆卡方分布是均值已知,模型参数 σ² (方差) 的正态分布的共轭先验分布。

参见 共轭先验分布,包括分布及其先验分布的表格。

另请参见 逆伽玛分布卡方分布

逆卡方分布是逆伽玛分布的特例,其中 ν (自由度) 为形状 (α),尺度 (β) 为:

α= ν /2 且 β = ½

[Note] 注意

此分布确实提供了 typedef

typedef inverse_chi_squared_distribution<double> inverse_chi_squared;

如果您想要 double 精度逆卡方分布,您可以使用

boost::math::inverse_chi_squared_distribution<>

或者您可以编写 inverse_chi_squared my_invchisqr(2, 3);

对于自由度参数 ν,(未缩放) 逆卡方分布由概率密度函数 (PDF) 定义:

f(x;ν) = 2-ν/2 x-ν/2-1 e-1/2x / Γ(ν/2)

和累积密度函数 (CDF):

F(x;ν) = Γ(ν/2, 1/2x) / Γ(ν/2)

对于自由度参数 ν 和尺度参数 ξ,缩放逆卡方分布由概率密度函数 (PDF) 定义:

f(x;ν, ξ) = (ξν/2)ν/2 e-νξ/2x x-1-ν/2 / Γ(ν/2)

和累积密度函数 (CDF):

F(x;ν, ξ) = Γ(ν/2, νξ/2x) / Γ(ν/2)

以下图表说明了逆卡方分布的 PDF 和 CDF 如何随参数 ν 和 ξ 的几个值而变化

成员函数
BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df = 1); // Implicitly scaled 1/df.
BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df = 1, RealType scale); // Explicitly scaled.

构造具有 ν 自由度 df 和尺度 scale 的逆卡方分布,默认值为 1/df。

要求自由度 ν 参数大于零,否则调用 domain_error

BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const;

返回此分布的 degrees_of_freedom ν 参数。

BOOST_MATH_GPU_ENABLED RealType scale()const;

返回此分布的 scale ξ 参数。

非成员访问器

支持所有分布通用的常用非成员访问器函数累积分布函数, 概率密度函数, 分位数, 风险函数, 累积风险函数, __logcdf, __logpdf, 均值, 中位数, 众数, 方差, 标准差, 偏度, 峰度, 超额峰度, 范围支持。 对于此分布,所有非成员访问器函数都标记为 BOOST_MATH_GPU_ENABLED,并且可以在主机和设备上运行。

随机变量的域是 [0,+∞]。

[Note] 注意

与某些定义不同,此实现支持随机变量等于零作为特殊情况,对于 pdf 和 cdf 都返回零。

精度

逆伽玛分布是根据不完全伽玛函数实现的,例如 逆伽玛分布,它使用 gamma_pgamma_q 及其反函数 gamma_p_invgamma_q_inv:有关更多信息,请参阅这些函数的精度数据。 但总的来说,伽玛(以及因此的逆伽玛)结果通常精确到几个 epsilon,对于 64 位双精度浮点数,精度 > 14 位十进制数字。 除非涉及迭代,例如自由度的估计。

实现

在下表中,ν 是自由度参数,ξ 是分布的尺度参数,x 是随机变量,p 是概率,q = 1-p 是其补数。 参数 α 表示形状,β 表示尺度,用于逆伽玛函数:α = ν/2 且 β = ν * ξ/2。

函数

实现说明

pdf

使用关系式:pdf = gamma_p_derivative(α, β/ x, β) / x * x

cdf

使用关系式:p = gamma_q(α, β / x)

cdf 补数

使用关系式:q = gamma_p(α, β / x)

分位数

使用关系式:x = β/ gamma_q_inv(α, p)

来自补数的分位数

使用关系式:x = α/ gamma_p_inv(α, q)

众数

ν * ξ / (ν + 2)

中位数

没有已知的闭式解析方程,但评估为 quantile(0.5)

均值

对于 ν > 2,为 νξ / (ν - 2),否则为 domain_error

方差

对于 ν >4,为 2 ν² ξ² / ((ν -2)² (ν -4)),否则为 domain_error

偏度

对于 ν >6,为 4 √2 √(ν-4) /(ν-6),否则为 domain_error

超额峰度

对于 ν >8,为 12 * (5ν - 22) / ((ν - 6) * (ν - 8)),否则为 domain_error

峰度

对于 ν >8,为 3 + 12 * (5ν - 22) / ((ν - 6) * (ν-8)),否则为 domain_error

参考文献
  1. 贝叶斯数据分析,Andrew Gelman, John B. Carlin, Hal S. Stern, Donald B. Rubin, ISBN-13: 978-1584883883, Chapman & Hall; 第 2 版 (2003 年 7 月 29 日)。
  2. R 语言贝叶斯计算,Jim Albert, ISBN-13: 978-0387922973, Springer; 第 2 版 (2009 年 6 月 10 日)

PrevUpHomeNext