Je voudrais générer une matrice de corrélation aléatoire telle que la distribution de ses éléments hors diagonale ressemble approximativement à la normale. Comment puis-je le faire?
La motivation est la suivante. Pour un ensemble de données de séries chronologiques, la distribution de corrélation semble souvent assez proche de la normale. Je voudrais générer de nombreuses matrices de corrélation "normales" pour représenter la situation générale et les utiliser pour calculer le nombre de risques.
Je connais une méthode, mais l'écart-type résultant (de la distribution des éléments hors diagonale) est trop petit pour mon objectif: générer lignes aléatoires uniformes ou normales d'une matrice , standardiser les lignes (soustraire la moyenne, diviser par l'écart-type), puis l'échantillon de matrice de corrélation a normalement distribué des entrées hors diagonale [ Mise à jour après les commentaires: l'écart-type sera ].X 1
Quelqu'un peut-il suggérer une meilleure méthode avec laquelle je peux contrôler l'écart-type?
Réponses:
J'ai d'abord fourni ce que je crois maintenant être une réponse sous-optimale; j'ai donc modifié ma réponse pour commencer par une meilleure suggestion.
Utilisation de la méthode de la vigne
Dans ce fil: Comment générer efficacement des matrices de corrélation aléatoire semi-définie positive? - J'ai décrit et fourni le code de deux algorithmes efficaces de génération de matrices de corrélation aléatoire. Les deux proviennent d'un article de Lewandowski, Kurowicka et Joe (2009).
S'il vous plaît voir ma réponse là pour beaucoup de chiffres et de code matlab. Ici, je voudrais seulement dire que la méthode de la vigne permet de générer des matrices de corrélation aléatoires avec n'importe quelle distribution de corrélations partielles (notez le mot "partiel") et peut être utilisée pour générer des matrices de corrélation avec de grandes valeurs hors diagonales. Voici la figure pertinente de ce fil:
La seule chose qui change entre les sous-parcelles est un paramètre qui contrôle la concentration de la distribution des corrélations partielles autour de . Comme OP demandait une distribution hors diagonale approximativement normale, voici le tracé avec des histogrammes des éléments hors diagonale (pour les mêmes matrices que ci-dessus):±1
Je pense que ces distributions sont raisonnablement "normales", et on peut voir comment l'écart-type augmente progressivement. Je dois ajouter que l'algorithme est très rapide. Voir le fil lié pour les détails.
Ma réponse originale
Une modification directe de votre méthode pourrait faire l'affaire (selon la proximité que vous souhaitez que la distribution soit normale). Cette réponse a été inspirée par les commentaires de @ cardinal ci-dessus et par la réponse de @ psarka à ma propre question Comment générer une grande matrice de corrélation aléatoire de rang complet avec de fortes corrélations présentes?
L'astuce consiste à faire des échantillons de votre corrélés (pas des fonctionnalités, mais des échantillons). Voici un exemple: je génère une matrice aléatoire de (tous les éléments de la normale standard), puis j'ajoute un nombre aléatoire de à chaque ligne, pour . Pour la matrice de corrélation (après standardisation des entités) aura des éléments hors diagonale répartis normalement normalement avec l'écart type . PourX 1000 × 100 [ - a / 2 , a / 2 ] a = 0 , 1 , 2 , 5 a = 0 X ⊤ X 1 / √X X 1000×100 [−a/2,a/2] a=0,1,2,5 a=0 X⊤X a>0aa=0,1,2,51/1000−−−−√ a>0 , Je calcule la matrice de corrélation sans centrer les variables (cela préserve les corrélations insérées), et l'écart-type des éléments hors diagonale croît avec comme indiqué sur cette figure (les lignes correspondent à ):a a=0,1,2,5
Toutes ces matrices sont bien sûr définies positives. Voici le code matlab:
La sortie de ce code (valeurs propres minimum et maximum) est:
la source
Vous pourriez être intéressé par une partie du code sur le lien suivant:
Corrélation et co-intégration
la source
Si vous essayez de générer des matrices de corrélation aléatoires, pensez à échantillonner à partir de la distribution de Wishart. Cette question suivante fournit des informations sur la distribution de Wishart ainsi que des conseils sur la façon d'échantillonner: Comment générer efficacement des matrices de corrélation positives-semi-finies aléatoires?
la source
Ce n'est pas une réponse très sophistiquée, mais je ne peux m'empêcher de penser que c'est toujours une bonne réponse ...
Si votre motivation est que les paramètres de corrélation produits par les données de séries chronologiques ont tendance à sembler normaux, pourquoi ne pas simplement simuler des données de séries chronologiques, calculer les paramètres de corrélation et les utiliser?
Vous avez peut-être une bonne raison de ne pas le faire, mais cela ne ressort pas clairement de votre question.
la source