0

命中確率が p(p=0.5) の 4(n=4) のミサイルがあるとします。それらは同じ環境で同時に発射されます。そのため、各ミサイルは他の 3 つのミサイルと相関関係を持つ必要があります。たとえば、corr=1 の場合、すべてのミサイルがヒットまたはミスします。corr=0 の場合、それらは二項分布で独立しています。

難しいのは、相関が -1 にならないことです。2つの結果(ミスまたはヒット)があるため。

だから私はランダムな離散二項値を生成したい(0.4の確率と相関= 0.6で0から4の間としましょう)

私のコードは以下にあります。

n <- 100  # size
p <- 0.4  # probability
corr <- 0.6  # correlation
trial <- 10000  # number of trials

p <- rep(p, n)
rho <- corr

library(bindata)
off <- rmvbin(trial, p, bincorr=(1 - rho)*diag(n) + rho)
off
          [,1] [,2] [,3] [,4]
    [1,]    0    0    1    0
    [2,]    0    0    0    0
    [3,]    1    1    1    1      # This part gives correlated 
    [4,]    1    0    1    0      # Bernoulli var for 10000
    [5,]    0    0    0    0      # trial. When you sum each
    [6,]    1    1    1    1      # row, you get random correlated
    [7,]    1    1    1    0      # number of missiles.
    [8,]    0    0    0    0
    ........................
[10000,]    0    0    1    0

cor(off)
          [,1]      [,2]      [,3]      [,4]
[1,] 1.0000000 0.6015165 0.5987907 0.6005857   # correlation is as 
[2,] 0.6015165 1.0000000 0.6019365 0.6012273   # demanded.
[3,] 0.5987907 0.6019365 1.0000000 0.5972144   #
[4,] 0.6005857 0.6012273 0.5972144 1.0000000   #

ただし、サイズ (n) が大きくなると、コードの堅牢性と精度が低下します。

それを生成する方法はありますか?(与えられた相関を持つ間隔の間の整数を生成します。)

4

0 に答える 0