2011-01-17 3 views
0

Ich mache ein Projekt, das unter anderem darin besteht, Zeitreihen zu erstellen, in denen einer der stochastischen Teile der Zeitentwicklung mehrerer Reihen eine spezifische Kovarianz hat. Das Problem ist, dass viele meiner Projekte verlangen, dass ich zumindest eine gewisse Kontrolle habe, wenn es darum geht, wie die Kovarianz zwischen den verschiedenen Zeitreihen aussieht, und ich habe keine Möglichkeit gefunden (mit relativer Geschwindigkeit) Kovarianzmatrizen zu finden sobald die Größe ~ 30 übersteigt.Wie erstelle ich eine gewünschte (große) Kovarianz/Korrelationsmatrix?

So zusammenzufassen:
I symmetrische Matrizen mit n ~ 50 machen wollen, die an bestimmten Orten gewünschten Zahlen haben, Null in anderen und sind positiv semidefinit (MATLABs cholcov nur Semidefinitheit verlangt, zum Glück).

Ich hoffe aufrichtig, dass jemand da draußen mindestens eine Idee hat!

// Niffe

PS: Ich habe bisher in MATLAB gearbeitet, bin aber offen für andere Sprachen, und auch Lösungen in nichts anderes als Mathematik.

+0

@Niffe Wie sieht Ihre Eingabe aus? Nur ein Vektor mit Signalen über die Zeit? Oder zwei Signale korrelieren? Oder etwas anderes? – Marnix

+0

@ Marnix- Die Kovarianzen werden für die Erstellung von Lévy-Prozess-Zeitreihen verwendet, also bevor ich die Kovarianzmatrizen habe, habe ich im Grunde keine Eingabe. Aber wenn ich den besten Weg gefunden habe, die Matrizen zu erstellen, werde ich sie mit Cholesky faktorisieren und mit multivariaten Normalverteilungen multiplizieren. – Niffe

+0

@Niffe: ok Ich weiß, wie man Kovarianzen und alle bekommen kann, aber sie von Hand zu erstellen, wird noch Input benötigt, oder? Sie können nicht einfach eine Cov-Matrix aus dem Nichts erstellen? Ich denke ich kann dir dann nicht helfen;) – Marnix

Antwort

4

Jetzt kann ich endlich antworten, denke ich.

Was Sie wollen, ist völlig abhängig von der Art der Verteilung, die Sie haben möchten.

Zum Beispiel könnte man sich eine Gauß/Normal-Verteilung vorstellen. Wenn Sie Ihre Kovarianzmatrix haben, können Sie dies tun, ausgehend von MATLAB site.

Generieren Sie Werte aus einer bivariaten Normalverteilung mit einer angegebenen Mittelwertvektor- und Kovarianzmatrix.

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

Aber natürlich könnte man mit diesem jede Art von Prozess zu tun. Wie ich in Ihren Kommentaren sehen kann, möchten Sie zufällige Daten generieren. Dies ist das. Mehr Kovarianzmatrizen aus einer Kovarianzmatrix zu generieren macht für mich keinen Sinn.

+0

Beitrag erhalten Danke, das ist gut! Aber ich möchte in der Lage sein, diese Methode für 50 verschiedene Zeitreihen anstelle von zwei zu verwenden, was bedeutet, dass ich die Fähigkeit haben muss, ein 50x50 SIGMA zu schaffen, das symmetrisch und positiv (halb-) definitiv ist (wenn ich es benutze) der cholcov Befehl anstelle des üblichen chol). Also möchte ich in der Lage sein zu spezifizieren, wie ich die verschiedenen Zeitreihen kovieren möchte (was wahrscheinlich kein Wort ist, aber ich denke, dass es im Kontext klar ist) und daraus eine Kovarianzmatrix (50x50) erhält Ich kann dann die Matrix Quadratwurzel von nehmen. Es tut mir wirklich leid, wenn ich zu Beginn unklar war. – Niffe

+0

@Niffe Warum sollte das nicht möglich sein? Erstellen Sie einfach eine Funktion, die eine 50x50-Matrix mit Kovarianzen zurückgibt. So könnten Sie sogar eine Gaußsche 50x50-Matrix erstellen und sie dann verwenden, um Ihr Signal zu erzeugen. Ich verstehe nicht, warum das nicht möglich ist. – Marnix

+0

@Marnix der Hauptgrund ist, dass die allgemeine Matrix, die nur fabriziert wird, nicht positiv definit ist (die Auferlegung der Symmetrien, die für eine Matrix benötigt werden, um eine Kovarianzmatrix zu sein, sind natürlich trivial). Zumindest habe ich damit Probleme gehabt, oder vielleicht habe ich noch etwas anderes verpasst. – Niffe