Folgendes problem beschäftigt mich gerade - ist es wirklich so nicht-trivial oder sehe ich nur den Wald vor lauter Bäumen nicht?
Für eine Monte-Carlo Simulation muss ich Kovarianzmatrizen nach bestimmten Kriterien zufällig generieren.
Eine Matrix ist genau dann eine Kovarianzmatrix, wenn sie positiv semi-definit, speziell sollte sie hier positiv definit sein.
Die Kovarianzmatrix (n x n) für ca. n<20 hat n*(n+1)/2 Einträge, nämlich n Varianzen s_ii und n*(n-1)/2 Kovarianzen s_ij, i<>j, da sie symmetrisch ist, also s_ij = s_ji.
Für jede Varianz/Kovarianz s_ij gibt es ein Intervall [u_ij, o_ij], in dem zufällige Wert s_ij liegen soll, aus jedem Intervall wird gleichverteilt gezogen.
Jetzt zum Problem: Offensicht ist eine symmetrische Matrix, welche man nur aus diesen Kriterien erstellt nicht notwendigerweise positiv (semi-)definit. Aus der Symmetrie und den nur reellen Einträgen weiß ich, dass alle Eigenwerte reell sind aber nicht, dass alle positiv sind.
Es muss also Einschränkungen an die Intervalle bzw. die Zufallszahlen geben welche sichern, dass alle EWs > 0 sind <=> die Matrix positiv definit ist.
In der Anwendung ist die Variabilität bzw. die Intervallgröße bei einigen Nebendiagonalelementen viel größer (1-1,5 Größenordnungen) als die der Haputdiagonalelemente. Da für positive Definitheit der Durchschnitt über alle Nebendiagonalelemente < dem Durchschnitt über alle Hauptdiagonalelemente sein muss, bekomme ich da schon häufig Probleme.
Wie sollte man am besten die zufällige positiv definite Matrix innerhalb der Grenzen ohne systematischen bias generieren?
Geht man der Reihe nach vor, hat man für die ertsen Elemente noch die vollen, individuellen Intervalle zur Auswahl, für die letzten dann fast keine Variabilität mehr. Um keinen systematischen bias "hinten" zu haben, könnte ich die Reihenflge der Elemente würfeln - nur irgendwie erscheint mir dieser Ansatz nicht so toll.
Weiterhin weiß man, dass sich jede positiv definite Matriz C in Wurzeln FF' = C mit Dimension F (n x m) zerfällen lässt. An diese könnte man dann die Forderungen stellen, nur hat man dann immer Summen von Produkten für jedes Element zu beachten...
Gibt es noch weitere Ideen für die Vorgehensweise? Reiner brute force mit ziehen und verwerfen funktioniert bei der Größenordnung nicht mehr (es wird praktisch nie zufällig eine positiv definite Matrix generiert), außerdem will ich kein MC innerhalb einer MC-Simulation haben.
Wenn ihr Paper zum Thema wisst, bitte auch hier posten.