ベルヌーイ確率変数の合計を効率的にモデル化するにはどうすればよいですか?


38

YXipiY=XiPr(Xi=1)=piPr(Xi=0)=1pi

Pr(Y<=k)kが指定されている)などのクエリにすばやく応答することに興味があります。

現在、私はそのような質問に答えるためにランダムシミュレーションを使用しています。p_iに従って各X_iをランダムに描画Xiし、すべてのX_i値を合計してY 'を取得します。このプロセスを数千回繰り返し、時間の小数部分\ Pr(Y '\ leq k)を返します。piXiYPr(Yk)

明らかに、これは完全に正確ではありません(ただし、シミュレーションの数が増えると精度は大幅に向上します)。また、使用シミュレーションを回避するのに十分な分布に関するデータがあるようです。正確な確率\ Pr(Y \ leq k)を取得する合理的な方法を考えることができますPr(Yk)か?

PS

PerlとRを使用しています。

編集

回答に続いて、私はいくつかの説明が必要かもしれないと思った。問題の設定について簡単に説明します。円周cnそれにマッピングされた一連の範囲を持つ円形ゲノムが与えられます。たとえば、c=3*10^9およびranges={[100,200],[50,1000],[3*10^9-1,1000],...}。すべての範囲が閉じていることに注意してください(両端が含まれます)。また、整数(全体の単位)のみを扱うことに注意してください。

特定のnマッピング範囲で覆われている円上の領域を探しています。したがってx、円上の与えられた長さの範囲がカバーされているかどうかをテストするために、n範囲がランダムにマッピングされるという仮説をテストします。マッピングされた長さの範囲が指定された長さの範囲をq>x完全にカバーする確率x(q-x)/cです。この確率cは、大きい場合や小さい場合に非常に小さくなりますq。私が興味を持っているのは、nをカバーする範囲の数(範囲外)xです。これがY形成される方法です。

帰無仮説と片側の代替(アンダーカバー)をテストします。また、複数の仮説(異なるx長さ)をテストしていることにも注意してください。これを必ず修正してください。


p_iは、モデリングの演習全体で修正されていますか、それとも計算ごとに変更できますか?
whuber

p_isが固定されています。
デビッドB

現在の回答に照らして、(a)pの合計と(b)それらの二乗の合計の推定値を共有できますか?これらの値によってオプションが決まります。
whuber

@whuber:これらはケースによって大きく異なります。(残念ながら)私が作成している1回限りのモジュールではありません。
デビッドB

@Davidしかし、典型的な範囲などのガイダンスを提供できませんか?たとえば、pの合計が1から100の範囲にある場合、それは有用な情報であり、いくつかの効率的なソリューションを提案しますが、最大10,000まで取得できる場合は、いくつかのアプローチを除外できます。
whuber

回答:


24

ポアソンによく似ている場合は、パラメーターを使用してポアソンで近似しようとしましたか?λ=pi

編集:これを正当化する理論的な結果との分布の名前を見つけました:それはポアソン二項分布と呼ばれています。Le Camの不等式は、その分布がパラメーターをもつポアソンの分布によってどの程度近似されるかを示します。Steele(1994)を換言すると、このの品質は sの平方和によって支配されていることがます。したがって、すべてのが合理的に小さい場合、現在はそうであるように、かなり良い近似値になります。λ = Σ P I P I P IYλ=pipipi

編集2:「合理的に小さい」とはどれくらい小さいですか?まあ、それはあなたがどの程度近似する必要があるかによって異なります!ルカムの定理上のWikipediaの記事は、私が先に言及し、結果の正確な形を与えない:間の絶対差の和の確率質量関数の(PMF)とポアソン上記分布のPMFは、二回の合計以下でありますの正方形の。Le Cam(1960)の別の結果は使いやすいかもしれません:この合計は最大の 18倍以下です。そのような結果はかなり多くあります。1つのレビューについてはSerfling(1978)を参照してください。p i p iYpipi


