Ich habe eine Korrelationsmatrix von Sicherheitsrenditen, deren Determinante Null ist. (Dies ist ein wenig überraschend, da die Stichprobenkorrelationsmatrix und die entsprechende Kovarianzmatrix theoretisch eindeutig positiv sein sollten.)
Meine Hypothese ist, dass mindestens ein Wertpapier linear von anderen Wertpapieren abhängig ist. Gibt es eine Funktion in R, die nacheinander für jede Spalte eine Matrix auf lineare Abhängigkeit prüft?
Ein Ansatz wäre beispielsweise, eine Korrelationsmatrix nacheinander aufzubauen und die Determinante bei jedem Schritt zu berechnen. Wenn die Determinante = 0 ist, hören Sie auf, da Sie das Wertpapier identifiziert haben, bei dem es sich um eine lineare Kombination anderer Wertpapiere handelt.
Beliebige andere Techniken zum Identifizieren der linearen Abhängigkeit in einer solchen Matrix sind erwünscht.
quelle
Antworten:
Sie scheinen eine wirklich herausfordernde Frage zu stellen: Wie lässt sich bei einer singulären Korrelations- (oder Kovarianz- oder Quadratsummen- und Kreuzprodukt-) Matrix feststellen, welche Spalte linear von welcher abhängt? Ich nehme vorläufig an, dass eine Kehroperation helfen könnte. Hier ist meine Sonde in SPSS (nicht R) zu veranschaulichen.
Lassen Sie uns einige Daten generieren:
Erstellen wir eine lineare Abhängigkeit zwischen V2, V4 und V5:
Also haben wir unsere Spalte V4 modifiziert.
Die Ausdrucke von M in 5 Iterationen:
Beachten Sie, dass Spalte 5 schließlich mit Nullen gefüllt wurde. Dies bedeutet (so wie ich es verstehe), dass V5 linear mit einigen vorhergehenden Spalten verknüpft ist . Welche Spalten? Schauen Sie sich die Iteration an, in der Spalte 5 zuletzt nicht mit Nullen gefüllt ist - Iteration 4. Wir sehen dort, dass V5 mit den Koeffizienten -.3333 und .8333 mit V2 und V4 verknüpft ist: V5 = -.3333 * V2 + .8333 * V4, was entspricht Was wir mit den Daten gemacht haben: V4 = .4 * V2 + 1.2 * V5.
So wussten wir, welche Spalte linear mit welcher anderen verknüpft ist. Ich habe nicht überprüft, wie hilfreich der obige Ansatz im Allgemeinen bei vielen Gruppen von Abhängigkeiten in den Daten ist. Im obigen Beispiel schien es jedoch hilfreich zu sein.
quelle
Hier ist ein einfacher Ansatz: Berechnen Sie den Rang der Matrix, der sich aus dem Entfernen der einzelnen Spalten ergibt. Die Spalten, deren Entfernung den höchsten Rang ergibt, sind linear abhängig (da das Entfernen dieser Spalten den Rang nicht verringert, während das Entfernen einer linear unabhängigen Spalte dies tut).
In R:
quelle
system is exactly singular: U[5,5] = 0
, von dem ich jetzt weiß, dass Spalte 5 das Problem war (im Nachhinein scheint es offensichtlich zu sein, da es sich um eine Spalte mit Nullen handelt!)your.matrix = matrix(1:4, 2)
?Bei der Frage geht es darum, "zugrunde liegende [lineare] Beziehungen" zwischen Variablen zu identifizieren.
Die schnelle und einfache Methode zum Erkennen von Beziehungen besteht darin, mithilfe Ihrer bevorzugten Software eine andere Variable (verwenden Sie eine Konstante, gerade) gegen diese Variablen zu regressieren: Mit jeder guten Regressionsprozedur wird die Kollinearität erkannt und diagnostiziert. (Sie werden sich nicht einmal die Regressionsergebnisse ansehen müssen. Wir verlassen uns lediglich auf einen nützlichen Nebeneffekt beim Einrichten und Analysieren der Regressionsmatrix.)
(Es gibt eine Kunst und eine Menge Literatur, die sich mit der Identifizierung einer "kleinen" Belastung befasst. Um eine abhängige Variable zu modellieren, würde ich vorschlagen, sie in die unabhängigen Variablen in der PCA aufzunehmen, um die Komponenten zu identifizieren - unabhängig davon ihre Größen - wobei die abhängige Variable eine wichtige Rolle spielt. Aus dieser Sicht bedeutet "klein" viel kleiner als jede solche Komponente.)
Schauen wir uns einige Beispiele an. (Diese werden
R
für die Berechnungen und das Plotten verwendet.) Beginnen Sie mit einer Funktion zum Durchführen von PCA, suchen Sie nach kleinen Komponenten, zeichnen Sie sie und geben Sie die linearen Beziehungen zwischen ihnen zurück.Wir sind alle bereit zu gehen: Es bleibt nur B zu generieren , ...B , … , E A = B + C+ D + E A = B + ( C+ D ) / 2 + E
sweep
Die Ausgabe im oberen linken Bereich war
Die Ausgabe für das obere mittlere Panel war
In der Praxis ist es häufig nicht der Fall, dass eine Variable als offensichtliche Kombination der anderen herausgegriffen wird: Alle Koeffizienten können vergleichbare Größen und unterschiedliche Vorzeichen haben. Wenn es mehr als eine Dimension von Beziehungen gibt, gibt es keine eindeutige Möglichkeit, sie zu spezifizieren: Weitere Analysen (z. B. Zeilenreduzierung) sind erforderlich, um eine nützliche Grundlage für diese Beziehungen zu ermitteln. So funktioniert die Welt: Alles, was Sie sagen können, ist, dass diese speziellen Kombinationen, die von PCA ausgegeben werden, nahezu keinen Schwankungen der Daten entsprechen. Um dies zu bewältigen, verwenden einige Leute die größten ("Haupt-") Komponenten direkt als unabhängige Variablen in der Regression oder der nachfolgenden Analyse, in welcher Form auch immer. Vergessen Sie in diesem Fall nicht, zuerst die abhängige Variable aus dem Variablensatz zu entfernen und die PCA zu wiederholen!
Hier ist der Code, um diese Figur zu reproduzieren:
(Ich musste in den Fällen mit großen Fehlern an der Schwelle herumspielen, um nur eine einzelne Komponente anzuzeigen. Dies ist der Grund, warum dieser Wert als Parameter für angegeben wurde
process
.)Benutzer ttnphns hat uns freundlicherweise auf einen eng verwandten Thread aufmerksam gemacht. Eine seiner Antworten (von JM) schlägt den hier beschriebenen Ansatz vor.
quelle
"loadings," which are linear combinations of the original variables
Diese Aussage sieht nicht präzise aus. Beladungen sind die Koeffizienten von Linearkombinationen von Komponenten in Vorhersagevariablen . Meinten Sie vielleicht A - 1?princomp
quelle
Ich bin vor ungefähr zwei Wochen auf dieses Problem gestoßen und habe festgestellt, dass ich es erneut prüfen muss, da es bei umfangreichen Datenmengen unmöglich ist, diese Dinge manuell auszuführen.
Ich habe eine for () - Schleife erstellt, die den Rang der Matrix spaltenweise berechnet. Für die erste Iteration ist der Rang also 1. Der zweite, 2. Dies geschieht so lange, bis der Rang WENIGER wird als die von Ihnen verwendete Spaltennummer.
Sehr einfach:
für () Schleifenzusammenbruch
Ich bin sicher, dass Sie eine if-Anweisung hinzufügen können, ich brauche sie noch nicht, da ich mich nur mit 50ish-Spalten befasse.
Hoffe das hilft!
quelle
Rang, r einer Matrix = Anzahl linear unabhängiger Spalten (oder Zeilen) einer Matrix. Für eine nxn- Matrix A ist Rang (A) = n => alle Spalten (oder Zeilen) sind linear unabhängig.
quelle
Nicht, dass die Antwort von @Whuber wirklich erweitert werden müsste, aber ich dachte, ich würde eine kurze Beschreibung der Mathematik geben.
Zitate
Montgomery, D. (2012). Einführung in die lineare Regressionsanalyse, 5. Auflage. John Wiley & Sons Inc.
quelle