Lubię mieć kontrolę nad obiektami, które tworzę, nawet jeśli mogą one być dowolne.
Rozważmy zatem, że wszystkie możliwe macierze kowariancji Σ można wyrazić w postacin×nΣ
Σ=P′ Diagonal(σ1,σ2,…,σn) P
gdzie jest macierzą ortogonalną, a σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 .Pσ1≥σ2≥⋯≥σn≥0
Geometrycznie opisuje to strukturę kowariancji z zakresem głównych składników wielkości . Składniki te wskazują w kierunkach rzędami P . Zobacz liczby w Analiza sensu analizy głównych składowych, wektorów własnych i wartości własnych dla przykładów z n = 3 . Ustawienie Ď i ustawi wielkości tych kowariancji i ich względnych rozmiarów, a tym samym ustalenia dowolny kształt elipsoidalny. Rzędy P orientują osie kształtu według własnego uznania.σiPn=3σiP
Jedną z korzyści algebraicznych i obliczeniowych tego podejścia jest to, że gdy , Σ jest łatwo odwracane (co jest powszechną operacją na macierzach kowariancji):σn>0Σ
Σ−1=P′ Diagonal(1/σ1,1/σ2,…,1/σn) P.
Nie przejmujesz się kierunkami, a jedynie zakresami rozmiarów ? W porządku: możesz łatwo wygenerować losową macierz ortogonalną. Wystarczy owinąć n 2 standardowe wartości normalne w macierz kwadratową, a następnie ortogonalizować. Prawie na pewno zadziała (pod warunkiem, że n nie jest ogromny). Dokonuje tego rozkład QR, jak w tym kodzieσin2n
n <- 5
p <- qr.Q(qr(matrix(rnorm(n^2), n)))
Działa to, ponieważ wygenerowany w ten sposób -zmienny rozkład wielomianowy jest „eliptyczny”: jest niezmienny we wszystkich rotacjach i odbiciach (poprzez pochodzenie). Zatem wszystkie ortogonalne macierze są generowane równomiernie, jak argumentowano w Jak generować równomiernie rozmieszczone punkty na powierzchni sfery jednostkowej 3-d? .n
Szybki sposób na uzyskanie z P i σ i , po ich określeniu lub utworzeniu, wykorzystuje i wykorzystuje ponowne użycie tablic w operacjach arytmetycznych, jak w tym przykładzie z σ = ( σ 1 , … , σ 5 ) = ( 5 , 4 , 3 , 2 , 1 ) :ΣPσicrossprod
R
σ=(σ1,…,σ5)=(5,4,3,2,1)
Sigma <- crossprod(p, p*(5:1))
W ramach kontroli rozkład wartości w liczbie pojedynczej powinien zwracać zarówno jak i P ′ . Możesz to sprawdzić za pomocą poleceniaσP′
svd(Sigma)
Odwrotność Sigma
oczywiście uzyskuje się jedynie przez zmianę mnożenia przez na dzielenie:σ
Tau <- crossprod(p, p/(5:1))
Możesz to sprawdzić, przeglądając zapsmall(Sigma %*% Tau)
, która powinna być matrycą tożsamości . Uogólnione odwrotny (niezbędne do obliczenia regresji) otrzymuje się przez zastąpienie któregokolwiek σ i ≠ 0 o 1 / σ I , dokładnie tak, jak powyżej, ale zachowując wszystkie zera między Ď i jak są.n×nσi≠01/σiσi