Pytanie:
Nie można obliczyć odwrotności macierzy, gdy wyznacznik jest różny od zera
Rex.32
2016-01-14 01:17:37 UTC
view on stackexchange narkive permalink

Próbowałem obliczyć regresję OLS w R , kiedy zobaczyłem dziwne rzeczy. Odwrotność macierzy kwadratowej nie istnieje wtedy i tylko wtedy, gdy wyznaczniki są równe 0. Również macierz musi mieć pełny rząd.

Więc nie jestem pewien, jak to możliwe:

  > dim (X) [1] 20000 51> det (t (X)% *% X) [1] 3.863823e + 161 # niezerowe rozwiązanie > (t (X)% *% X) Błąd w rozwiązaniu default (t (X)% *% X): system jest obliczeniowo osobliwy: odwrotny numer warunku = 3,18544e-17  

Dlaczego metodaolve () generuje błąd podczas próby obliczenia odwrotności, skoro wiemy, że wyznacznik nie jest zerem? Czego tu brakuje?

Sprawdziłem, czy macierz ma pełną rangę:

  > qr (t (X)% *% X) $ rank [1] 51  

Ale potem, aby przetestować dalej, przypisałem jedną z kolumn X do tej samej wartości innej:

  > X [, 2] = X [, 3]  

Zatem dwie kolumny macierzy X są teraz takie same.

  > qr (t (X)% *% X) $ rank [1] 50  

Teraz możemy potwierdzić, że macierz X'X nie ma pełnej rangi.

  > det ( t (X)% *% X) [1] 1,634637e + 138  

Ale wyznacznik nadal nie jest równy 0? Jak to możliwe i czego mi brakuje?

Ogólnie rzecz biorąc, nie ma potrzeby odwracania macierzy, aby rozwiązać regresję OLS.Znacznie lepszą strategią jest jawne rozwiązanie układu równań.
Więcej informacji na temat punktu Mateusza można znaleźć tutaj.http://stats.stackexchange.com/questions/160179/do-we-need-gradient-descent-to-find-the-coefficients-of-a-linear-regression-mode/164164#164164 Ale ogólnie kluczlekcja, której nauczysz się podczas wykonywania matematyki na komputerach, jest taka, że formuły takie jak zwykłe równanie są czasami mało * praktyczne * użyteczne, nawet jeśli są matematycznie pomocne.
@MatthewDrury@user777 Zdaję sobie sprawę, że można użyć SVD i pseudoinwersji Moore-Penrose'a, czyli QR… nie o to mi chodziło w zadawaniu tego pytania.Chodziło po prostu o pozorne naruszenie twierdzenia o odwracalnej macierzy.
@Roxxy.32 Wiemy o tym, dlatego zamiast odpowiedzi zamieszczaliśmy komentarze.Ogólnie rzecz biorąc, kultura w tym miejscu polega na oferowaniu w komentarzach wszystkiego, co naszym zdaniem może być pomocne, w perspektywie długoterminowej lub krótkoterminowej, zachowując odpowiedzi na konkretne pytanie.Nie martw się, jeśli powiemy Ci coś, co już wiesz, ponieważ istnieje duża szansa, że ktoś w przyszłości znajdzie Twoje pytanie i uzna komentarze za pomocne.
To może być pomocne - świat liczb z punktu widzenia komputera: https://ideas.repec.org/p/boc/scon14/22.html.Bardziej dramatyczne wyjaśnienie błędu zaokrąglenia znajduje się tutaj: http://www.imdb.com/title/tt0151804/.
Trzy odpowiedzi:
John
2016-01-14 01:46:49 UTC
view on stackexchange narkive permalink

Domyślam się, że liczby są zbyt duże (wyznacznik jest duży) i napotykasz problem obliczeniowy.

Udało mi się odtworzyć Twój błąd, uruchamiając:

  > X <- cbind (1, exp (rexp (100, rate = 1/50))) > det (t (X)% *% X) [1] 5.156683e + 126> solution (t (X)% *% X) > Błąd w parametrze solv.default ...  

problem jest liczbowy. Możesz być w stanie to rozwiązać, dokonując transformacji swojej macierzy $ X $, która zmniejsza liczby, ale pozwala obliczyć, czym jest $ \ left (X'X \ right) ^ {- 1} $.

wydaje się być casem, dziękuję.Jest to sprzeczne z intuicją, ponieważ moja macierz X jest wyśrodkowana wokół 0 i nie ma wartości większych w abs niż 15, ale wydaje się, że `t (X)% *% X` utworzyło dużą liczbę z powodu samej objętości, jednak nie większej niżE ^ 6.
Gdy współczynniki są rzędu 10 ^ 6 $, liczby biorące udział w wyznaczniku 51 $ \ razy 51 $ są rzędu $ (10 ^ 6) ^ {51} = 10 ^ {306} $.Jeśli skończysz z wynikiem 10 $ ^ {161} $, możesz stracić do 145 $ znaczących liczb!
AdamO
2016-01-14 05:17:26 UTC
view on stackexchange narkive permalink

Metoda wyznacznika różni się od metody odwracania macierzy. Wyznacznik używa dolnej górnej dekompozycji. Wyznacznikiem produktu jest iloczyn determinantów. L jest w przybliżeniu bardzo mała, a U jest w przybliżeniu bardzo duża. Przy 16-punktowej dokładności cyfry bardzo mała liczba jest zaokrąglana za duża, a iloczyn wybucha, gdy faktycznie wynosi 0.

Ufałbym poleceniu rozwiązuj. Macierz jest pojedyncza. Pomoc r mówi „nie należy używać det do rozwiązywania problemów”.

achompas
2016-01-14 01:40:53 UTC
view on stackexchange narkive permalink

Wygląda na to, że jest podobne pytanie i proponuję podobne badanie.

Jaki jest numer warunku twojej macierzy? Twoja macierz może być prawie pojedyncza, chociaż podejrzewam, że jest to mało prawdopodobne.

A co ze skalą X $? Jakie są jego maksymalne wartości? Twój wyznacznik może być przepełniony z powodu problemów ze skalowaniem, w takim przypadku możesz zmniejszyć wartości macierzy o jakiś stały współczynnik.

Zgadzam się również z komentatorami - nie ma potrzeby jawnego odwracania macierzy do rozwiązać regresję liniową.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...