To nie jest błąd.
Jak zbadaliśmy (obszernie) w komentarzach, dzieją się dwie rzeczy. Po pierwsze, kolumny U są ograniczone do spełnienia wymagań SVD: każda musi mieć długość jednostki i być prostopadła do wszystkich pozostałych. Przedstawiamy U jako zmiennej losowej utworzonej z losowej macierzy X poprzez konkretnego algorytmu SVD, że w ten sposób zwrócić uwagę, że te k ( k + 1 ) / 2 funkcjonalnie niezależne ograniczenia tworzenia zależności statystycznych między kolumnami U .
Zależności te można ujawnić w większym lub mniejszym stopniu poprzez badanie korelacji między składowymi U , ale pojawia się drugie zjawisko : rozwiązanie SVD nie jest unikalne. Co najmniej każdą kolumnę U można niezależnie negować, co daje co najmniej 2)k różnych rozwiązań z k kolumnami. Silne korelacje (powyżej 1 / 2 ) może być wywołane przez zmianę znaku kolumn odpowiednio. (Jednym ze sposobów, aby to zrobić jest podana w moim pierwszym komentarzu do odpowiedzi ameba jest w tym wątku: wymusić wszystko uja ja, i = 1 , … , k aby mieć ten sam znak, co powoduje, że wszystkie są ujemne lub wszystkie dodatnie z jednakowym prawdopodobieństwem). Z drugiej strony można wyeliminować wszystkie korelacje, wybierając znaki losowo, niezależnie, z jednakowymi prawdopodobieństwami. (Podam przykład poniżej w sekcji „Edycja”).
Ostrożnie, możemy częściowo odróżnić oba te zjawiska podczas czytania macierze rozrzutu składników U . Pewne cechy charakterystyczne - takie jak pojawienie się punktów prawie równomiernie rozmieszczonych w dobrze określonych regionach kołowych - wskazują na brak niezależności. Inne, takie jak wykresy rozrzutu pokazujące wyraźne niezerowe korelacje, oczywiście zależą od wyborów dokonanych w algorytmie - ale takie wybory są możliwe tylko z powodu braku niezależności.
Ostatecznym testem algorytmu rozkładu takiego jak SVD (lub Cholesky, LR, LU itp.) Jest to, czy robi to, co twierdzi. W tej sytuacji wystarczy sprawdzić, czy gdy SVD zwraca potrójną macierz ( U, D , V) , X jest odzyskiwane, aż do przewidywanego błędu zmiennoprzecinkowego, przez iloczyn UD V.′ ; że kolumny U i V. są ortonormalne; i że re jest ukośne, jego elementy ukośne są nieujemne i są ułożone w porządku malejącym. Zastosowałem takie testy do svd
algorytmu wR
i nigdy nie stwierdziłem, że to pomyłka. Chociaż nie jest to żadna gwarancja, że jest całkowicie poprawne, takie doświadczenie - które, jak sądzę, jest podzielane przez wielu ludzi - sugeruje, że każdy błąd wymagałby nadzwyczajnego wkładu, aby się ujawnić.
Poniżej znajduje się bardziej szczegółowa analiza konkretnych kwestii poruszonych w pytaniu.
Korzystając R
z svd
procedury, najpierw możesz sprawdzić, czy wraz ze wzrostem k korelacje między współczynnikami U maleją, ale wciąż są niezerowe. Jeśli po prostu wykonasz większą symulację, przekonasz się, że są one znaczące. (Gdy k = 3 powinno wystarczyć 50000 iteracji.) W przeciwieństwie do twierdzenia w pytaniu, korelacje „nie znikają całkowicie”.
Po drugie, lepszym sposobem na zbadanie tego zjawiska jest powrót do podstawowej kwestii niezależności współczynników. Chociaż w większości przypadków korelacje są bliskie zeru, brak niezależności jest wyraźnie widoczny. Jest to najbardziej widoczna przez badania pełnej wielowymiarowego rozkład współczynników U . Charakter rozkładu pojawia się nawet w małych symulacjach, w których niezerowych korelacji nie można (jeszcze) wykryć. Na przykład zbadaj macierz rozrzutu współczynników. Aby było to wykonalne, ustawiłem rozmiar każdego symulowanego zestawu danych na 4 i utrzymałem k = 2 , rysując w ten sposób 1000realizacje macierzy U 4 × 2 , tworząc macierz 1000 × 8 . Oto pełna macierz wykresów rozrzutu, ze zmiennymi wymienionymi według ich pozycji w U :U1000 × 8U
Skanowanie pierwszej kolumny ujawnia interesujący brak niezależności między u11 a drugim uI j : spójrz na przykład, jak górna ćwiartka wykresu rozrzutu z u21 jest na przykład prawie pusta; lub zbadaj eliptyczną chmurę opadającą opisującą relację ( u11, u22) i chmurę opadającą w dół dla pary ( u21, u12) . Bliższe spojrzenie ujawnia wyraźny brak niezależności wśród prawie wszystkich tych współczynników: bardzo niewiele z nich wygląda na zdalnie niezależnych, chociaż większość z nich wykazuje korelację bliską zeru.
(Uwaga: większość chmur kołowych to rzuty z hipersfery stworzonej przez warunek normalizacji wymuszający jedność kwadratów wszystkich składników każdej kolumny.)
Matryce wykresów rozrzutu o k = 3 i k = 4 wykazują podobne wzorce: zjawiska te nie są ograniczone do k = 2 , ani nie zależą od wielkości każdego symulowanego zestawu danych: po prostu trudniej jest je wygenerować i zbadać.
Wyjaśnienia dotyczące tych wzorców dotyczą algorytmu stosowanego do uzyskania U w rozkładzie liczby pojedynczej, ale wiemy, że takie wzorce nie-niezależności muszą istnieć dzięki bardzo definiującym właściwościom U : ponieważ każda kolejna kolumna jest (geometrycznie) ortogonalna w stosunku do poprzedniego te warunki ortogonalności narzucają zależności funkcjonalne między współczynnikami, co przekłada się na zależności statystyczne między odpowiadającymi zmiennymi losowymi.
Edytować
W odpowiedzi na komentarze warto zwrócić uwagę na to, w jakim stopniu te zjawiska zależności odzwierciedlają podstawowy algorytm (do obliczenia SVD) i jak bardzo są one związane z charakterem procesu.
Te specyficzne wzorce korelacji między współczynnikami zależeć bardzo wiele na arbitralnych wyborów dokonywanych przez algorytm SVD, ponieważ rozwiązanie to nie jest wyjątkowy: kolumny U zawsze może być niezależnie mnożone przez - 1 lub 1 . Nie ma wewnętrznego sposobu wyboru znaku. Zatem, gdy dwa algorytmy SVD dokonują różnych (arbitralnych, a może nawet losowych) wyborów znaku, mogą one skutkować różnymi wzorami wykresów rozrzutu wartości ( uI j, uja′jot′) . Jeśli chcesz to zobaczyć, zamień stat
funkcję w poniższym kodzie na
stat <- function(x) {
i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
u <- svd(x[i, ])$u # Perform SVD
as.vector(u[order(i), ]) # Unpermute the rows of u
}
Ten pierwszy losowo porządkuje obserwacje x
, wykonuje SVD, a następnie stosuje odwrotną kolejność, u
aby dopasować oryginalną sekwencję obserwacji. Ponieważ efektem jest tworzenie mieszanin odbitych i obróconych wersji oryginalnych wykresów rozrzutu, wykresy rozrzutu w matrycy będą wyglądać znacznie bardziej jednolicie. Wszystkie przykładowe korelacje będą bardzo bliskie zeru (z założenia: podstawowe korelacje są dokładnie zerowe). Niemniej jednak brak niezależności będzie nadal oczywisty (w pojawiających się jednolitych okrągłych kształtach, szczególnie między uja , j i uja , j′ ).
Brak danych w niektórych kwadrantach niektórych oryginalnych wykresów rozrzutu (pokazanych na powyższym rysunku) wynika z tego, jak R
algorytm SVD wybiera znaki dla kolumn.
W konkluzjach nic się nie zmienia. Ponieważ druga kolumna U jest prostopadła do pierwszej, to (uważana za zmienną losową wielowymiarową) jest zależna od pierwszej (również uważana za zmienną losową wielowymiarową). Nie możesz mieć wszystkich składników jednej kolumny niezależnych od wszystkich składników drugiej; wszystko, co możesz zrobić, to spojrzeć na dane w sposób, który przesłania zależności - ale zależność będzie się utrzymywać.
Oto zaktualizowany R
kod do obsługi przypadków k > 2 i narysowania części macierzy wykresu rozrzutu.
k <- 2 # Number of variables
p <- 4 # Number of observations
n <- 1e3 # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")