Testowanie jednorodności jest czymś powszechnym, ale zastanawiam się, jakie są metody, aby to zrobić dla wielowymiarowej chmury punktów.
Testowanie jednorodności jest czymś powszechnym, ale zastanawiam się, jakie są metody, aby to zrobić dla wielowymiarowej chmury punktów.
Odpowiedzi:
Metoda standardowa wykorzystuje funkcję K Ripleya lub coś z niej pochodnego, na przykład funkcję L. Jest to wykres podsumowujący średnią liczbę sąsiadów punktów w funkcji maksymalnej odległości od siebie ( ). Aby uzyskać jednolity rozkład w wymiarach, ta średnia powinna zachowywać się jak : i zawsze będzie taka dla małych . Odchodzi od takiego zachowania ze względu na grupowanie, inne formy przestrzennej nie-niezależności i efekty krawędziowe (stąd kluczowe jest określenie regionu próbkowanego przez punkty). Z powodu tej komplikacji - która pogarsza się jakon ρ n ρ nwzrasta - w większości aplikacji pasmo ufności jest ustawiane dla zerowej funkcji K poprzez symulację, a obserwowana funkcja K jest wykreślana w celu wykrycia wychyleń. Z pewnymi przemyśleniami i doświadczeniem wycieczki można interpretować w kategoriach tendencji do skupiania się lub nie w określonych odległościach.
Przykłady funkcji K i związanej z nią funkcji L z Dixon (2001), jw. Funkcja L jest skonstruowana w taki sposób, że dla równomiernego rozkładu jest poziomą linią zerową: dobrym wizualnym odniesieniem. Linie przerywane to przedziały ufności dla tego konkretnego obszaru badań, obliczone za pomocą symulacji. Jednolity szary ślad jest funkcją L dla danych. Dodatni skok na odległościach 0-20 m wskazuje na pewne skupienia na tych odległościach.
Opublikowałem działający przykład w odpowiedzi na powiązane pytanie na /stats//a/7984 , gdzie wykres pochodzący z funkcji K dla jednolitego rozkładu na dwuwymiarowym kolektorze osadzonym w szacuje się na podstawie symulacji.
W R
, na spatstat funkcje kest
i k3est
obliczyć K funkcji dla i , odpowiednio. W więcej niż 3 wymiarach prawdopodobnie jesteś sam, ale algorytmy byłyby dokładnie takie same. Możesz wykonać obliczenia z macierzy odległości obliczonej (z umiarkowaną wydajnością) przez .n = 3stats::dist
Okazuje się, że pytanie jest trudniejsze niż myślałem. Mimo to odrobiłem pracę domową i po rozejrzeniu się znalazłem dwie metody oprócz funkcji Ripleya, aby przetestować jednorodność w kilku wymiarach.
Zrobiłem pakiet R o nazwie, unf
który implementuje oba testy. Możesz pobrać go z github na https://github.com/gui11aume/unf . Duża jego część znajduje się w C, więc będziesz musiał go skompilować na swoim komputerze R CMD INSTALL unf
. Artykuły, na których oparta jest implementacja, są w formacie pdf w pakiecie.
Pierwsza metoda pochodzi z referencji wspomnianej przez @ Procrastinator ( Testowanie jednorodności na wielu odmianach i jej zastosowania, Liang i wsp., 2000 ) i pozwala przetestować jednorodność tylko na jednostkowej hipersześcianie. Chodzi o zaprojektowanie statystyk rozbieżności, które są asymptotycznie gaussowskie według twierdzenia Central Limit. Pozwala to obliczyć statystykę , która jest podstawą testu.
library(unf)
set.seed(123)
# Put 20 points uniformally in the 5D hypercube.
x <- matrix(runif(100), ncol=20)
liang(x) # Outputs the p-value of the test.
[1] 0.9470392
Drugie podejście jest mniej konwencjonalne i wykorzystuje minimalne drzewa opinające . Wstępna praca została wykonana przez Friedmana i Rafsky'ego w 1979 r. (Odniesienie w pakiecie), aby sprawdzić, czy dwie próbki wielowymiarowe pochodzą z tej samej dystrybucji. Poniższy obraz ilustruje zasadę.
Punkty z dwóch dwuwymiarowych próbek są wykreślone na czerwono lub niebiesko, w zależności od ich oryginalnej próbki (lewy panel). Obliczane jest minimalne drzewo rozpinające próbki zbiorczej w dwóch wymiarach (środkowy panel). To drzewo z minimalną sumą długości krawędzi. Drzewo jest rozkładane w poddrzewach, w których wszystkie punkty mają takie same etykiety (prawy panel).
Na poniższym rysunku pokazuję przypadek, w którym agregowane są niebieskie kropki, co zmniejsza liczbę drzew na końcu procesu, jak widać na prawym panelu. Friedman i Rafsky obliczyli asymptotyczny rozkład liczby drzew uzyskanych w procesie, co pozwala na wykonanie testu.
Pomysł stworzenia ogólnego testu na jednorodność próbki wielowymiarowej został opracowany przez Smitha i Jaina w 1984 r. I wdrożony przez Bena Pfaffa w C (odniesienie w pakiecie). Druga próbka jest generowana równomiernie w przybliżonym wypukłym kadłubie pierwszej próbki, a próba Friedmana i Rafsky'ego jest przeprowadzana na puli dwóch próbek.
Zaletą tej metody jest to, że sprawdza jednolitość każdego wypukłego kształtu wielowymiarowego, a nie tylko hipersześcianu. Istotną wadą jest to, że test ma losowy składnik, ponieważ druga próbka jest generowana losowo. Oczywiście można powtórzyć test i uśrednić wyniki, aby uzyskać powtarzalną odpowiedź, ale nie jest to przydatne.
Kontynuując poprzednią sesję R, oto jak to wygląda.
pfaff(x) # Outputs the p-value of the test.
pfaff(x) # Most likely another p-value.
Skopiuj / rozwidlaj kod z github.
Czy para byłaby zależnymi unifromami, gdzie i z prawdopodobieństwem i z prawdopodobieństwem gdzie jest również i niezależny od ?U ∼ U n i f o r m ( 0 , 1 ) Z = U 0 < p < 1 W 1 - p W U n i f o r m ( 0 , 1 ) U
Dla niezależnych zmiennych losowych w wymiarach podziel wymiarową kostkę jednostkową to zbiór mniejszych rozłącznych kostek o tej samej długości boku. Następnie wykonaj test dla jednorodności. Działa to dobrze tylko, jeśli n jest małe jak 3-5.n χ 2