Dlaczego niektóre osoby używają -999 lub -9999 do zastąpienia brakujących wartości?

32

Mam zestaw danych. Brakuje wielu wartości. W przypadku niektórych kolumn brakującą wartość zastąpiono wartością -999, ale w innych kolumnach brakującą wartość oznaczono jako „NA”.

Dlaczego użyjemy -999, aby zastąpić brakującą wartość?

qqqwww
źródło
1
Sam nigdy nie widziałem -999. Do tej pory widziałem puste łańcuchy i NA.
Ye Tian,
12
Ponieważ chcą okropnie zepsuć wyniki osobom, które dokonują powierzchownych analiz i nie czytają dokładnie dokumentacji! (Mówiąc poważnie, @Stephan Kolassa ma prawdziwą odpowiedź.)
Matthew Gunn
1
Zapytaj osobę, która dostarczyła zestaw danych ...?
BlueRaja - Danny Pflughoeft
Jeszcze lepiej jest 999 wartości w kolumnach pomiarowych wskazujących, że pomiar nie ma zastosowania ... co najmniej -999 lub 0 miałoby znaczenie semantyczne, co oznacza, że ​​nie jest to poprawna / ważna wartość. 999 jest po prostu najgorszy.
Adam Martin
Wydaje mi się, że kiedyś przeczytałem, że była to konwencja z dni rejestrowania danych na kartach bokserskich. Wyrzucenie pełnego rzędu 9s sprawiło, że brakujące dane były wyraźnie widoczne, gdy patrzyliśmy na kartę, ponieważ był to dosłownie „brakujący rząd”. Nie mogę znaleźć odniesienia do tego, więc zostawię to jako komentarz.
Lucas

Odpowiedzi:

65

Jest to powstrzymanie od wcześniejszych czasów, kiedy oprogramowanie komputerowe zapisywało wektory numeryczne jako wektory numeryczne. Żadna liczba rzeczywista nie ma semantyki „brakuje mi”. Kiedy więc wczesne oprogramowanie statystyczne musiało rozróżniać „prawdziwe” liczby od brakujących wartości, wprowadzili coś, co „oczywiście” nie było prawidłową liczbą, na przykład -999 lub -9999.

Oczywiście, że -999 lub -9999 oznacza brakującą wartość, wcale nie jest „oczywiste”. Dość często może to być poprawna wartość. Chyba że wyraźnie sprawdzasz takie wartości, możesz mieć różnego rodzaju „interesujące” błędy w swoich analizach.

Obecnie wektory liczbowe, które mogą zawierać brakujące wartości, są wewnętrznie przedstawiane jako „wzbogacone” wektory liczbowe, tj. Wektory liczbowe z dodatkowymi informacjami na temat brakujących wartości. Jest to oczywiście o wiele lepsze, ponieważ wówczas brakujące wartości będą traktowane jako takie i nie będą błędnie traktowane jako prawidłowe.

Niestety niektóre programy nadal stosują taką konwencję, być może w celu zachowania zgodności. Niektórzy użytkownicy przyswoili tę konwencję poprzez nieformalną osmozę i wprowadzili -999 zamiast NA, nawet jeśli ich oprogramowanie obsługuje czyste wprowadzanie brakujących wartości.

Morał: nie koduj brakujących wartości jako -999.

S. Kolassa - Przywróć Monikę
źródło
1
Oprócz tego, że powstrzymuje się od wcześniejszych czasów, są prawdopodobnie ludzie, którzy nigdy nie dowiedzieli się, że istnieje wyraźna reprezentacja brakujących wartości, a zatem, gdy trzeba wstawić brakującą wartość, stwierdzenie, że należy użyć jakiegoś fałszywego numer.
Kodiolog,
9
To nie tylko przeszkoda. Jeśli piszę narzędzie do manipulacji danymi, czytanie w kolumnach liczb jest łatwe w prawie każdym języku programowania. Wczytanie wartości, wykrycie wartości nienumerycznych i ich parsowanie zajmuje dużo więcej czasu. A jeśli myślisz, że -9999 gnojów ze statystykami, moja grupa, z którą pracuję, rozwinęła miłość do używania 1e32 do niepoprawnych wartości. Pozwól, że powiem ci, co dzieje się z twoją wariancją, kiedy to robisz!
Cort Ammon - Przywróć Monikę
1
Świetna, pomocna odpowiedź. Ale dodanie pewnych szczegółów historycznych może sprawić, że będzie to jeszcze lepsza odpowiedź. Trzeba by było trochę badań. :)
tchakravarty
1
Takie kodowanie można również wykorzystać do oznaczenia innego rodzaju błędu pomiaru; tzn. „maszyna nie działała” vs. „nie było nikogo, kto mógłby dokonać pomiaru”.
Hao Ye,
1
@qqqwww: najlepiej byłoby wykryć wartość użytą do wskazania braków i przekonwertować takie wpisy na prawdziwe braky lub NA. Dyskretyzacja danych liczbowych zwykle nie jest dobrym pomysłem.
S. Kolassa - Przywróć Monikę
24

Takie wartości dotyczą baz danych. Większość baz danych dawno temu, a wiele z nich dzisiaj, przypisało stałą liczbę cyfr do danych o wartościach całkowitych. Liczba taka jak -999 to najmniejsza, którą można zapisać w czterech znakach, -9999 w pięciu znakach i tak dalej.

(Nie trzeba dodawać, że - z definicji - pole numeryczne nie może przechowywać znaków alfanumerycznych, takich jak „NA”. Do przedstawienia brakujących lub niepoprawnych danych należy użyć jakiegoś kodu numerycznego.)

