Je voudrais générer des paires de nombres aléatoires avec une certaine corrélation. Cependant, l'approche habituelle consistant à utiliser une combinaison linéaire de deux variables normales n'est pas valable ici, car une combinaison linéaire de variables uniformes n'est plus une variable uniformément distribuée. J'ai besoin que les deux variables soient uniformes.
Une idée sur la façon de générer des paires de variables uniformes avec une corrélation donnée?
correlation
random-generation
uniform
Onturenio
la source
la source
Réponses:
I'm not aware of a universal method to generate correlated random variables with any given marginal distributions. So, I'll propose an ad hoc method to generate pairs of uniformly distributed random variables with a given (Pearson) correlation. Without loss of generality, I assume that the desired marginal distribution is standard uniform (i.e., the support is[0,1] ).
The proposed approach relies on the following:U1 and U2 with respective distribution functions F1 and F2 , we have Fi(Ui)=Ui , for i=1,2 .
Thus, by definition Spearman's rho is
a) For standard uniform random variables
b) IfX1,X2 are random variables with continuous margins and Gaussian copula with (Pearson) correlation coefficient ρ , then Spearman's rho is
The approach is to generate data from the Gaussian copula with an appropriate correlation coefficientρ such that the Spearman's rho corresponds to the desired correlation for the uniform random variables.
Simulation algorithmr denote the desired level of correlation, and n the number of pairs to be generated.
The algorithm is:
Let
Exampler=0.6 and n=500 pairs.
The following code is an example of implementation of this algorithm using R with a target correlation
In the figure below, the diagonal plots show histograms of variablesU1 and U2 , and off-diagonal plots show scatter plots of U1 and U2 .
By constuction, the random variables have uniform margins and a correlation coefficient (close to)r . But due to the effect of sampling, the correlation coefficient of the simulated data is not exactly equal to r .
Note that the
gen.gauss.cop
function should work with more than two variables simply by specifying a larger correlation matrix.Simulation studyr=−0.5,0.1,0.6 suggests that the distribution of the correlation coefficient converges to the desired correlation as the sample size n increases.
The following simulation study repeated for target correlation
la source
gen.gauss.cop
fonction fonctionnera pour plus de deux variables avec un ajustement (trivial). Si vous n'aimez pas l'ajout ou si vous souhaitez le formuler différemment, veuillez revenir ou modifier au besoin.Intuitivement,u1 est U( 0 , 1 ) car u1 équivaut à w1 [lequel est U( 0 , 1 ) ] si je= 1 , et u1 équivaut à w2 [lequel est U( 0 , 1 ) ] si je= 0 , donc u1 est U( 0 , 1 ) dans tous les cas. Pareil pouru2 . Quant à la corrélation:
En développant cela, notons d'abord queje( Je- 1 ) = 0 , je2= Je , et ( 1 - I)2= ( 1 - I) car je est toujours soit 0 ou 1 . Notez également queje est indépendant du w , qui sont également indépendants les uns des autres. Donc:
From the fact thatV(w1)=1/12 , we get E(w21)=1/3 , so
E(u1u2)=p/12+1/4 , that is:
cov(u1u2)=p/12 .
Since V(u1)=V(u2)=1/12 , we get finally that cor(u1,u2)=p .
la source
Voici une méthode simple pour une corrélation positive: Soit( u1, u2) = Iw1+ ( 1 - I) ( w2, w3) , où w1, w2, et w3 sont indépendants U( 0 , 1 ) et je est Bernoulli (p ). u1 et u2 aura alors U( 0 , 1 ) distributions avec corrélation p . Cela s'étend immédiatement àk -tuples d'uniformes avec matrice de variance symétrique composée.
Si vous voulez des paires avec une corrélation négative, utilisez( u1, u2) = I( w1, 1 - w1) + ( 1 - I) ( w2, w3) , et la corrélation sera - p .
la source