Ich habe gerne die Kontrolle über die Objekte, die ich erstelle, auch wenn sie willkürlich sind.
Man bedenke also, dass alle möglichen Kovarianzmatrizen in der Form ausgedrückt werden könnenΣn × nΣ
Σ = P′ Diagonale ( σ1, σ2, … , Σn) P
Dabei ist eine orthogonale Matrix und .σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0Pσ1≥ σ2≥ ⋯ ≥ σn≥ 0
Geometrisch beschreibt dies eine Kovarianzstruktur mit einer Reihe von Hauptkomponenten der Größen . Diese Komponenten weisen in die Richtung der Reihen von . Beispiele mit Sie in den Abbildungen unter Erklären von Hauptkomponentenanalyse, Eigenvektoren und Eigenwerten . Durch Einstellen von werden die Größen der Kovarianzen und ihre relativen Größen festgelegt, wodurch eine beliebige Ellipsoidform bestimmt wird. Die Reihen richten die Achsen der Form nach Ihren Wünschen aus. P n = 3 σ i PσichPn = 3σichP
Ein algebraischer und rechnerischer Vorteil dieses Ansatzes besteht darin, dass, wenn , leicht invertiert wird (was eine übliche Operation für Kovarianzmatrizen ist):Σσn>0Σ
Σ−1=P′ Diagonal(1/σ1,1/σ2,…,1/σn) P.
Kümmern Sie sich nicht um die Richtungen, sondern nur um die Größenbereiche des ? Das ist in Ordnung: Sie können leicht eine zufällige orthogonale Matrix erzeugen. Wickle einfach iid Normwerte in eine quadratische Matrix und orthogonalisiere sie. Es wird fast sicher funktionieren (vorausgesetzt, ist nicht riesig). Die QR-Dekomposition erledigt dies wie in diesem Coden 2 nσin2n
n <- 5
p <- qr.Q(qr(matrix(rnorm(n^2), n)))
Dies funktioniert, weil die so erzeugte Multinormalverteilung mit Variablen "elliptisch" ist: Sie ist bei allen Rotationen und Reflexionen (durch den Ursprung) invariant. Somit werden alle orthogonalen Matrizen gleichmäßig erzeugt, wie unter Wie werden gleichmäßig verteilte Punkte auf der Oberfläche der 3D-Einheitskugel erzeugt? .n
Eine schnelle Methode, um aus und , nachdem Sie sie angegeben oder erstellt haben, verwendet und nutzt die Wiederverwendung von Arrays in arithmetischen Operationen, wie in diesem Beispiel mit :P σ i σ = ( σ 1 , … , σ 5 ) = ( 5 , 4 , 3 , 2 , 1 )ΣPσicrossprod
R
σ=(σ1,…,σ5)=(5,4,3,2,1)
Sigma <- crossprod(p, p*(5:1))
Zur Überprüfung sollte die Singularwertzerlegung sowohl als auch . Sie können es mit dem Befehl überprüfenP ′σP′
svd(Sigma)
Die Umkehrung Sigma
erhält man natürlich nur, indem man die Multiplikation mit in eine Division :σ
Tau <- crossprod(p, p/(5:1))
Sie können dies überprüfen, indem Sie zapsmall(Sigma %*% Tau)
die Identitätsmatrix anzeigen. Eine verallgemeinerte Inverse (wesentlich für Regressionsberechnungen) wird erhalten, indem jedes durch , genau wie oben, wobei alle Nullen unter dem so wie sie waren.σ i ≤ 0 1 / σ i σ in×nσi≠01/σiσi