ベータ二項cdf、sf、ppfで使用する一般化された超幾何関数を実装する方法は?
私はscipy.stats._distn_infrastructure.rv_discreteそのPMFがベータ二項分布のサブクラスを書いています P(X=k∣N,α,β)(Nk)B(k+α,N−k+β)B(α,β),P(X=k∣N,α,β)(Nk)B(k+α,N−k+β)B(α,β),P(X=k \mid N, \alpha, \beta){N \choose k} \frac{\mathrm{B}(k+\alpha,N-k+\beta)}{\mathrm{B}(\alpha,\beta)}, ここで、BB\mathrm{B}はベータ関数です。私のCDFとSF(生存関数、1-CDFに相当)の現在の実装は不正確です。私が採用した戦略は、ベータ成分に関して二項累積分布関数の期待値を計算します。 PBB(X≤k∣N,α,β)=Ep[PBinom(X≤k∣N,p)],PBB(X≤k∣N,α,β)=Ep[PBinom(X≤k∣N,p)],P_{BB}(X \le k \mid N, \alpha, \beta) = E_p\left[P_{Binom}(X \le k \mid N, p)\right], where p∼Beta(α,β)p∼Beta(α,β)p \sim \mathrm{Beta}(\alpha, \beta)。私scipy.stats.beta.expectは、本来はベクトル化されていないメソッドを使用してこれを実現しています(floatまたは0d配列以外ではクラッシュします)。 PPFはさらに悪くなる-それは、ブルートフォース整数をループだk=0,…,Nk=0,…,Nk=0, \ldots, Nよう P(X≤k∣N,α,β)≤q.P(X≤k∣N,α,β)≤q.P(X\le k \mid N, \alpha, \beta) \le q. ウィキペディアによると、ベータ二項分布の生存関数は P(X>k∣N,α,β)=B(β+n−k−1,α+k+1)3F2(a,b;k)B(α,β)B(n−k,k+2)(n+1),P(X>k∣N,α,β)=B(β+n−k−1,α+k+1)3F2(a,b;k)B(α,β)B(n−k,k+2)(n+1),P(X > k \mid N, \alpha, \beta) = \frac{\mathrm{B}(\beta+n-k-1,\alpha+k+1)_3F_2(\boldsymbol{a},\boldsymbol{b};k)} …