Mam macierz korelacji zwrotów bezpieczeństwa, których wyznacznikiem jest zero. (Jest to nieco zaskakujące, ponieważ macierz korelacji próbki i odpowiadająca jej macierz kowariancji powinny teoretycznie być określone dodatnio).
Moja hipoteza jest taka, że co najmniej jedno zabezpieczenie jest liniowo zależne od innych papierów wartościowych. Czy w R jest funkcja, która sekwencyjnie testuje każdą kolumnę pod kątem macierzy zależności liniowej?
Na przykład jednym podejściem byłoby zbudowanie macierzy korelacji po jednym zabezpieczeniu na raz i obliczenie wyznacznika na każdym etapie. Gdy wyznacznik = 0, zatrzymaj się, gdy zidentyfikujesz papier wartościowy, który jest liniową kombinacją innych papierów wartościowych.
Doceniane są wszelkie inne techniki identyfikacji zależności liniowej w takiej macierzy.
źródło
Odpowiedzi:
Wydaje się, że zadajesz naprawdę prowokujące pytanie: jak wykryć, biorąc pod uwagę szczególną macierz korelacji (lub kowariancję, lub sumę kwadratów i iloczynu), która kolumna jest liniowo zależna od tego. Przypuszczam, że operacja zamiatania mogłaby pomóc. Oto moja sonda w SPSS (nie R) do zilustrowania.
Wygenerujmy trochę danych:
Stwórzmy liniową zależność między V2, V4 i V5:
Zmodyfikowaliśmy naszą kolumnę V4.
Wydruki M w 5 iteracjach:
Zauważ, że ostatecznie kolumna 5 zapełniła się zerami. Oznacza to (jak rozumiem), że V5 jest liniowo związany z niektórymi poprzednimi kolumnami. Które kolumny? Spójrz na iterację, w której ostatnia kolumna 5 nie jest pełna zer - iteracja 4. Widzimy tam, że V5 jest powiązane z V2 i V4 o współczynnikach -3333 i .8333: V5 = -33333 * V2 + .8333 * V4, co odpowiada do tego, co zrobiliśmy z danymi: V4 = .4 * V2 + 1.2 * V5.
W ten sposób wiedzieliśmy, która kolumna jest liniowo powiązana z którą inną. Nie sprawdziłem, jak pomocne jest powyższe podejście w bardziej ogólnym przypadku z wieloma grupami współzależności w danych. W powyższym przykładzie okazało się to jednak pomocne.
źródło
Oto proste podejście: oblicz rangę macierzy wynikającą z usunięcia każdej kolumny. Kolumny, które po usunięciu dają najwyższą rangę, są liniowo zależne (ponieważ usunięcie ich nie zmniejsza rangi, a usunięcie liniowo niezależnej kolumny powoduje).
W R:
źródło
system is exactly singular: U[5,5] = 0
, który, jak wiem, oznacza, że problemem była kolumna 5 (wydaje się oczywista z perspektywy czasu, ponieważ jest to kolumna zer!)your.matrix = matrix(1:4, 2)
?Pytanie dotyczy „identyfikowania podstawowych [liniowych] zależności” między zmiennymi.
Szybkim i łatwym sposobem na wykrycie związków jest regresja dowolnej innej zmiennej (użycie stałej, nawet) względem tych zmiennych za pomocą ulubionego oprogramowania: każda dobra procedura regresji wykryje i zdiagnozuje kolinearność. (Nie będziesz nawet zawracał sobie głowy spoglądaniem na wyniki regresji: polegamy tylko na użytecznym skutku ubocznym konfiguracji i analizy macierzy regresji.)
Przy założeniu wykrycia kolinearności, co dalej? Analiza głównych składników (PCA) jest dokładnie tym, czego potrzeba: jej najmniejsze składniki odpowiadają relacjom prawie liniowym. Zależności te można odczytać bezpośrednio z „obciążeń”, które są liniowymi kombinacjami pierwotnych zmiennych. Małe ładunki (to znaczy te związane z małymi wartościami własnymi) odpowiadają prawie kolinearnościom. Wartość własna odpowiadałaby idealnej relacji liniowej. Nieco większe wartości własne, które są nadal znacznie mniejsze niż największe, odpowiadają przybliżonym relacjom liniowym.0
(Istnieje sztuka i sporo literatury związanej z identyfikowaniem, czym jest „małe” obciążenie. W celu modelowania zmiennej zależnej sugerowałbym włączenie jej do zmiennych niezależnych w PCA w celu identyfikacji składników - niezależnie od ich rozmiary - w których zmienna zależna odgrywa ważną rolę. Z tego punktu widzenia „mały” oznacza znacznie mniejszy niż jakikolwiek taki element.)
Spójrzmy na kilka przykładów. (Te służą
R
do obliczeń i kreślenia.) Rozpocznij od funkcji wykonywania PCA, wyszukiwania małych komponentów, kreślenia ich i zwracania między nimi relacji liniowych.sweep
Dane wyjściowe związane z lewym górnym panelem to
Wyjście dla górnego środkowego panelu było
W praktyce często nie jest tak, że jedną zmienną wyróżnia się jako oczywistą kombinację pozostałych: wszystkie współczynniki mogą mieć porównywalne rozmiary i różne znaki. Ponadto, gdy istnieje więcej niż jeden wymiar relacji, nie ma unikalnego sposobu ich określenia: konieczna jest dalsza analiza (taka jak redukcja wierszy) w celu zidentyfikowania użytecznej podstawy dla tych relacji. Tak działa świat: wszystko, co możesz powiedzieć, to to, że te konkretne kombinacje, które są generowane przez PCA, prawie nie zmieniają danych. Aby sobie z tym poradzić, niektóre osoby wykorzystują największe („główne”) komponenty bezpośrednio jako zmienne niezależne w regresji lub późniejszej analizie, bez względu na to, jaką by ona nie przyjęła. Jeśli to zrobisz, nie zapomnij najpierw usunąć zmiennej zależnej z zestawu zmiennych i powtórzyć PCA!
Oto kod do odtworzenia tej liczby:
(Musiałem manipulować progiem w przypadkach o dużym błędzie, aby wyświetlić tylko jeden komponent: to jest powód podania tej wartości jako parametru
process
).Użytkownik ttnphns uprzejmie skierował naszą uwagę na ściśle powiązany wątek. Jedna z odpowiedzi (autorstwa JM) sugeruje opisane tutaj podejście.
źródło
"loadings," which are linear combinations of the original variables
princomp
źródło
Zetknąłem się z tym problemem około dwa tygodnie temu i zdecydowałem, że muszę go ponownie odwiedzić, ponieważ w przypadku ogromnych zestawów danych niemożliwe jest zrobienie tych rzeczy ręcznie.
Utworzyłem pętlę for (), która oblicza pozycję macierzy po jednej kolumnie na raz. Tak więc dla pierwszej iteracji ranga będzie wynosić 1. Druga, 2. Dzieje się tak, dopóki ranga nie będzie MNIEJSZA niż numer kolumny, którego używasz.
Bardzo proste:
podział pętli for ()
Jestem pewien, że możesz dodać instrukcję if, nie potrzebuję jej jeszcze, ponieważ mam do czynienia tylko z 50 kolumnami.
Mam nadzieję że to pomoże!
źródło
Ranga matrycy = liczba liniowo niezależnych kolumn (lub rzędów) macierzy. O n o n macierzy A , stopień (A) = n => (wszystkie kolumny i rzędy) są liniowo niezależne.
źródło
Nie chodzi o to, że odpowiedź udzielona przez Whuber naprawdę wymaga rozszerzenia, ale pomyślałem, że przedstawię krótki opis matematyki.
Cytowania
Montgomery, D. (2012). Wprowadzenie do analizy regresji liniowej, wydanie 5. John Wiley & Sons Inc.
źródło