2011-01-17 5 views
0

Je réalise un projet qui consiste, entre autres, à réaliser des séries temporelles où l'une des parties stochastiques de l'évolution temporelle de plusieurs séries a une covariance spécifique. Le problème est que beaucoup de mes projets exigent que j'aie au moins un certain contrôle sur la covariance entre les différentes séries chronologiques, et je n'ai pas trouvé de moyen (avec une vitesse relative) de trouver des matrices de covariance. du tout dès que la taille dépasse ~ 30.Comment créer une matrice de covariance/corrélation (grande)?

Donc, pour résumer:
Je veux réaliser des matrices symétriques avec n ~ 50 qui ont le nombre voulu dans certains endroits, zéro dans les autres et sont semi-définie positive (MATLABs cholcov ne demande semidefiniteness, heureusement).

Je souhaite sincèrement que quelqu'un ait au moins une idée!

// Niffe

PS: J'ai travaillé dans Matlab jusqu'à présent, mais je suis ouvert à d'autres langues, et aussi des solutions en rien que les mathématiques.

+0

@Niffe À quoi ressemble votre contribution? Juste un vecteur avec des signaux au fil du temps? Ou deux signaux à corréler? Ou autre chose? – Marnix

+0

@ Marnix- Les covariances vont être utilisées pour créer des timeseries de processus lévy, donc avant d'avoir les covariancematrices je n'ai fondamentalement pas d'entrée. Mais quand j'aurai trouvé la meilleure façon de créer les matrices, je serai Choleskyfactoring et je les multiplierai avec des distributions normales multivariées. – Niffe

+0

@Niffe: ok je sais comment obtenir des covariances et tout, mais en les créant à la main, aura encore besoin d'entrée droit? Vous ne pouvez pas créer une matrice de cov à partir de rien? Je pense que je ne peux pas vous aider alors;) – Marnix

Répondre

4

Maintenant, je peux enfin répondre, je pense. Ce que vous voulez dépend entièrement du type de distribution que vous voulez avoir. Par exemple, vous pourriez penser à une distribution gaussienne/normale. Si vous avez votre matrice de covariance, vous pouvez le faire en venant du MATLAB site.

Générer des valeurs à partir d'une distribution normale bivariée avec une matrice de covariance et un vecteur moyen spécifiés.

mu = [1 2]; 
Sigma = [1 .5; .5 2]; R = chol(Sigma); 
z = repmat(mu,100,1) + randn(100,2)*R; 

Mais bien sûr, vous pouvez faire tout type de processus avec cela. Comme je peux le voir dans vos commentaires, vous voulez générer des données aléatoires. C'est ça. Générer plus de matrices de covariance à partir d'une matrice de covariance n'a aucun sens pour moi.

+0

Merci, c'est bon! Mais je veux pouvoir utiliser cette méthode pour 50 séries temporelles différentes, au lieu de deux, ce qui signifie que j'ai besoin d'avoir la capacité de créer un SIGMA 50x50 symétrique et positif (semi-) défini (semi-si j'utilise le commandement cholcov au lieu du chol cholimov. Donc, la chose que je veux pouvoir faire est de spécifier comment je veux que les différentes timeseries coïncident (ce qui n'est probablement pas un mot, mais je pense que c'est clair dans le contexte) et d'obtenir une matrice de covariance (50x50) Je peux alors prendre la racine carrée de la matrice de. Je suis vraiment désolé si je n'étais pas clair pour commencer. – Niffe

+0

@Niffe Pourquoi cela ne serait-il pas possible? Créez simplement une fonction quelconque qui renvoie une matrice 50x50 avec des covariances. Vous pouvez donc créer une matrice gaussienne 50x50 et l'utiliser pour créer votre signal. Je ne vois pas pourquoi cela ne serait pas possible. – Marnix

+0

@Marnix la raison principale est que la matrice générale qui vient d'être fabriquée n'est pas définie positive (imposer les symétries nécessaires pour qu'une matrice soit une matrice de covariance est bien sûr trivial). Au moins c'est ce que j'ai eu avec des problèmes jusqu'à présent, ou peut-être il y a quelque chose d'autre que j'ai complètement manqué. – Niffe

Questions connexes