1
+1悪い考えではありません。質問の明確化方法によっては、ポアソンの小さな混合物が良い仕事をする可能性があります。
whuber

1
私は、ガンマ-ポアソン混合として生じる負の二項分布を提案することを考えましたが、それは平均よりも大きい分散を持ち、この問題は平均よりも小さい分散を持ちます。それに基づいて、ポアソンの混合物が機能するかどうかはわかりません、そのような混合物は確かにその分散がその平均よりも大きいでしょうか?
ワンストップ

@onestop分散が平均より小さいとはどこで言われましたか?私はその声明を逃しました。
whuber

すみません、それは少し不可解でしたが、これらのコメントはそれほど詳細な説明を許可していません。mpiktasのは分散で、平均よりも小さいです。ただし、が平均して非常に小さい場合はわずかに小さいため、標準のポアソンで十分です。上記の答えを拡張する必要があるかもしれませんが、その後、会話スレッドは混乱します。p i p iBn=pi(1pi)pipi
ワンストップ

とはどういう意味ですか?値を取得するにはどうすればよいですか?X iXiXi
デビッドB

11

この問題の解決策を探しているときに、あなたの質問に出会いました。私はここでの答えにひどく満足していませんでしたが、正確な分布を提供し、非常に扱いやすい非常に簡単な解決策があると思います。

2つの離散確率変数の合計の分布は、それらの密度の畳み込みです。したがって、とを知っているがある場合、次のように計算できます。P X P Y Z=X+YP(X)P(Y)

P(Z=z)=k=P(X=k)P(Y=zk)

(もちろん、ベルヌーイ確率変数の場合、無限に大きく移動する必要はありません。)

これを使用して、RVの合計の正確な分布を見つけることができます。まず、PDFを畳み込んで2つのRVを合計します(例:[0.3、0.7] * [0.6、0.4] = [0.18、0.54、0.28])。次に、新しい分布を次のベルヌーイPDFと畳み込みます(例:[0.18、0.54、0.28] * [0.5、0.5] = [0.09、0.36、0.41、0.14])。すべてのRVが追加されるまでこれを繰り返してください。そして出来上がり、結果のベクトルはすべての変数の合計の正確なPDFです。

これが正しい結果を生成することをシミュレーションで検証しました。漸近的な仮定に依存せず、ベルヌーイ確率が小さいという要件はありません。

また、これを繰り返したたみ込みよりも効率的に行う方法もあるかもしれませんが、あまり深く考えていません。これが誰かに役立つことを願っています!


2
40K変数でこれを試しましたか?(計算に何時間または何日かかるのだろう...)
whuber

5
(+1)このアイデアを機能させる方法を見つけました。次の2つの手法が必要です。最初に、畳み込みにFFTを使用します。第二に、それらを順番に行わず、分割して征服します:それらを互いに素なペアで行い、次に結果を互いに素なペアなどで行います。アルゴリズムは現在、ではなくとしてスケーリングし以下のためのの確率。たとえば、Mathematicaはわずか0.4秒で40,000の確率の分布全体を計算できます。(1,000,000は10.5秒で計算されます。)フォローアップコメントでコードを提供します。O n 2nO(nlogn)O(n2)n
whuber

