Zum Beispiel ist R
die MASS::mvrnorm()
Funktion in nützlich, um Daten zu generieren, um verschiedene Dinge in der Statistik zu demonstrieren. Ein obligatorisches Sigma
Argument ist eine symmetrische Matrix, die die Kovarianzmatrix der Variablen angibt. Wie würde ich eine symmetrische Matrix mit beliebigen Einträgen erstellen ?
21
Antworten:
Erstelle eine Matrix mit beliebigen WertenAn × n EIN
Verwenden Sie dann als Kovarianzmatrix.Σ = ATEIN
Beispielsweise
quelle
Sigma <- A + t(A)
.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 Σ
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σich P n = 3 σich P
Ein algebraischer und rechnerischer Vorteil dieses Ansatzes besteht darin, dass, wenn , leicht invertiert wird (was eine übliche Operation für Kovarianzmatrizen ist):Σσn>0 Σ
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σi n2 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 σi σ=(σ1,…,σ5)=(5,4,3,2,1)
crossprod
R
Zur Überprüfung sollte die Singularwertzerlegung sowohl als auch . Sie können es mit dem Befehl überprüfenP ′σ P′
Die Umkehrungσ
Sigma
erhält man natürlich nur, indem man die Multiplikation mit in eine Division :Sie können dies überprüfen, indem Sien×n σi≠0 1/σi σi
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 σ iquelle
svd(Sigma)
neu geordnet werden - das hat mich eine Minute verwirrt.Sie können zufällige positiv definierte Matrizen aus der Wishart-Distribution mit der Funktion "rWishart" aus dem weit verbreiteten Paket "stats" simulieren.
quelle
Es gibt ein spezielles Paket dafür
clusterGeneration
(geschrieben unter anderem von Harry Joe, einem großen Namen auf diesem Gebiet).Es gibt zwei Hauptfunktionen:
genPositiveDefMat
Generieren Sie eine Kovarianzmatrix, 4 verschiedene Methodenrcorrmatrix
: Korrelationsmatrix erzeugenEin kurzes Beispiel:
Erstellt am 27.10.2019 durch das Paket reprex (v0.3.0)
Beachten Sie schließlich, dass ein alternativer Ansatz darin besteht, einen ersten Versuch von Grund auf durchzuführen und dann
Matrix::nearPD()
Ihre Matrix positiv zu definieren.quelle