Po co używać najbardziej ujemnej liczby, jaką można zapisać, aby oznaczyć brakującą wartość? Ponieważ jeśli błędnie traktujesz go jako prawidłową liczbę, chcesz, aby wyniki były dramatycznie niepoprawne. Im bardziej twoje kody brakujących wartości stają się realistyczne, tym bezpieczniejszy jesteś, ponieważ bardzo złe wejście zwykle psuje wyjście. (Solidne metody statystyczne to godne uwagi wyjątki!)

Jak doszło do takiego błędu? Dzieje się tak przez cały czas wymiany danych między systemami. System, który zakłada, że ​​-9999 reprezentuje brakującą wartość, beztrosko wyświetli tę wartość podczas zapisywania danych w większości formatów, takich jak CSV. System, który czyta ten plik CSV, może nie „wiedzieć” (lub nie być „informowany”), aby traktować takie wartości jako brakujące.

Innym powodem jest to, że dobre dane statystyczne i platformy obliczeniowe rozpoznają wiele różnych rodzajów brakujących wartości: NaN, naprawdę brakujące wartości, przepełnienia, niedopełnienia, brak odpowiedzi itp. Itd. Poprzez poświęcenie najbardziej negatywnych możliwych wartości (takich jak -9999, - 9998, -9997 itp.), Ułatwia wyszukiwanie wszystkich brakujących wartości z dowolnej tabeli lub tablicy.

Jeszcze inna jest to, że takie wartości zwykle pojawiają się na wyświetlaczach graficznych jako skrajne wartości odstające. Ze wszystkich wartości, które możesz wybrać, aby wyróżnić się na grafice, najbardziej negatywna z możliwych ma największą szansę na oddalenie się od twoich danych.


Istnieją przydatne implikacje i uogólnienia:

  • -10303

  • Zastosuj standardową regułę tego typu, aby ułatwić wymyślanie kodów NoData w nowych okolicznościach (podczas projektowania własnego oprogramowania bazy danych).

  • Zaprojektuj swoje oprogramowanie i systemy, aby drastycznie zawiodły, jeśli w ogóle ulegną awarii. Najgorsze błędy to te, które są sporadyczne, przypadkowe lub małe, ponieważ mogą pozostać niewykryte i trudne do wyśledzenia.

Whuber
źródło
2
NaN-10303
NaN nie jest liczbą, NA nie jest dostępny przynajmniej w R
llrs
1
Teoretycznie zmiennoprzecinkowe IEEE obsługują różne rodzaje NaN, które działałyby dobrze jako znaczniki dla różnego rodzaju brakujących / niepoprawnych danych. W praktyce większość języków programowania nie ma odpowiedniego wsparcia dla rozróżniania takich NaN i ma skłonność do utraty tych dodatkowych informacji.
CodesInChaos
Bardzo dobrze, z wyjątkiem tego, że bit znaku nie zajmował miejsca w schemacie faktycznie używanym przez bazy danych. Podzielą się na pary cyfr od 00 do 99 i będą traktować je jak liczby; ale gdyby liczba była ujemna, zapisaliby 255 - # zamiast liczby. Również 127 i 128 użyto do infekcji +/-.
Joshua
@Joshua To może być poprawne dla niektórych baz danych, ale zdecydowanie nie było tak w przypadku wielu innych, szczególnie na wczesnym etapie rozwoju. W każdym przypadku baza danych wykorzystująca wartości zakodowane dziesiętnie nie mogłaby skorzystać z zaproponowanego przez Ciebie mechanizmu. Przykładem wczesnej i powszechnie używanej bazy danych na komputery PC, która działa w sposób opisany przeze mnie, jest dBase, ostatecznie oferowany jako produkt dBase III, Clipper i FoxPro (zakupiony przez Microsoft, a później porzucony na rzecz Access). W przypadku formatów wymiany danych o stałej szerokości pola znak minus zawsze zajmuje znak.
whuber
13

Możesz użyć wszystkiego, aby zakodować brakujące wartości. Niektóre programy, takie jak R, używają specjalnych wartości do kodowania brakujących danych, ale istnieją również pakiety oprogramowania, np. SPSS, które nie mają żadnych specjalnych kodów dla brakujących danych. W drugim przypadku musisz dokonać arbitralnego wyboru takich wartości. Możesz wybrać wszystko , ale ogólnie dobrym pomysłem jest wybranie wartości, która wyraźnie różni się od twoich danych (np. Twoje dane są procentami w zakresie 0-100, więc wybierasz 999 do zakodowania brakujących danych, lub twoja data to wiek człowieka i używasz wartości ujemnych dla brakujących obserwacji). Chodzi o to, że robiąc to, powinieneś być w stanie zauważyć, że coś poszło nie tak i liczby się nie sumują.

Problem z takim kodowaniem polega jednak na tym, że tak naprawdę nie można zauważyć specjalnego kodowania, co prowadzi do śmieci.

Tim
źródło
2

Czy w zbiorze danych są obliczone zmienne? A może jest to zestaw danych analitycznych pochodzących ze scalonych / posortowanych danych? Niektóre programy używają bardzo dużych wartości ujemnych do oznaczenia brakujących danych. Ale inne oprogramowanie tworzy brakujące wartości za pomocą NA lub .. Kiedy są rozbieżne, zwykle pewne przetwarzanie końcowe prowadzi do nieporozumień.

AdamO
źródło
2

Oczywiście w SPSS brakujące wartości 999 lub cokolwiek JEST oznaczone jako specjalny brakujący kod i obsługiwane osobno od innych wartości. Może być osobno zestawiony w tabeli lub całkowicie wykluczony. Rozróżnia się wynik takich rzeczy jak podział zerowy lub log (0).

JKP
źródło