相関二項確率変数の生成


21

線形変換アプローチに従って相関ランダム二項変数を生成できるかどうか疑問に思っていましたか?

以下では、Rで簡単なものを試してみました。しかし、私はこれを行うための原則的な方法があるかどうか疑問に思っていましたか?

X1 = rbinom(1e4, 6, .5) ; X2 = rbinom(1e4, 6, .5) ;  X3 = rbinom(1e4, 6, .5) ; a = .5

Y1 = X1 + (a*X2) ; Y2 = X2 + (a*X3) ## Y1 and Y2 are supposed to be correlated

cor(Y1, Y2)

2
Y1とは相関している場合がありますが、二項式ではなくなります。例、、したがって、Y_iは二項確率変数にはなりません。多項分布を調べることをお勧めします。X 1 = X 2 = 1 Y 1 = 1.5 Y iY2X1=X2=1Y1=1.5Yi
knrumsey-モニカーの復活

1
この質問に対する簡単な答えは、copula固定マージンを持つ従属変数の生成に役立つキーワードを探すことです。
西安

回答:


32

二項変数は通常、独立したベルヌーイ変数を合計することにより作成されます。相関するベルヌーイ変数のペアから始めて、同じことを行うことができるかどうかを見てみましょう。(X,Y)

仮定ベルヌーイである変数(ある、と)及びベルヌーイである変数。それらの共同分布を特定するには、結果の4つの組み合わせすべてを指定する必要があります。書くと、確率の公理から残りを容易に理解できます:X(p)Pr(X=1)=pPr(X=0)=1pY(q)

Pr((X,Y)=(0,0))=a,
Pr((X,Y)=(1,0))=1qa,Pr((X,Y)=(0,1))=1pa,Pr((X,Y)=(1,1))=a+p+q1.

これを相関係数の式に代入して解くと、ρ

(1)a=(1p)(1q)+ρpq(1p)(1q).

4つの確率すべてが非負であれば、有効な結合分布が得られ、このソリューションはすべての 2変量ベルヌーイ分布をパラメーター化します。(場合、と間の数学的に意味のあるすべての相関に解があります。)これらの変数のを合計すると、相関は変わりません。ただし、周辺分布は二項および必要に応じて二項。p=q11n(n,p)(n,q)

ましょう、、、我々は相関があることを希望。解決策である(及び他の確率は約ある、、および)。以下は、共同分布からの実現のプロットです。n=10p=1/3q=3/4ρ=4/5(1)a=0.003367350.2470.6630.0871000

散布図

赤い線はサンプルの平均を示し、点線は回帰線です。それらはすべて意図した値に近いものです。この画像では、重複を解消するためにポイントがランダムにジッターされています。結局、二項分布は積分値のみを生成するため、大量のオーバープロットが発生します。

これらの変数を生成する1つの方法は、選択した確率でから回サンプリングし、各を、各を、各変換することですinto、および各 into。結果を(ベクトルとして)合計して 1つの実現を取得します。n{1,2,3,4}1(0,0)2(1,0)3(0,1)4(1,1)(X,Y)

コード

これがR実装です。

#
# Compute Pr(0,0) from rho, p=Pr(X=1), and q=Pr(Y=1).
#
a <- function(rho, p, q) {
  rho * sqrt(p*q*(1-p)*(1-q)) + (1-p)*(1-q)
}
#
# Specify the parameters.
#
n <- 10
p <- 1/3
q <- 3/4
rho <- -4/5
#
# Compute the four probabilities for the joint distribution.
#
a.0 <- a(rho, p, q)
prob <- c(`(0,0)`=a.0, `(1,0)`=1-q-a.0, `(0,1)`=1-p-a.0, `(1,1)`=a.0+p+q-1)
if (min(prob) < 0) {
  print(prob)
  stop("Error: a probability is negative.")
}
#
# Illustrate generation of correlated Binomial variables.
#
set.seed(17)
n.sim <- 1000
u <- sample.int(4, n.sim * n, replace=TRUE, prob=prob)
y <- floor((u-1)/2)
x <- 1 - u %% 2
x <- colSums(matrix(x, nrow=n)) # Sum in groups of `n`
y <- colSums(matrix(y, nrow=n)) # Sum in groups of `n`
#
# Plot the empirical bivariate distribution.
#
plot(x+rnorm(length(x), sd=1/8), y+rnorm(length(y), sd=1/8),
     pch=19, cex=1/2, col="#00000010",
     xlab="X", ylab="Y",
     main=paste("Correlation is", signif(cor(x,y), 3)))
abline(v=mean(x), h=mean(y), col="Red")
abline(lm(y ~ x), lwd=2, lty=3)

このアプローチは、任意の数のバイナリ変数を生成するために拡張できますか?-与えられた相関行列に適合させるため(または最大限に適合させるため)?
-ttnphns

1
@ttnphnsはい。ただし、オプションは爆発します確率テーブルは、周辺パラメータ、合計からユニティへの制約、および(したがって)追加パラメータによって決定される必要があります。明らかに、作成したい多変量プロパティに従って、これらのパラメーターを選択(または制約)する自由があります。また、同様のアプローチを使用して、「」パラメーターの値が異なる相関二項変数を生成できます。Parvinは:「我々は合計とき、私は信じているの変数の」明確に何を説明し表しています。2kk2kk1nnn
whuber

これは素晴らしい結果です。最初の文を少しだけ選んでください。独立したベルヌーイ変数から二項式を取得するには、同じpを持つ必要はありませんか?これは、あなたのアプローチの動機にすぎないため、あなたがやったことには影響しません。
マイケルR.チェルニック

1
@Michaelありがとうございます-まったくその通りです。ここで説明した方法に関係のないもう1つの理由は、この方法ではベルヌーイ変数を共通のパラメーターで合計する必要があることです。パラメーターはすべての変数に対して、変数に対してです。投稿を合理的に短くするために、それらが実際に二項分布であることを示すために、周辺分布のヒストグラムを提示しませんでした(ただし、実際に動作することを確認するために元の分析で実際に行いました!)。pXqY
whuber

@whuber素敵なアプローチ!参照できる論文があれば教えてください。
Tニック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.