命中確率が 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) が大きくなると、コードの堅牢性と精度が低下します。
それを生成する方法はありますか?(与えられた相関を持つ間隔の間の整数を生成します。)