Warum verwenden manche Leute -999 oder -9999, um fehlende Werte zu ersetzen?

32

Ich habe einen Datensatz. Es fehlen viele Werte. Bei einigen Spalten wurde der fehlende Wert durch -999 ersetzt, bei anderen Spalten wurde der fehlende Wert als 'NA' markiert.

Warum sollten wir -999 verwenden, um den fehlenden Wert zu ersetzen?

qqqwww
quelle
1
Ich habe -999 selbst noch nie gesehen. Bisher habe ich leere Strings und NAs gesehen.
Ye Tian
12
Weil sie die Ergebnisse für Leute, die oberflächliche Analysen durchführen und die Dokumentation nicht sorgfältig lesen, schrecklich durcheinander bringen wollen! (Im Ernst, @Stephan Kolassa hat die echte Antwort.)
Matthew Gunn
1
Fragen Sie die Person, die den Datensatz bereitgestellt hat ...?
BlueRaja - Danny Pflughoeft
Besser noch sind 999 Werte in Messspalten, um anzuzeigen, dass die Messung nicht zutrifft. Mindestens -999 oder 0 haben die semantische Bedeutung, dass es sich nicht um einen gültigen / wichtigen Wert handelt. 999 ist einfach das Schlimmste.
Adam Martin
Ich habe das Gefühl, als hätte ich einmal gelesen, dass dies eine Konvention aus den Tagen war, als Daten auf Lochkarten aufgezeichnet wurden. Das Ausschalten einer vollen 9er-Reihe machte die fehlenden Daten beim Betrachten der Karte deutlich sichtbar, da es sich buchstäblich um eine "fehlende Zeile" handelte. Ich kann keine Referenz finden, um dies zu sichern, daher lasse ich es einfach als Kommentar.
Lucas

Antworten:

65

Dies ist ein Überbleibsel aus früheren Zeiten, als Computersoftware numerische Vektoren als numerische Vektoren speicherte. Keine reelle Zahl hat die Semantik "Ich vermisse". Wenn also frühe Statistiksoftware zwischen "wahren" Zahlen und fehlenden Werten unterscheiden musste, gaben sie etwas ein, das "offensichtlich" keine gültige Zahl war, wie -999 oder -9999.

Natürlich ist es nicht "offensichtlich", dass -999 oder -9999 für einen fehlenden Wert standen. Sehr oft kann es sich sicherlich um einen gültigen Wert handeln. Wenn Sie nicht explizit nach solchen Werten suchen, können Ihre Analysen alle möglichen "interessanten" Fehler enthalten.

Heutzutage werden numerische Vektoren, die fehlende Werte enthalten können, intern als "angereicherte" numerische Vektoren dargestellt, dh numerische Vektoren mit zusätzlichen Informationen darüber, welche Werte fehlen. Das ist natürlich viel besser, denn dann werden fehlende Werte als solche und nicht fälschlicherweise als gültig behandelt.

Leider verwendet manche Software immer noch eine solche Konvention, möglicherweise aus Kompatibilitätsgründen. Und einige Benutzer haben diese Konvention durch informelle Osmose aufgesogen und geben -999 anstelle von NA ein, selbst wenn ihre Software die saubere Eingabe fehlender Werte unterstützt.

Moral: nicht kodieren Werte als -999 fehlt.

