Mam zestaw danych z założeniem, że najbliżsi sąsiedzi są najlepszymi predyktorami. Po prostu idealny przykład wizualizacji gradientu dwukierunkowego
Załóżmy, że mamy przypadek, w którym brakuje kilku wartości, możemy łatwo przewidzieć na podstawie sąsiadów i trendu.
Odpowiadająca macierz danych w R (przykładowy manekin do treningu):
miss.mat <- matrix (c(5:11, 6:10, NA,12, 7:13, 8:14, 9:12, NA, 14:15, 10:16),ncol=7, byrow = TRUE)
miss.mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 5 6 7 8 9 10 11
[2,] 6 7 8 9 10 NA 12
[3,] 7 8 9 10 11 12 13
[4,] 8 9 10 11 12 13 14
[5,] 9 10 11 12 NA 14 15
[6,] 10 11 12 13 14 15 16
Uwagi: (1) Zakłada się , że właściwość brakujących wartości jest losowa , może się zdarzyć wszędzie.
(2) Wszystkie punkty danych pochodzą z jednej zmiennej, ale zakłada się, że na ich wartość ma wpływ neighbors
wiersz i kolumna obok nich. Zatem pozycja w macierzy jest ważna i może być uważana za inną zmienną.
Mam nadzieję, że w niektórych sytuacjach uda mi się przewidzieć pewne nieścisłości (mogą to być błędy) i skorygować błąd (tylko przykład, wygenerujmy taki błąd w danych fikcyjnych):
> mat2 <- matrix (c(4:10, 5, 16, 7, 11, 9:11, 6:12, 7:13, 8:14, 9:13, 4,15, 10:11, 2, 13:16),ncol=7, byrow = TRUE)
> mat2
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 4 5 6 7 8 9 10
[2,] 5 16 7 11 9 10 11
[3,] 6 7 8 9 10 11 12
[4,] 7 8 9 10 11 12 13
[5,] 8 9 10 11 12 13 14
[6,] 9 10 11 12 13 4 15
[7,] 10 11 2 13 14 15 16
Powyższe przykłady są tylko ilustracją (można na nie odpowiedzieć wizualnie), ale prawdziwy przykład może być bardziej mylący. Szukam, czy istnieje solidna metoda przeprowadzenia takiej analizy. Myślę, że to powinno być możliwe. Jaka metoda byłaby odpowiednia do przeprowadzenia tego rodzaju analizy? jakieś sugestie programu / pakietu R, aby wykonać tego rodzaju analizę?
źródło
Odpowiedzi:
Pytanie dotyczy sposobów korzystania z najbliższych sąsiadów w solidny sposób do identyfikowania i korygowania zlokalizowanych wartości odstających. Dlaczego nie zrobić dokładnie tego?
Procedura polega na obliczeniu solidnego lokalnego wygładzenia, ocenie reszt i zerowaniu wszystkich, które są zbyt duże. Spełnia to bezpośrednio wszystkie wymagania i jest wystarczająco elastyczne, aby dostosować się do różnych aplikacji, ponieważ można zmieniać wielkość lokalnego sąsiedztwa i próg rozpoznawania wartości odstających.
(Dlaczego elastyczność jest tak ważna? Ponieważ każda taka procedura ma dużą szansę zidentyfikowania niektórych zlokalizowanych zachowań jako „oddalających się”. W związku z tym wszystkie takie procedury można uznać za bardziej płynne . Eliminują one pewne szczegóły wraz z pozornymi wartościami odstającymi. Analityk potrzebuje pewnej kontroli nad kompromisem między zachowaniem szczegółów a niewykrywaniem lokalnych wartości odstających).
Kolejną zaletą tej procedury jest to, że nie wymaga ona prostokątnej matrycy wartości. W rzeczywistości można go nawet zastosować do nieregularnych danych za pomocą lokalnej wygładzacza odpowiedniej dla takich danych.
R
loess
Zauważ, że (zgodnie z
R
konwencją) rzędy matryc są rysowane jako pionowe paski. Wszystkie obrazy, z wyjątkiem reszt, są zaznaczone na wzgórzu, aby pomóc w wyświetlaniu niewielkich zmian ich wartości. Bez tego prawie wszystkie lokalne wartości odstające byłyby niewidoczne!Plamki na wykresie „Pozostałości” pokazują oczywiste izolowane lokalne wartości odstające. Ten wykres pokazuje również inną strukturę (taką jak ten ukośny pasek), którą można przypisać danym bazowym. Można poprawić na tej procedury przy użyciu przestrzennego modelu danych ( za pomocą metod geostatystycznych), ale opisując że i ilustrujący zajęłoby nam zbyt daleko nią tutaj.
źródło
Radzę zajrzeć do tego artykułu [0]. Problem, który ma rozwiązać, wydaje się raczej dobrze pasować do twojego opisu, z wyjątkiem tego, że metoda zaproponowana przez autora jest nieco bardziej dopracowana niż wprowadzanie NN (chociaż wykorzystuje coś podobnego jako punkt początkowy).
Pierwszym krokiem każdej iteracji jest krok imputacji danych. Odbywa się to tak, jak w algorytmie EM: brakujące komórki są wypełniane wartością, którą powinny mieć (jest to krok E).
Podsumowując artykuł, oto ogólny algorytm, który proponują:
Następnie rób do momentu konwergencji:
Nie znam gotowej implementacji R dla tego podejścia, ale można łatwo wyprodukować z podskładników (głównie solidny algorytm PCA), a te są dobrze zaimplementowane w R, patrz pakiet rrcov (artykuł jest ciche informacje na ten temat).
źródło