Wenn ich einen Vektor von


8

Mein letztendliches Ziel ist es, einen Vektor der Größe von korrelierten Bernoulli-Zufallsvariablen erzeugen zu können . Eine Möglichkeit, dies zu tun, besteht darin, den Gaußschen Coupla-Ansatz zu verwenden. Der Gaußsche Coupla-Ansatz lässt mich jedoch nur mit einem Vektor zurück:N.

(p1,,pN.)[0,1]]N.

Angenommen, ich habe so generiert dass die gemeinsame Korrelation zwischen ihnen . Wie kann ich diese nun in einen neuen Vektor von oder umwandeln ? Mit anderen Worten, ich möchte:ρ 0 1(p1,,pN.)ρ01

(X.1,,X.N.){0,1}}N.

aber mit der gleichen Korrelation .ρ

Ein Ansatz, an den ich dachte, bestand darin, eine feste Grenzregel so zuzuweisen, dass wenn , dann und wenn , dann .X i = 0 p i0,5 X i = 1pich<0,5X.ich=0pich0,5X.ich=1

Dies scheint in Simulationen insofern gut zu funktionieren, als es die Korrelationsstruktur beibehält, aber es ist für mich sehr willkürlich, welcher Grenzwert neben .0,5

Eine andere Möglichkeit besteht darin, jedes als Bernoulli-Zufallsvariable mit der Erfolgswahrscheinlichkeit und daraus eine Stichprobe zu ziehen. Dieser Ansatz scheint jedoch einen Korrelationsverlust zu verursachen, und anstelle von kann ich oder .p i ρ ρX.ichpichρρ2ρ3

Hat jemand irgendwelche Gedanken oder Anregungen dazu? Vielen Dank.


3
Sie haben N Variablen. Warum sprichst du nur von einem einzelnen Rho und nicht von einer Rhos-Matrix?
ttnphns

Antworten:


3

Ich verstehe Gaußsche Kopula nicht genug, um zu wissen, wo das Problem liegt. Aber ich habe einen Weg gefunden, korrelierte Bernoulli-Vektoren zu erzeugen.

Folgen Sie https://mathoverflow.net/a/19436/105908, wenn wir einen Satz fester Vektoren und ein Zufallsvektor auf der Einheitskugel u können wir u in binäres X umwandeln, wobei X i = ( u v i > 0 ) . In diesem Aufbau ist c o r ( X i , X j ) = π - 2 θ ( i , jv1...vnuuX.X.ich=(uvich>0) wobeiθ(i,j)der Winkel zwischenviundvj ist.cÖr(X.ich,X.j)=π- -2θ(ich,j)πθ(ich,j)vichvj

So finden Sie eine geeignete Matrix um eine gewünschte Korrelationsmatrix R zu erzeugen ? Die Winkelbedingung übersetzt sich in V V T = c o s ( - π R - πV.=|v1...vn|R.und somit können wirVmit Cholesky-Zerlegung finden.V.V.T.=cÖs(- -πR.- -π2)V.

Ein Beispielcode in R folgt:

#Get a simple correlation matrix 
N = 3
cor_matrix <- matrix(c(1,0.5,0.8,0.5,1,0.3,0.8,0.3,1), N, N)

#Calculate the vectors with desired angles
vector_matrix <- chol(cos( (pi * cor_matrix - pi) * -0.5))

#You can generate random unit vectors by normalizing a vector 
#of normally distributed variables, note however that the normalization
#does not affect the sign of the dot product and so we ignore it
num_samples <- 10000
normal_rand <- matrix(rnorm(num_samples * N), num_samples, N)

#Generate the target variables
B <- (normal_rand %*% vector_matrix) > 0

#See for yourself that it works
cor(B)  
cor(B) - cor_matrix 

Danke @ jakub-bartczuk für den Link zur MO-Frage - das würde ich alleine nicht finden.


X.ichB.ernÖullich(0,5)


V.V.T.=cÖs(- -πR.- -π2)

1
R.ich,j=π- -2θ(ich,j)πθ(ich,j)=einrccÖs(vich.vj|vich|.|vj|)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.