0

いくつかの確率変数の分布を事前計算しようとしています。特に、これらの確率変数は、ゲノム内の位置で評価された関数の結果であるため、それぞれに 10^8 または 10^9 のオーダーの値があります。関数は非常にスムーズなので、2/10/100 ごとに評価するだけで精度が大幅に低下するとは思いませんか? ベースかそこらですが、それでも多数のサンプルがあります。私の計画は、各関数の分位表 (おそらくパーセンタイル) を事前に計算し、メイン プログラムの実行時にこれらを参照して、実行ごとにこれらの分布統計を計算する必要がないようにすることです。

しかし、これを簡単に行う方法がよくわかりません: 10^9 float の配列を保存、並べ替え、削減することは実際には実行可能ではありませんが、オブジェクトに関する情報を失わない別の方法は考えられません。分布。全体をメモリに保存する必要のないサンプル分布の分位数を測定する方法はありますか?

4

1 に答える 1

2

私は@katriealexのコメントに同意します:強力な統計的背景を持つ誰かに尋ねてください。

大量のメモリを保存する必要なしに、最小/最大/平均/標準偏差を簡単に評価できます。(平均+標準偏差に注意してください:Knuthの手法を使用してください:

delta = x - m[n-1]
m[n] = m[n-1] +  1/n * delta
S[n] = S[n-1] + (x[n] - m[n])*delta
mean = m[n]
std dev = sqrt(S[n]/n)

これにより、stddevの単純な計算で発生する浮動小数点のオーバーフロー/アンダーフローの問題を防ぐことができます。 (S2 / N-S1 ^ 2 / N ^ 2)ウィキペディアも参照してください。)

分布のより特徴的なモーメントを計算するためのストリーム指向のアルゴリズムはおそらく他にもありますが、それらが何であるかはわかりません。

または、分布を特徴付けるのに十分なビンを使用してヒストグラム手法を使用することもできます。

于 2010-11-23T23:14:31.220 に答える