S. Kolassa - Setzen Sie Monica wieder ein
quelle
1
Abgesehen davon, dass es sich um ein Überbleibsel aus früheren Zeiten handelt, gibt es wahrscheinlich Leute, die noch nie erfahren haben, dass es eine explizite Darstellung fehlender Werte gibt. Wenn sie also einen fehlenden Wert einfügen müssen, denken Sie, dass es sich um eine Art Schwindel handelt Nummer.
Kodiologist
9
Dies ist nicht nur eine Holdout-Sache. Wenn ich ein Tool für die Datenmanipulation schreibe, ist das Einlesen von Zahlenspalten in nahezu jeder Programmiersprache einfach. Das Einlesen, Erkennen und Parsen von Werten, die nicht numerisch sind, nimmt viel mehr Zeit in Anspruch. Und wenn Sie der Meinung sind, dass -9999 mit den Statistiken nicht mithalten kann, hat meine Gruppe, mit der ich zusammenarbeite, eine Vorliebe dafür entwickelt, 1e32 für ungültige Werte zu verwenden. Lass mich dir sagen, was mit deiner Varianz passiert, wenn du das tust!
Cort Ammon
1
Tolle, prägnante Antwort. Wenn Sie jedoch einige historische Details hinzufügen, ist dies möglicherweise eine noch bessere Antwort. Zugegeben, das würde einige Nachforschungen erfordern. :)
Tschakravarty
1
Eine solche Codierung könnte auch verwendet werden, um eine andere Art von Messfehler anzuzeigen; dh "Maschine funktionierte nicht" vs. "niemand war da, um die Messung durchzuführen".
Hao Ye
1
@qqqwww: Es ist am besten, den Wert zu ermitteln, der verwendet wird, um das Fehlen anzuzeigen, und solche Einträge in echtes Fehlen oder NA umzuwandeln. Die Diskretisierung numerischer Daten ist normalerweise keine gute Idee.
S. Kolassa - Wiedereinsetzung von Monica
24

Solche Werte gelten für Datenbanken. Die meisten Datenbanken haben vor langer Zeit und viele heute eine feste Anzahl von Ziffern für ganzzahlige Daten zugewiesen. Eine Zahl wie -999 ist die kleinste, die in vier Zeichen, -9999 in fünf Zeichen usw. gespeichert werden kann.

(Es versteht sich von selbst, dass ein numerisches Feld per Definition keine alphanumerischen Zeichen wie "NA" speichern kann. Es muss ein numerischer Code verwendet werden, um fehlende oder ungültige Daten darzustellen.)

Warum die negativste Zahl verwenden, die gespeichert werden kann, um einen fehlenden Wert anzuzeigen? Wenn Sie es versehentlich als eine gültige Zahl behandeln, möchten Sie, dass die Ergebnisse dramatisch falsch sind. Je realistischer Ihre Codes für fehlende Werte werden, desto sicherer sind Sie, da eine immense Fehleingabe in der Regel die Ausgabe verschlechtert. (Robuste statistische Methoden sind bemerkenswerte Ausnahmen!)

Wie konnte so ein Fehler passieren? Dies geschieht immer dann, wenn Daten zwischen Systemen ausgetauscht werden. Ein System, das davon ausgeht, dass -9999 einen fehlenden Wert darstellt, gibt diesen Wert mühelos aus, wenn Sie die Daten in den meisten Formaten wie CSV ausschreiben. Das System, das liest, dass die CSV-Datei möglicherweise nicht "weiß" (oder nicht "informiert" wird), dass solche Werte fehlen.

Ein weiterer Grund ist, dass gute statistische Daten und Computerplattformen viele verschiedene Arten von fehlenden Werten erkennen: NaNs, wirklich fehlende Werte, Überläufe, Unterläufe, Nichtantworten usw. Indem sie die negativsten möglichen Werte festlegen (z. B. -9999, - 9998, -9997 usw.) zu diesen machen Sie es einfach, alle fehlenden Werte aus einer Tabelle oder einem Array abzufragen.

Ein weiterer Grund ist, dass solche Werte in der Regel in grafischen Darstellungen als extreme Ausreißer angezeigt werden. Von allen Werten, die Sie auswählen können, um in einer Grafik hervorzuheben, hat der negativste die größte Chance, weit von Ihren Daten entfernt zu sein.


Es gibt nützliche Implikationen und Verallgemeinerungen:

  • 10303

  • Nehmen Sie eine Standardregel dieses Typs an, um die Erfindung von NoData-Codes unter neuen Umständen (beim Entwerfen Ihrer eigenen Datenbanksoftware) zu vereinfachen.

  • Entwerfen Sie Ihre Software und Systeme so, dass sie dramatisch ausfallen, wenn sie überhaupt ausfallen. Die schlimmsten Fehler sind solche, die zeitweise, zufällig oder winzig sind, weil sie unentdeckt bleiben und schwer zu finden sind.

