Da ist die Frage
"Wie verwende ich die Gleichverteilung, um korrelierte Zufallszahlen aus verschiedenen Randverteilungen in zu generieren? "R.
und nicht nur normale Zufallsvariablen, die obige Antwort erzeugt keine Simulationen mit der beabsichtigten Korrelation für ein beliebiges Paar von Randverteilungen in .R.
Der Grund ist , dass für die meisten cdfs und G Y , cor ( X , Y ) ≠ cor ( G - 1 X ( Φ ( X ) , G - 1 Y ( Φ ( Y ) ) , wenn ( X , Y ) ∼ N 2 ( 0 , Σ ) , wobei Φ das normale Standard-cdf bezeichnet.GX.GY.
cor ( X., Y.) ≠ cor ( G.- 1X.( Φ ( X.) , G.- 1Y.( Φ ( Y.) ) ,
( X., Y.) ∼ N.2( 0 , Σ ) ,
Φ
Nämlich ist hier ein Gegenbeispiel mit einem Exp (1) und eine Gamma (.2,1) als mein Paar Randverteilungen in .R.
library(mvtnorm)
#correlated normals with correlation 0.7
x=rmvnorm(1e4,mean=c(0,0),sigma=matrix(c(1,.7,.7,1),ncol=2),meth="chol")
cor(x[,1],x[,2])
[1] 0.704503
y=pnorm(x) #correlated uniforms
cor(y[,1],y[,2])
[1] 0.6860069
#correlated Exp(1) and Ga(.2,1)
cor(-log(1-y[,1]),qgamma(y[,2],shape=.2))
[1] 0.5840085
Ein weiteres offensichtliches Gegenbeispiel ist, wenn das Cauchy-cdf ist. In diesem Fall ist die Korrelation nicht definiert.GX.
Um ein breiteres Bild zu geben, hier ein R-Code, bei dem sowohl als auch G Y beliebig sind:GX.GY.
etacor=function(rho=0,nsim=1e4,fx=qnorm,fy=qnorm){
#generate a bivariate correlated normal sample
x1=rnorm(nsim);x2=rnorm(nsim)
if (length(rho)==1){
y=pnorm(cbind(x1,rho*x1+sqrt((1-rho^2))*x2))
return(cor(fx(y[,1]),fy(y[,2])))
}
coeur=rho
rho2=sqrt(1-rho^2)
for (t in 1:length(rho)){
y=pnorm(cbind(x1,rho[t]*x1+rho2[t]*x2))
coeur[t]=cor(fx(y[,1]),fy(y[,2]))}
return(coeur)
}
Das Herumspielen mit verschiedenen cdfs führte mich dazu, diesen Sonderfall einer -Verteilung für G X und einer logarithmischen Normalverteilung für G Y herauszustellen :χ23GX.GY.
rhos=seq(-1,1,by=.01)
trancor=etacor(rho=rhos,fx=function(x){qchisq(x,df=3)},fy=qlnorm)
plot(rhos,trancor,ty="l",ylim=c(-1,1))
abline(a=0,b=1,lty=2)
Dies zeigt, wie weit die Korrelation von der Diagonale entfernt sein kann.
GX.GY.cor ( X., Y.)( - 1 , 1 )