Mam wiele obserwacji na wielu odmianach i chciałbym ocenić gęstość prawdopodobieństwa dla wszystkich zmiennych. Zakłada się, że dane są zwykle dystrybuowane. Przy niskiej liczbie zmiennych wszystko działa tak, jakbym się spodziewał, ale przejście do większej liczby powoduje, że macierz kowariancji staje się niejednoznaczna.
Zmniejszyłem problem w Matlabie do:
load raw_data.mat; % matrix number-of-values x number of variables
Sigma = cov(data);
[R,err] = cholcov(Sigma, 0); % Test for pos-def done in mvnpdf.
Jeśli err> 0, to Sigma nie jest dodatnia.
Czy jest coś, co mogę zrobić, aby ocenić dane eksperymentalne w większych wymiarach? Czy coś mi mówi o moich danych?
Jestem trochę początkującym w tej dziedzinie, więc przepraszam, jeśli przegapiłem coś oczywistego.
Odpowiedzi:
Macierz kowariancji nie jest jednoznacznie określona, ponieważ jest liczbą pojedynczą. Oznacza to, że co najmniej jedną ze zmiennych można wyrazić jako kombinację liniową pozostałych. Nie potrzebujesz wszystkich zmiennych, ponieważ wartość co najmniej jednej można ustalić na podstawie podzbioru pozostałych. Sugerowałbym dodawanie zmiennych sekwencyjnie i sprawdzanie macierzy kowariancji na każdym etapie. Jeśli nowa zmienna tworzy osobliwość, upuść ją i przejdź do następnej. Ostatecznie powinieneś mieć podzbiór zmiennych z dodatnią określoną macierzą kowariancji.
źródło
regress
Polecenie Staty automatycznie usunie dodatkowe zmienne, gdy niektóre są współliniowe (a jego dane wyjściowe można zapisać w formie, która identyfikuje te zmienne i oznacza nieliniowy podzbiór do wykorzystania w przyszłości). Prawdopodobną komplikacją jest jednak to, że zmienne niekoniecznie muszą być współliniowe, ale mogą być na tyle blisko, że propagacja błędu zmiennoprzecinkowego w rozkładzie Choleskiego daje ujemne oszacowania wartości własnej, czyniąc zmienne współliniowymi dla wszystkich praktycznych celów.R
- modele regresji automatycznie usuwają zmienne z predyktora liniowego, jeśli istnieje dokładna kolinearność.g
twój model liniowy,colnames(model.matrix(g))[-which(is.na(coef(g))==TRUE)][-1]
powinien zwrócić nazwy predyktorów wprowadzonych do modelu, które nie są dokładnie współliniowe. Działa to poprzez sprawdzenie, które współczynniki byłyNA
(w ten sposóbR
wskazuje, że zmienna została upuszczona) i znalezienie odpowiednich nazw kolumn macierzy modelu (usunięcie kolumny przechwytującej). Nawiasem mówiąc, to nie zadziała, jeśli nie będzie żadnych warunków współliniowych, więcwhich(is.na(coef(g))==TRUE)
wymagane jest stwierdzenie if, aby sprawdzić, czy nie jest puste :)To poprawny wynik. Szacunek dla tego składnika macierzy kowariancji wynosi zero, co może być prawdą! Może to prowadzić do trudności obliczeniowych, ale niektóre algorytmy w języku R (nie wiem o Matlabie) mogą to obsłużyć. Nie rozumiem, dlaczego ludzie się tym denerwują i nalegają na dopasowanie bardziej oszczędnych modeli.
źródło
Jedną kwestią, o której nie sądzę, że została poruszona powyżej, jest to, że możliwe jest obliczenie nie dodatniej określonej macierzy kowariancji na podstawie danych empirycznych, nawet jeśli twoje zmienne nie są idealnie liniowo powiązane. Jeśli nie masz wystarczających danych (szczególnie jeśli próbujesz zbudować wielowymiarową macierz kowariancji z zestawu porównań parami) lub jeśli twoje dane nie są zgodne z wielowymiarowym rozkładem normalnym, możesz skończyć z paradoksalnymi relacjami wśród zmiennych, takich jak cov (A, B)> 0; cov (A, C)> 0; cov (B, C) <0.
W takim przypadku nie można dopasować normalnego wielowymiarowego pliku PDF, ponieważ nie ma wielowymiarowego rozkładu normalnego spełniającego te kryteria - cov (A, B)> 0 i cov (A, C)> 0 koniecznie oznacza, że cov (B, C )> 0.
Wszystko to oznacza, że nie dodatnia określona macierz nie zawsze oznacza, że uwzględniamy zmienne współliniowe. Może to również sugerować, że próbujesz modelować relację, co jest niemożliwe ze względu na wybraną przez Ciebie strukturę parametryczną.
źródło