Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
非中心χ方形分佈(Noncentral Chi-Squared Distribution)

#include <boost/math/distributions/non_central_chi_squared.hpp>

namespace boost{ namespace math{ 

template <class RealType = double, 
          class Policy   = policies::policy<> >
class non_central_chi_squared_distribution;

typedef non_central_chi_squared_distribution<> non_central_chi_squared;

template <class RealType, class Policy>
class non_central_chi_squared_distribution
{
public:
   typedef RealType  value_type;
   typedef Policy    policy_type;

   // 構造函數:
   non_central_chi_squared_distribution(RealType v, RealType lambda);

   // 自由度(degree of freedom)參數v訪問函數(Accessor):
   RealType degrees_of_freedom()const;

   // 非中心(non centrality)參數lambda訪問函數(Accessor):
   RealType non_centrality()const;

   // 參數查找:
   static RealType find_degrees_of_freedom(RealType lambda, RealType x, RealType p);
   template <class A, class B, class C>
   static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c);
   
   static RealType find_non_centrality(RealType v, RealType x, RealType p);
   template <class A, class B, class C>
   static RealType find_non_centrality(const complemented3_type<A,B,C>& c);
};

}} // namespaces

非中心χ方形分佈(noncentral chi-squared distribution) 是χ方形分佈(Chi Squared Distribution)的一般化。如果 Xi 是 ν 相互獨立的,均值(mean)為μi,方差(variances)為 σi2的正規分佈的隨機變量,那麼隨機變量:

依照非中心χ方形分佈( noncentral chi-squared distributio)進行分佈。

非中心χ方形分佈( noncentral chi-squared distributio)有兩個參數:ν 指定自由度(degree of freedom)(也就是Xi的個數),λ 與隨機變量 Xi 的均值(mean)通過下面的等式聯繫起來:

(注意:一些資料中將λ 定義為上面和的一半)。

產生的PDF(概率分佈函數)函數為:

其中f(x;k) 是中心χ方形分佈PDF函數(central chi-squared distribution PDF),而Iv(x) 第一類修正貝賽爾函數( Bessel function)。

下面的圖像顯示了對於不同的λ值,分佈是如何變化的:

成員函數
non_central_chi_squared_distribution(RealType v, RealType lambda);

使用自由度(degree of freedom)v 和非中心參數(non-centrality parameter)lambda來構造一個非中心χ方形分佈(Noncentral Chi-Squared Distribution)。

要求 v > 0 且 lambda >= 0,否則調用定義域錯誤

RealType degrees_of_freedom()const;

返回構造分佈的參數v

RealType non_centrality()const;

返回構造分佈的參數lambda

static RealType find_degrees_of_freedom(RealType lambda, RealType x, RealType p);

這個函數返回自由度( degrees of freedom )v滿足:cdf(non_central_chi_squared<RealType, Policy>(v, lambda), x) == p

template <class A, class B, class C>
static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c);

當使用boost::math::complement(lambda, x, q) 參數來調用這個函數的時候,這個函數返回自由度(degree of freedom)v 滿足:

cdf(complement(non_central_chi_squared<RealType, Policy>(v, lambda), x)) == q.

static RealType find_non_centrality(RealType v, RealType x, RealType p);

這個函數返回非中心參數( non centrality parameter) lambda 滿足:

cdf(non_central_chi_squared<RealType, Policy>(v, lambda), x) == p

template <class A, class B, class C>
static RealType find_non_centrality(const complemented3_type<A,B,C>& c);

當使用boost::math::complement(v, x, q) 參數來調用這個函數的時候,這個函數返回非中心參數( non centrality parameter) lambda 滿足:

cdf(complement(non_central_chi_squared<RealType, Policy>(v, lambda), x)) == q.

非成員訪問函數(Non-member Accessors)

支持所有的分佈都通用的 常見的非成員訪問函數累積分佈函數(Cumulative Distribution Function)概率密度函數(Probability Density Function)分位點(Quantile)故障率函數(Hazard Function)累積危險函數(Cumulative Hazard Function)均值(mean)中位數(median)眾數(mode)方差(variance)標準差(standard deviation)偏斜(skewness)峰態(kurtosis)峰態超越(kurtosis_excess)值域(range) 以及 支持(support)

隨機變量的定義域為: [0, +∞]。

例子

非中心χ方形分佈( noncentral chi-squared distribution)有一個可執行的例子

精確度

下面的表顯示了在不同的平台上使用不同的浮點類型的峰值誤差(peak error)(單位為10的-5次方(epsilon)),以及與R-2.5.1 Math library庫的比較。除非另外指定,任何的比這裡顯示的浮點類型更窄的浮點類型具有有效零誤差(effectively zero error)

表4.非中心χ方形分佈( Noncentral Chi-Squared)的CDF函數的誤差

有效數字位數

平台和編譯器

ν,λ < 200

ν,λ > 200

53

Win32, Visual C++ 8

峰值=50 均值=9.9

R 峰值=685 均值=109

峰值=9780 均值=718

R 峰值=3x108 均值=2x107

64

RedHat Linux IA32, gcc-4.1.1

