12

与えられた相関関数で一連のN個のランダムなバイナリ変数を生成する必要があります。x = { x i }を一連のバイナリ変数とします(値0または1を取り、iは1からNまで実行されます)。周辺確率はPr(x i = 1)= pで与えられ、変数は次のように相関する必要があります。

Corr [ x i x j ]=const×| ij | −α(i!= jの場合)

ここで、αは正の数です。

簡単な場合は、相関関数を検討してください。

Corr [ x i x j ] =(| ij | +1)−α

重要なのは、相関関数がべき乗則のようになったときの動作を調査したいということです。(α | ij |ではありません)

できればPythonでこのようなシリーズを生成することは可能ですか?

4

6 に答える 6

5

すべての入力に感謝します。チョル・ギュ・パークらのかわいい小さな記事で私の質問に対する答えを見つけたので、誰かが同じ問題に遭遇した場合は、調べてください:

「相関するバイナリバリアントを生成するための簡単な方法」(jstor.org.stable/2684925)

単純なアルゴリズムの場合。アルゴリズムは、相関行列のすべての要素が正であり、一般的な周辺分布の場合、Pr(x_i)=p_iで機能します。

j

于 2010-03-18T04:57:04.213 に答える
2

あなたはランダムなプロセスを説明していますが、私には難しいプロセスのように見えます...バイナリ(0,1)要件を削除し、代わりに期待値と分散を指定した場合、これを次のように説明することができます。 1極ローパスフィルターを介して給電するホワイトノイズジェネレーター。これにより、α |ij|が得られると思います。特性。

言い回しによっては、これは実際にはmathoverflow.netの基準を満たす可能性があります。聞いてみよう…。


更新:mathoverflow.netでα |ij|を要求しました 場合。しかし、おそらくあなたのケースに適応できるいくつかのアイデアがそこにあります。

于 2010-03-15T14:06:20.210 に答える
1

RSeekですばやく検索すると、 Rにパッケージがあることがわかります

これをする。

于 2010-03-15T13:25:26.513 に答える
0

強引な解決策は、問題の制約を、長さがすべてのバイナリ文字列に及ぶ変数を持つ線形計画法として表現すること2^Nです。まず、確率分布である制約:pr(w)wNpr

for all w: 0 <= pr(w) <= 1
sum_w pr(w) = 1

次に、各変数の期待値が次のようになるという制約p

for all i: sum_{w such that w[i] = 1} pr(w) = p

第三に、共分散制約:

for all i < j: sum_{w such that w[i] = w[j] = 1} pr(w) = const * |j - i|^alpha - p^2

これは非常に遅いですが、大雑把な文献検索は何も良くなりませんでした。それを実装することにした場合は、Pythonバインディングを備えたLPソルバーがいくつかあります:http ://wiki.python.org/moin/NumericAndScientific/Libraries

于 2010-03-14T17:49:28.997 に答える
0

分布xiを、いくつかの独立した基底分布f jx i = a i1 f 1 + a i2 f 2 +...の線形結合として表現します。f jを、0..1または{0,1}(離散)に均一に分布する独立変数に制約します。ここで、私たちが知っているすべてのものを行列形式で表現しましょう。

Let X be the vector (x1, x2, .., xn)
Let A be the matrix (a_ij) of dimension (k,n) (n rows, k columns)
Let F be the vector (f1, f2, .., fk) 
Let P be the vector (p1, p2, .., pn)
Let R be the matrix (E[x_i,x_j]) for i,j=1..n
Definition of the X distribution: X = A * F
Constraint on the mean of individual X variables: P = A * (1 ..k times.. 1)
Correlation constraint: AT*A = 3R or 2R in the discrete case (because E[x_i x_j] = 
  E[(a_i1*f_1 + a_i2*f_2 + ...)*(a_j1*f_1 + a_j2*f_2 + ...)] =
  E[sum over p,q: a_ip*f_p*a_jq*f_q] = (since for p/=q holds E[f_p*f_q]=0)
  E[sum over p: a_ip*a_jp*f_p^2] =
  sum over p: a_ip*a_jp*E[f_p^2] = (since E[f_p^2] = 1/3 or 1/2 for the discrete case)
  sum over p: 1/3 or 1/2*a_ip*a_jp
And the vector consisting of those sums over p: a_ip*a_jp is precisely AT*A.

次に、2つの方程式を解く必要があります。

AT*A      = 3R (or 2R in the discrete case)
A*(1...1) = P

最初の方程式の解は、行列3Rまたは2Rの平方根を見つけることに対応します。たとえば、http://en.wikipedia.org/wiki/Cholesky_factorizationおよび一般的にはhttp://en.wikipedia.org/wiki/Square_root_of_a_matrixを参照してください。2番目のものについても何かをする必要があります:)

私は周りの数学者に私を訂正するように頼みます。なぜなら、私はATAとAATを混ぜたり、さらに間違ったことをしたりした可能性があるからです。

基底分布の線形混合としてxi値を生成するには、2段階のプロセスを使用します。1)一様確率変数を使用して、対応する確率で重み付けされた基底分布の1つを選択します。2)を使用して結果を生成します。選択された基底分布。

于 2010-03-14T14:11:53.780 に答える
0

これは、うまくいくように見える直感的/実験的なアプローチです。

bがバイナリrv、 mがバイナリrvの平均、 cが必要な相関、 rand()がU(0,1)rvを生成し、 dが必要な相関バイナリrvである場合、次のようになります。

d = if(rand()<c、b、if(rand()<m、0、1))

つまり、均一なrvが目的の相関よりも小さい場合、d=bです。それ以外の場合、d=別のランダムな2進数。

m=.5およびc=.4およびc=.5の2000バイナリrvの列に対してこれを1000回実行しました。相関平均は指定されたとおりであり、分布は正常であるように見えました。0.4の相関の場合、相関の標準偏差は0.02でした。

申し訳ありませんが、これが常に機能することを証明することはできませんが、認める必要があります。確かに簡単です。

于 2010-03-17T18:33:08.973 に答える