¿Por qué algunas personas usan -999 o -9999 para reemplazar los valores faltantes?

32

Tengo un conjunto de datos Hay muchos valores faltantes. Para algunas columnas, el valor faltante se reemplazó con -999, pero en otras columnas, el valor faltante se marcó como 'NA'.

¿Por qué usaríamos -999 para reemplazar el valor faltante?

qqqwww
fuente
1
Nunca he visto -999 yo mismo. Hasta ahora he visto cadenas vacías y NA.
Ye Tian
12
¡Porque quieren estropear horriblemente los resultados para las personas que hacen un análisis superficial y no leen la documentación con cuidado! (Hablando en serio, @Stephan Kolassa tiene la respuesta real.)
Matthew Gunn
1
Pregúntele a la persona que proporcionó el conjunto de datos ...?
BlueRaja - Danny Pflughoeft
Mejor aún, hay 999 valores en las columnas de medición para indicar que la medición no se aplica ... al menos un -999 o un 0 tendrían el significado semántico de que no es un valor válido / importante. 999 es lo peor.
Adam Martin
Siento que una vez leí que esto era una convención de los días de grabación de datos en tarjetas perforadas. Eliminar una fila completa de 9s hizo que los datos faltantes fueran claramente visibles al mirar la tarjeta, ya que era literalmente una "fila faltante". No puedo encontrar una referencia para respaldar esto, así que lo dejaré como un comentario.
Lucas

Respuestas:

65

Esta es una reserva de tiempos anteriores, cuando el software de la computadora almacenaba vectores numéricos como vectores numéricos. Ningún número real tiene la semántica "Me estoy perdiendo". Entonces, cuando el software estadístico temprano tuvo que diferenciar entre números "verdaderos" y valores perdidos, pusieron algo que "obviamente" no era un número válido, como -999 o -9999.

Por supuesto, que -999 o -9999 representaba un valor perdido no es "obvio" en absoluto. Muy a menudo, ciertamente puede ser un valor válido. A menos que verifique explícitamente dichos valores, puede tener todo tipo de errores "interesantes" en sus análisis.

Hoy en día, los vectores numéricos que pueden contener valores perdidos se representan internamente como vectores numéricos "enriquecidos", es decir, vectores numéricos con información adicional sobre qué valores faltan. Por supuesto, esto es mucho mejor, porque los valores perdidos se tratarán como tales y no se tratarán erróneamente como válidos.

Desafortunadamente, algunos softwares todavía usan tal convención, tal vez por compatibilidad. Y algunos usuarios han absorbido esta convención a través de la ósmosis informal e ingresan -999 en lugar de NA, incluso si su software admite el ingreso limpio de valores perdidos.

Moraleja: no codifique valores perdidos como -999.

S. Kolassa - Restablece a Monica
fuente
1
Además de ser una reserva de épocas anteriores, es probable que haya personas que nunca hayan aprendido que existe una representación explícita de los valores perdidos, por lo que, cuando necesitan insertar un valor faltante, calculan que lo que hay que usar es una especie de falso número.
Kodiólogo
9
Esto no es solo una cosa oculta. Si estoy escribiendo una herramienta para hacer alguna manipulación de datos, leer en columnas de números es fácil en casi cualquier lenguaje de programación. Leer valores, detectar valores no numéricos y analizarlos en consecuencia lleva mucho más tiempo. Y si crees que -9999 molesta con las estadísticas, a mi grupo con el que trabajo le ha encantado usar 1e32 para valores no válidos. ¡Déjame decirte qué sucede con tu varianza cuando haces eso!
Cort Ammon - Restablece a Monica el
1
Gran respuesta sucinta. Pero agregar algunos detalles históricos podría ser una respuesta aún mejor. Es cierto que eso requeriría algo de investigación. :)
tchakravarty
1
Tal codificación también podría usarse para denotar algún otro tipo de error de medición; es decir, "la máquina no funcionaba" versus "no había nadie allí para hacer la medición".
Hao Ye
1
@qqqwww: sería mejor detectar el valor utilizado para indicar la falta y convertir dichas entradas en falta verdadera o NA. La discreción de datos numéricos generalmente no es una buena idea.
S. Kolassa - Restablece a Monica el
24

Dichos valores son para bases de datos. La mayoría de las bases de datos hace mucho tiempo, y muchas en la actualidad, asignaron un número fijo de dígitos para datos con valores enteros. Un número como -999 es el más pequeño que se puede almacenar en cuatro caracteres, -9999 en cinco caracteres, etc.

(No debería decirse que, por definición, un campo numérico no puede almacenar caracteres alfanuméricos como "NA". Se debe usar algún código numérico para representar datos faltantes o no válidos).