whuber
quelle
2
NaN10303
NaN ist keine Zahl, NA ist nicht verfügbar, mindestens in R
llrs
1
Theoretisch unterstützen IEEE-Floats verschiedene Arten von NaNs, die als Tags für verschiedene Arten von fehlenden / ungültigen Daten gut funktionieren. In der Praxis wird die Unterscheidung solcher NaNs in den meisten Programmiersprachen nicht ausreichend unterstützt und es besteht die Gefahr, dass diese zusätzlichen Informationen verloren gehen.
CodesInChaos
Sehr gut, außer dass das Vorzeichenbit keinen Platz in dem Schema einnimmt, das tatsächlich von Datenbanken verwendet wird. Sie würden sich in Ziffernpaare von 00-99 aufteilen und diese als Zahlen behandeln; aber wenn die Zahl negativ wäre, würden sie 255 - # anstelle der Zahl speichern. Auch 127 und 128 wurden für +/- inf verwendet.
Joshua
@Joshua Das mag für einige Datenbanken richtig sein, aber für viele andere war es definitiv nicht der Fall, besonders zu Beginn der Entwicklung. Eine Datenbank, die dezimal codierte Werte verwendet, hätte den von Ihnen vorgeschlagenen Mechanismus sowieso nicht verwenden können. Ein Beispiel für eine frühe und weit verbreitete PC-Datenbank, die so funktioniert, wie ich es beschrieben habe, ist dBase, das schließlich als dBase III-, Clipper- und FoxPro-Produkte angeboten wird (von Microsoft erworben und später zugunsten von Access aufgegeben). Bei Datenaustauschformaten mit fester Feldbreite belegt das Minuszeichen immer ein Zeichen.
Whuber
13

Sie können alles verwenden , um fehlende Werte zu codieren. Einige Software wie R verwenden spezielle Werte, um fehlende Daten zu codieren, es gibt jedoch auch Softwarepakete, z. B. SPSS, die keine speziellen Codes für fehlende Daten enthalten. Im zweiten Fall müssen Sie eine beliebige Auswahl für solche Werte treffen . Sie können alles auswählen , aber im Allgemeinen ist es eine gute Idee, einen Wert zu wählen, der sich deutlich von Ihren Daten unterscheidet (z. B. sind Ihre Daten Prozentsätze im Bereich von 0 bis 100, Sie wählen also 999 für die Codierung fehlender Daten oder Ihre Daten sind menschliches Alter und Sie verwenden negative Werte für fehlende Beobachtungen. Die Idee dahinter ist, dass Sie auf diese Weise feststellen können, ob etwas schief gelaufen ist und sich die Zahlen nicht summieren.

Das Problem bei einer solchen Codierung ist jedoch, dass Sie die spezielle Codierung tatsächlich nicht bemerken und Müllergebnisse erhalten.

Tim
quelle
2

Gibt es berechnete Variablen im Datensatz? Oder ist dies ein analytischer Datensatz, der aus zusammengeführten / sortierten Daten stammt? Manche Software verwendet sehr große negative Werte, um fehlende Daten anzuzeigen. Aber andere Software erzeugt mit NA oder fehlende Werte .. Wenn sie nicht übereinstimmen, hat in der Regel eine Nachbearbeitung zu Meinungsverschiedenheiten geführt.

AdamO
quelle
2

Natürlich werden in SPSS die fehlenden Werte 999 oder was auch immer als ein spezieller fehlender Code markiert und getrennt von anderen Werten behandelt. Es kann separat tabellarisch aufgeführt oder ganz ausgeschlossen werden. Eine Unterscheidung wird vom Ergebnis von Dingen wie Nulldivision oder log (0) getroffen.

JKP
quelle