峰值=270 均值=27

峰值=7900 均值=900

64

Redhat Linux IA64, gcc-3.4.4

峰值=107 均值=17

峰值=5000 均值=630

113

HPUX IA64, aCC A.06.06

峰值=270 均值=20

峰值=4600 均值=560


CDF函數的補集與分位點(quantile)函數的誤差率大體上是相同的。需要特別提及一下眾數(mode)函數: 這個分佈並沒有閉型(closed form),因此眾數是通過在數值上查找PDF函數的最大值來計算的:在原理上,這無法產生一個比machine epsilon的平方根更高的精確度。

測試

有兩種類別的測試數據來驗證這個庫的實現:首先我們與發表的數據(published data)進行比較,例如與表6"Self-Validating Computations of Probabilities for Selected Central and Noncentral Univariate Probability Functions", Morgan C. Wang and William J. Kennedy, Journal of the American Statistical Association, Vol. 89, No. 427. (Sep., 1994), pp. 878-887。然後,我們有多個表的數據,使用這個庫以及使用區間算術進行計算-這些數據的精度至少為50個十進制數字-被用於我們的精度測試。

實現

CDF函數以及其補集使用下面的方法計算:

首先我們判定這個兩個值(CDF 或其補集( complement )) 哪一個更小一些:對於這一點我們可以使用Temme發明的關係式(參考"Asymptotic and Numerical Aspects of the Noncentral Chi-Square Distribution", N. M. Temme, Computers Math. Applic. Vol 25, No. 5, 55-63, 1993) :

F(ν,λ;ν+λ) ≒ 0.5

因此,當隨機變量小於ν+λ時計算 CDF,當隨機變量大於ν+λ時計算它的補集。如果需要的話,然後用1減去計算的結果來獲得期望的結果(CDF或其補集(complement))。

對於較小值的非中心變量(non centrality parameter),使用Ding方法(method of Ding)來計算CDF (參考"Algorithm AS 275: Computing the Non-Central #2 Distribution Function", Cherng G. Ding, Applied Statistics, Vol. 41, No. 2. (1992), pp. 478-482). 使用下面的級數表示:

這只需要調用gamma_p_derivative 一次,後面的項可以通過上面顯示的遞歸關係來計算。

對於較大值的非中心變量(non centrality parameter),在達到收斂(convergence)之前,Ding方法(Ding's method) 會帶有不合理數量的項。更進一步,最大的項不是第一項,因此在極端情況下,第一項可能是0,即使真值(true value)不為0,也會導致產生為0的結果。

因此,當非中心參數(non-centrality parameter)大於200時,使用由 Krishnamoorthy發明的算法 (參考"Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", Denise Benton and K. Krishnamoorthy, Computational Statistics & Data Analysis, 43, (2003), 249-267) :

這個算法使用著名的求和公式 :

其中 Pa(x) 是不完全γ函數。

這種算法從第λth 項開始,泊松權重函數( Poisson weighting function)在這一項處達到它的極大值,雖然這並不一定是總體最大項(largest overall term)。後面的項用不完全γ函數的一般遞歸關係(normal recurrence relations)來計算,迭代從向前和向後兩個方向進行直到達到足夠的精度。應當指出的是:Pa(x)在幾前方向上的迭代在數值上是不穩定的。然而,因為我們永遠都從都中的最大項之後 開始,數值不穩定性( numeric instability )的引入(introduced)比級數的收斂更慢。

CDF補集(complement)的計算使用擴展的 Krishnamoorthy方法,給定:

我們又可以從第λ'th 項開始並且在兩個方向上進行直到達到足夠的精度。這一次在不完全γ函數Qa(x)的向後遞歸上是不穩定的。然而,因為我們從最大項之前開始計算,所在,在實際中這不是一個問題。

函數PDF直接使用下面的關係計算:

其中f(x; v) 是中心χ方形分佈(Chi Squared Distribution) 的PDF函數,並且Iv(x) 是修正貝賽爾函數( Bessel function), 參考cyl_bessel_i。對於較小的非中心參數( non-centrality parameter),使用cyl_bessel_i 函數中的關係。然而,對於較大的非中心參數( non-centrality parameter)這種方法會導致失敗,因此,在這種情況下無窮和(infinite sum)使用 Benton 和 Krishnamoorthy方法來計算,, 以及對於連續項(successive term)的一般遞歸關係(usual recurrence relations)。

分位點(quantile)函數使用數值版本的CDF反函數( numeric inversion of the CDF)。

對於非中心χ方形分佈( noncentral chi-squared distribution )的眾數(mode)沒有閉型(closed form) :它們通過在數值上查找函數PDF的極大值來計算的。類似地,中位數(median)是在數值上(numerically)使用分位點(quantile)函數來計算的。

剩下的非成員函數使用下面的方程式:

非中心分佈( noncentral distributions)的一些解析屬性(analytic propertiees) (特別是眾數的單峰( unimodality ),以及 單翟(monotonicity)) 由:

Andrea van Aubel & Wolfgang Gawronski, Applied Mathematics and Computation, 141 (2003) 3-12.

調查和總結。


PrevUpHomeNext