¿Por qué usar el número más negativo que se puede almacenar para indicar un valor perdido? Porque si lo trata por error como un número válido, desea que los resultados sean dramáticamente incorrectos. Cuanto más se alejen sus códigos de valores perdidos de ser realistas, más seguro estará, porque la entrada muy incorrecta generalmente arruina la salida. (¡Los métodos estadísticos robustos son excepciones notables!)

¿Cómo podría suceder tal error? Esto ocurre todo el tiempo cuando los datos se intercambian entre sistemas. Un sistema que asume que -9999 representa un valor faltante generará ese valor alegremente cuando escriba los datos en la mayoría de los formatos, como CSV. Es posible que el sistema que lee ese archivo CSV no "sepa" (o no se le "diga") para tratar esos valores como faltantes.

Otra razón es que los buenos datos estadísticos y las plataformas informáticas reconocen muchos tipos diferentes de valores faltantes: NaN, valores verdaderamente faltantes, desbordamientos, desbordamientos, no respuestas, etc., etc. Al dedicar los valores más negativos posibles (como -9999, - 9998, -9997, etc.) a estos, facilita la consulta de todos los valores faltantes de cualquier tabla o matriz.

Otro más es que tales valores generalmente aparecen en pantallas gráficas como valores extremos. De todos los valores que puede elegir para destacar en un gráfico, el más negativo posible tiene la mayor probabilidad de estar lejos de sus datos.


Hay implicaciones y generalizaciones útiles:

  • 10303

  • Adopte una regla estándar de este tipo para facilitar la invención de códigos NoData en nuevas circunstancias (cuando diseña su propio software de base de datos).

  • Diseñe su software y sistemas para fallar dramáticamente si fallan en absoluto. Los peores errores son aquellos que son intermitentes, aleatorios o pequeños, porque pueden pasar desapercibidos y ser difíciles de cazar.

whuber
fuente
2
NaN10303
NaN no es un número, NA no está disponible al menos en R
llrs
1
En teoría, los flotantes IEEE admiten diferentes tipos de NaN que funcionarían bien como etiquetas para diferentes tipos de datos faltantes / no válidos. En la práctica, la mayoría de los lenguajes de programación carecen del soporte adecuado para distinguir tales NaN y son propensos a perder esa información adicional.
CodesInChaos
Muy bien, excepto que el bit de signo no ocupó ningún espacio en el esquema realmente utilizado por las bases de datos. Se dividirían en pares de dígitos de 00-99 y los tratarían como números; pero si el número fuera negativo, almacenarían 255 - # en lugar de número. También se usaron 127 y 128 para +/- inf.
Joshua
@Joshua Eso podría ser correcto para algunas bases de datos, pero definitivamente no fue el caso para muchas otras, especialmente al principio del desarrollo. De todos modos, cualquier base de datos que utilice valores codificados con decimales no podría haber utilizado el mecanismo que propone. Un ejemplo de una base de datos de PC temprana y ampliamente utilizada que funciona de la manera que describí es dBase, que finalmente se ofrece como los productos dBase III, Clipper y FoxPro (adquiridos por Microsoft y luego abandonados a favor de Access). Para formatos de intercambio de datos de ancho de campo fijo, el signo menos siempre ocupa un carácter.
whuber
13

Puede usar cualquier cosa para codificar valores perdidos. Algunos programas, como R, usan valores especiales para codificar datos faltantes, pero también hay paquetes de software, por ejemplo, SPSS, que no tienen ningún código especial para datos faltantes. En el segundo caso, debe elegir arbitrariamente dichos valores. Puede elegir cualquier cosa , pero generalmente es una buena idea elegir un valor que difiera visiblemente de sus datos (por ejemplo, sus datos son porcentajes en el rango 0-100, por lo que elige 999 para codificar datos faltantes, o sus datos son la edad humana y usa valores negativos para las observaciones faltantes). La idea detrás de esto es que al hacerlo, debería ser capaz de notar si algo salió mal y los números no suman.

Sin embargo, el problema con dicha codificación es que en realidad no puede notar la codificación especial y terminar con resultados de basura.

Tim
fuente
2

¿Hay variables calculadas en el conjunto de datos? ¿O es este un conjunto de datos analíticos que viene de datos combinados / ordenados? Algunos programas utilizan valores negativos muy grandes para denotar datos faltantes. Pero otro software crea valores perdidos con NA o .. Cuando son discrepantes, por lo general, algún procesamiento posterior ha llevado a un desacuerdo.

AdamO
fuente
2

Por supuesto, en SPSS, el (los) valor (es) que falta (s) 999 o lo que sea está etiquetado como un código especial que falta y se maneja por separado de otros valores. Puede tabularse por separado o excluirse por completo. Se hace una distinción del resultado de cosas como división cero o log (0).

JKP
fuente