7
ここだMathematicaのコードは:multinomial[p_] := Module[{lc, condense}, lc = Function[{s}, ListConvolve[s[[1]], s[[2]], {1, -1}, 0]]; condense = Function[{s}, Map[lc, Partition[s, 2, 2, {1, 1}, {{1}}]]]; Flatten[NestWhile[condense, Transpose[{1 - p, p}], Length[#] > 1 &]]] ような何かを、それを適用しますp = RandomReal[{0, 1}, 40000]; pp = multinomial[p];。これにより、確率が作成され、p正確な分布が計算されppます。 NBの平均がp極端でない場合、分布は正規に非常に近くなります。これにより、アルゴリズムがさらに高速になります。
whuber

9

@onestopは適切なリファレンスを提供します。ポアソン二項分布に関するウィキペディアの記事は、正確な確率分布を計算するための再帰式を提供しています。それが必要での努力を。残念ながら、これは交互の合計であるため、数値的に不安定になります。この計算を浮動小数点演算で行うことは絶望的です。幸いなことに、が小さい場合、計算する必要があるのは少数の確率だけなので、努力は実際に比例し。合理的な算術で計算を実行するために必要な精度(つまり、数値の不安定性が問題にならないように正確に)は、全体のタイミングがまだ約p i O n log i p iO n 2O(n2)piO(nlog(ipi))O(n2)。それは実現可能です。

テストとして、からまでのさまざまな値確率配列を作成しました。これはこの問題のサイズです。値が小さい場合(最大)、確率の正確な計算のタイミングは秒単位であり、2次でスケーリングされたため、計算を上記の3つのSD平均(0、1、...、22の成功の確率)。予測時間に合わせて、80分かかりました(Mathematica 8を使用)。(結果の確率は、分子と分母がそれぞれ約75,000桁の分数です!)これは、計算が可能であることを示しています。n n = 2 16 n n = 2 12 n = 2 16pi=1/(i+1)nn=216nn=212n=216

別の方法は、長いシミュレーションを実行することです(100万回の試行が必要です)。は変更されないため、一度だけ実行する必要があります。pi


9

(これは、私が投稿したものを含め、投稿された他のソリューションとは独立したアプローチであるため、個別の回答として提供しています)。

pの合計が小さい場合、正確な分布を秒(またはそれ以下)で計算できます。

分布は、ほぼガウス分布(一部のシナリオでは)またはポアソン(他のシナリオでは)である可能性があるという提案を見てきました。いずれにしても、その平均はの合計であり、その分散は合計です。従って分布がその平均値の数の標準偏差内で濃縮され、言う用いたSDS 4および6またはその近傍との間を。したがって、からの合計が(整数)等しい確率を計算するだけです。ほとんどのP I σ 2 P I1 - P IZ 、Z 、X 、K 、K = μ - Z σ K = μ + Z σ P I σ 2 μ K [ μ - Z μpiσ2pi(1pi)zzXkk=μzσk=μ+zσpi、小さいほぼ等しい(わずか未満)されているので、我々は、計算を行うことができ、保存的であることが、間隔で。和場合、例えば、等しく及び選択ウェルテールをカバーするために、我々は、カバーに計算を必要とするであろうで =、これはわずか28の値です。σ2μkPI9、Z=6、K[9-6[μzμ,μ+zμ]pi9z=6k[027][969,9+69][0,27]

分布は再帰的に計算されます。みましょう最初の和の分布でこれらベルヌーイ変数の。いずれかのためにからを介して、最初の和の変数は等しくすることができる二つの相互に排他的な方法で、第一の和変数が等しいとであるまたは、最初の個の変数の合計が等しく、がです。だから i j 0 i + 1 i + 1 j i j i i + 1 st 0 i j 1fiij0i+1i+1jiji+1st0ij1 1i+1st1

fi+1(j)=fi(j)(1pi+1)+fi(j1)pi+1.

この計算は からの区間の積分に対してのみ実行する必要がありj max(0,μzμ) μ+zμ.

ほとんどのが小さい場合(ただし、はと妥当な精度でまだ区別可能)、このアプローチは、以前に投稿したソリューションで使用された浮動小数点丸め誤差の膨大な蓄積に悩まされません。したがって、拡張精度の計算は必要ありません。例えば、アレイのための倍精度演算確率(間の和の確率の計算が必要な、とpi1pi1216pi=1/(i+1)μ=10.6676031)Mathematica 8では0.1秒、Excel 2002では1〜2秒かかりました(どちらも同じ回答を得ました)。(Mathematicaで)4倍の精度でそれを繰り返すのに約2秒かかりましたが、超えて答えを変更しませんでした。 SD での分布をアッパーテールで終了すると、合計確率のだけが失われました。3×1015z=63.6×108

0から0.001()の間の40,000倍精度ランダム値の配列の別の計算には、Mathematicaで0.08秒かかりました。μ=19.9093

このアルゴリズムは並列化可能です。のセットを、プロセッサごとに1つ、ほぼ等しいサイズの互いに素なサブセットに分割するだけです。各サブセットの分布を計算し、結果を畳み込んで(必要に応じてFFTを使用しますが、この高速化はおそらく不要ですが)、完全な答えを取得します。これにより、が大きくなったとき、尾を遠くに見なければならないとき(大きい)、および/またはが大きいときでも実用的です。piμzn

個のプロセッサを持つ変数の配列のタイミングは、としてスケーリングされます。Mathematicaの速度は毎秒百万のオーダーです。たとえば、プロセッサ、変量、合計確率、標準偏差が上裾に出る場合、万:数秒の計算時間を計算します。これをコンパイルすると、パフォーマンスが2桁速くなる可能性があります。nmO(n(μ+zμ)/m)m=1n=20000μ=100z=6n(μ+zμ)/m=3.2

ちなみに、これらのテストケースでは、分布のグラフは明らかに正の歪度を示しました。これらは正常ではありません。

記録のために、ここにMathematicaソリューションがあります:

pb[p_, z_] := Module[
  {\[Mu] = Total[p]},
  Fold[#1 - #2 Differences[Prepend[#1, 0]] &, 
   Prepend[ConstantArray[0, Ceiling[\[Mu] + Sqrt[\[Mu]] z]], 1], p]
  ]

NBこのサイトで適用されている色分けはMathematicaコードにとって無意味です。特に、灰色のものはコメントではありません。すべての作業が行われる場所です!)

その使用例は次のとおりです。

pb[RandomReal[{0, 0.001}, 40000], 8]

編集

R解決策は、10倍よりも遅いですMathematicaに、おそらく私が最適にそれをコーディングしていない- -このテストケースでは、それはまだ(1秒程度)早く実行します。

pb <- function(p, z) {
  mu <- sum(p)
  x <- c(1, rep(0, ceiling(mu + sqrt(mu) * z)))
  f <- function(v) {x <<- x - v * diff(c(0, x));}
  sapply(p, f); x  
}
y <- pb(runif(40000, 0, 0.001), 8)
plot(y)

PDFのプロット


8

異なるの最善の策は、通常の近似値だと思います。ましょう。それからpiBn=i=1npi(1pi)

Bn1/2(i=1nXii=1npi)N(0,1),
as、ただし各nε>0

Bn1i=1nE((Xipi)21{|Xipi|>εBn1/2})0,
as。ベルヌーイ変数の場合、場合に保持されます。これはいわゆるリンデベルグ条件であり、標準法線への収束に十分かつ必要です。nBn

更新:近似誤差は、次の不等式から計算できます。

supx|Fn(x)Φ(x)|ALn,
ここで、 およびは、スケーリングおよび中央化された合計の累積分布関数です。
Ln=Bn3/2i=1nE|Xipi|3
FnXi

whuberが指摘したように、振る舞いが悪いと収束が遅くなる可能性があります。用我々有すると。次に、をとると、標準正規累積分布関数からの最大偏差はなんと0.3になります。pipi=11+iBnlnnLn(lnn)1/2n=216


3
これは、iが増加するにつれてp_iがゼロに近づく場合には当てはまりません。それ以外の場合、ポアソン分布が正規であることが証明されました!
whuber

1
それがでなければならない理由です。がより速い速度でゼロに近づく場合、。Bnpi1/ilimBn<
mpiktas

@mpiktasは正しい。ポアソン分布への類推は、ここでは完全には適合しません。

ちなみに、私は実際に2番目の段落でその怪しい状態をチェックしませんでした。

@G。ジェイ・カーンズポアソンとの類似性は不完全であることに同意しますが、良い指針を与えると思います。pのシーケンス、p_i = 10 ^ {-j}を想像してください。ここで、jはiの大きさの順序です(i <= 10の場合は1、i <= 100の場合は2など)。n = 10 ^ kの場合、pの90%は10 ^ {-k}に等しく、それらの合計は期待値0.9でポアソンに見えます。別の9%は10 ^ {1-k}に等しく、それらの合計は(同じ期待値で)ポアソンに見えます。したがって、分布はkポアソン変量の合計のように見えます。それは明らかにNormalの近くにはありません。そこから「怪しい状態」の必要性。
whuber

4

さて、あなたの説明とコメントの議論に基づいて、が平均および分散持っていることは明らかです。の分布の形状は、最終的にの動作に依存します。適切に「素敵」な(それらの多くが実際にゼロに近いという意味では)の場合、の分布はほぼ正規(を中心に)になります。しかし、 がゼロに向かうと、分布は左にシフトし、に対して群がるときYipiipi(1pi)YpipiYpiipiy-axisは、@ whuberと@onestopが述べたように、通常よりもずっと少なく、ポアソンのように見えます。

あなたのコメント「分布はポアソンに見えます」から、この後者のケースが起こっているのではないかと疑っていますが、に関する何らかの視覚的な表示または要約統計なしでは確かではありません。ただし、@ whuberが行ったように、が十分に病理学的に振る舞うと、混合分布の制限など、あらゆる種類の不気味なことが起こることに注意してください。私はそれがここに当てはまるとは思いませんが、繰り返しますが、それは本当にあなたのが何をしているかに依存します。ppp

「効率的にモデル化する方法」という元の質問については、階層モデルを提案するつもりでしたが、が固定定数である場合は実際には適切ではありません。要するに、のヒストグラムを見て、表示内容に基づいて最初の推測を行います。あなたのが左にあまり混雑していない場合は、@ mpiktas(および拡張子@csgillespie)による回答をお勧めします。ppp

ちなみに、ここで私はこの問題で遊んでいる間に使用Rコードは次のとおりです。あなたの場合、コードは実際には適切ではありませんさんが小さすぎるが、それは簡単のために異なるモデルをプラグインする必要があります(含みますspooky-クレイジーなもの)最終的な分布に何が起こるかを確認します。ppY

set.seed(1)
M <- 5000
N <- 15000
p <- rbeta(N, shape1 = 1, shape2 = 10)
Y <- replicate(M, sum(rbinom(N, size = 1, prob = p)))

結果を見てみましょう。

hist(Y)
mean(Y)
sum(p)
var(Y)
sum(p*(1 - p))

楽しむ; 確かにした。


「 sが小さすぎる場合、コードは本当に適切ではない」と言うのはなぜですか?たとえば、shape1 = 1、shape2 = 999の場合、平均が0.001であるため、うまくいくようです。pp
ワンストップ

@onestopは、上記の(1,10)の特定の選択では、値が非常に小さく、通常の近似値がかなり良く見えるという意味ではありませんでした。人がポアソンを出してほしかったなら、彼らは何か他のものを試す必要があります。(1,999)の選択は良い仕事をしているようですね。、たとえば0.25 にすることも考えていましたが、試していませんでした。pα<1

2

他の答えは素晴らしいと思いますが、確率を推定するベイズの方法は見当たりませんでした。答えには明示的な形式はありませんが、Rを使用して確率をシミュレートできます。

その試みは次のとおりです。

Xi|piBer(pi)

piBeta(α,β)

ウィキペディアを使用して、および推定値を取得できます(パラメーター推定セクションを参照)。α^β^

今、あなたが生成できるために描き生成、ステップからを生成当時とから。これを回実行すると、取得できます。これは、この行い、Yを生成するための単一のサイクルである(大)回数とのヒストグラム YはYの密度の推定値となり P I BのE T αβX I BのEのR P IN Y = Σ X I M MithpiBeta(α^,β^)XiBer(pi)NY=XiMM

Prob[Yy]=#YyM

この分析は、が修正されていない場合にのみ有効です。piここではそうではありません。しかし、誰かが同様の質問をする場合のために、ここに残しておきます。


1
一部の純粋主義者にとって、これはベイジアンではないかもしれません。これは実際には経験的ベイジアンですが、ハイパージャンボジャンボに頼ることなく、Rの確率をシミュレートするための簡単な方法です。
suncoolsu

1
p_iが与えられたときに、なぜ事前分布が必要なのですか?
whuber

@whuber。ありがとう、あなたは正しい。固定部分を見逃しました。Davidは、値を(qx)/ cとしてとして使用しているだけで、修正されていないと思いました。回答を編集します。pi
suncoolsu

@suncoolsu-"beta-bernoulli"分布は単なる別のbernoulli分布ですが、置き換えることに注意してください。これは、。したがって、基本的にをミキシングすることにより、ここでの二項近似を適用します。piαα+β(1xi)B(α+xi,β+1xi)B(α,β)=αxiβ1xiα+βpip1=p2==pn
確率的

2

他の回答で述べたように、説明する確率分布はポアソン二項分布です。CDFを計算する効率的な方法は、YiliのHongに記載されています。ポアソン二項分布の分布関数の計算について

アプローチは、特性関数のDFT(離散フーリエ変換)を効率的に計算することです。

ポアソン二項分布の特性関数は、()で与えられ ます。ϕ(t)=jn[(1pj)+pjeit]i=1

アルゴリズムは次のとおりです。

  1. ましょう、のための。zj(k)=1pj+pjcos(ωk)+ipjsin(ωk)ω=2πn+1
  2. 定義、定義。xk=exp{jnlog(zj(k))}x0=1
  3. を計算します。対称を使用して残りを取得します。xkk=1,,[n/2]x¯k=xn+1k
  4. ベクトル FFTを適用します。1n+1<x0,x1,,xn>
  5. 結果の累積合計を取得して、CDFを取得します。

このアルゴリズムはpoibin Rパッケージで利用可能です。

このアプローチは、数値的な安定性に欠ける傾向があるため、再帰的な定式化よりもはるかに優れた結果をもたらします。


3
私はその論文の要約にしかアクセスできませんが、stats.stackexchange.com / questions / 41247 / …で使用したメソッドを実装しているようで、このスレッドで提供されている他のメソッドと比較してどのように機能するかについて説明します。この論文が成し遂げたことについてもっと知っているなら、私たちは要約を読んで喜んでいるでしょう。
whuber

1

ポアソン近似を適用することをお勧めします。と、パラメータポアソン分布を持つrv間の合計変動距離が小さいことはよく知られています(AD Barbour、L。HolstおよびS. Janson:Poisson近似を参照): 情報の発散にも限界があります(Kullback-Leibler距離、P。Harremoёs:Convergence to the Poisson Distribution in Information Divergence。Preprint no。2、Feb. 2003、Mathematical Department、Copenhagen。http : //www.harremoes.dk/Peter/poisprep.pdfYZipi

supA|P(YA)P(ZA)|min{1,1ipi}ipi2.
P.Harremoёsのその他の出版物、カイ2乗距離(BorisovとVorozheikin https://link.springer.com/article/10.1007%2Fs11202-008-0002-3を参照)およびその他の距離。

近似の精度について 無制限の関数については、BorisovとRuzankin https://projecteuclid.org/euclid.aop/1039548369を参照できます。その上、その論文には確率の単純な限界が含まれています:すべてのに対して、 |Ef(Y)Ef(Z)|fA

P(YA)1(1maxipi)2P(ZA).


1
+1近似境界に関する有用な定量的情報をありがとう。当サイトへようこそ!
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.