0

N 個のベルヌーイ変数 、X1...、XN、およびがありXi~B(1, pi)piはそれぞれXi、 、および の分布Y=X1+...XNを取得する必要がありますY

XiXjが独立している場合、i!=jシミュレーションを使用できます。

1. Generate `X1`, ..., `XN` via their distribution, and then get the value of `Y`;
2. Repet step 1 for 10000 times, and then I can get `Y1`, ..., `Y10000`, so I can konw the distribution of `Y`.

しかし、現在XiXjは依存しているため、相関も考慮する必要があります。corr(Xi, Xj)=0.2いつi!=j、シミュレーションに相関を挿入するにはどうすればよいでしょうか? または、他の方法で Y の分布を取得しますか?

助けてくれてありがとう。

4

1 に答える 1

0

与えられた一方の条件付き分布を導き出すことにより、特定のペアワイズ相関 (制限内) を生成できます。制限は、完全に恣意的な p 値と相関を持つことができないことです。ただし、相関の N-choose-2 ペアごとのセットによって暗示される同時制約は、N、p 値、および相関の任意の選択には実行不可能です。

次の Ruby 実装は、指定された p 値と X のペアの相関関係を取得するための計算を示しています。

# Control the run with command-line args.
# If no args provided, default to test case of
# p1 = 0.2, p2 = 0.8, rho = -0.5, sample size = 10
p1 = (ARGV.shift || 0.2).to_f
p2 = (ARGV.shift || 0.8).to_f
rho = (ARGV.shift || -0.5).to_f
n = (ARGV.shift || 10).to_i

# Calculate conditional probabilities for p2 given p1 = 0, 1
p2_given = [p2 - rho * Math::sqrt(p1 * p2 * (1.0 - p2) / (1.0 - p1)),
            p2 + rho * Math::sqrt((1.0 - p1) * p2 * (1.0 - p2) / p1)]

printf "p2_given_1 = %8.5f, p2_given_0 = %8.5f\n", p2_given[1], p2_given[0]

# Only proceed to actually generate values if the conditional
# probabilities are between zero and one
if p2_given.inject(true) {|m, e| m &= (e >= 0 && e <= 1)}
  n.times do
    x1 = (rand <= p1) ? 1 : 0
    x2 = (rand <= p2_given[x1]) ? 1 : 0
    printf "%d,%d\n", x1, x2
  end
end
于 2014-01-17T20:41:06.243 に答える