Il semble que vous vous demandiez comment générer des données avec une matrice de corrélation particulière.
Un fait est utile que si vous avez un vecteur aléatoire avec la matrice de covariance Σ , le vecteur aléatoire A x a moyenne A E ( x ) et covariance matrice Ω = A Σ A T . Donc, si vous commencez avec des données qui ont une moyenne de zéro, la multiplication par A ne changera pas cela, donc votre première exigence est facilement satisfaite. XΣA xA E( x )Ω = A Σ ATUNE
Disons que vous commencez avec (zéro) moyenne des données non corrélées (la matrice de covariance est diagonale) - puisque nous parlons de la matrice de corrélation, nous allons juste prendre . Vous pouvez transformer cela en données avec une matrice de covariance donnée en choisissant A pour être la racine carrée cholesky de Ω - alors A x aurait la matrice de covariance Ω souhaitée .Σ = IUNEΩA xΩ
Dans votre exemple, vous semblez vouloir quelque chose comme ceci:
Ω = ⎛⎝⎜1.80.81.80.81⎞⎠⎟
Malheureusement, cette matrice n'est pas définie positive, elle ne peut donc pas être une matrice de covariance - vous pouvez le vérifier en voyant que le déterminant est négatif. Peut-être, à la place
Ω = ⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ o r Ω= ⎛ ⎝⎜12 / 302 / 312 / 302 / 31⎞⎠⎟
suffirait. Je ne sais pas comment calculer la racine carrée cholesky dans matlab (qui semble être ce que vous utilisez) mais R
vous pouvez utiliser la chol()
fonction.
Dans cet exemple, pour les deux énumérés ci-dessus, les multiples de matrice appropriés (respectivement) seraientΩ
A = ⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ o r A = ⎛ ⎝⎜12 / 300.7453.894400.4472⎞⎠⎟
Le R
code utilisé pour y parvenir était:
x = matrix(0,3,3)
x[1,]=c(1,.8,.3)
x[2,]=c(.8,1,.8)
x[3,]=c(.3,.8,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0 0.0000000 0.0000000
[2,] 0.8 0.6000000 0.0000000
[3,] 0.3 0.9333333 0.1972027
x[1,]=c(1,2/3,0)
x[2,]=c(2/3,1,2/3)
x[3,]=c(0,2/3,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0000000 0.0000000 0.0000000
[2,] 0.6666667 0.7453560 0.0000000
[3,] 0.0000000 0.8944272 0.4472136