Perché alcune persone usano -999 o -9999 per sostituire i valori mancanti?


32

Ho un set di dati. Ci sono molti valori mancanti. Per alcune colonne, il valore mancante è stato sostituito con -999, ma in altre colonne il valore mancante è stato contrassegnato come "NA".

Perché dovremmo usare -999 per sostituire il valore mancante?


1
Non ho mai visto -999 me stesso. Finora ho visto stringhe vuote e NA.
Sì, il

12
Perché vogliono rovinare orribilmente i risultati per le persone che fanno analisi superficiali e non leggono attentamente la documentazione! (Essendo serio, @Stephan Kolassa ha la vera risposta.)
Matthew Gunn,

1
Chiedi alla persona che ha fornito il set di dati ...?
BlueRaja - Danny Pflughoeft il

Meglio ancora sono 999 valori nelle colonne di misura per indicare che la misura non si applica ... almeno un -999 o uno 0 avrebbero il significato semantico che non è un valore valido / importante. 999 è solo il peggiore.
Adam Martin,

Mi sembra di aver letto una volta che questa era una convenzione fin dai tempi della registrazione dei dati su schede perforate. Eliminare una riga completa di 9s rendeva chiaramente visibili i dati mancanti quando si guardava la carta poiché era letteralmente una "riga mancante". Non riesco a trovare un riferimento per eseguire il backup, quindi lo lascerò solo come commento.
Lucas,

Risposte:


65

Questo è un aggancio dei tempi precedenti, quando il software per computer memorizzava i vettori numerici come vettori numerici. Nessun numero reale ha la semantica "Mi manca". Quindi, quando i primi software statistici dovevano distinguere tra numeri "veri" e valori mancanti, inserivano qualcosa che "ovviamente" non era un numero valido, come -999 o -9999.

Ovviamente, che -999 o -9999 rappresentasse un valore mancante non è affatto "ovvio". Abbastanza spesso, può sicuramente essere un valore valido. A meno che non si verifichi esplicitamente tali valori, è possibile che si verifichino errori "interessanti" di ogni tipo nelle analisi.

Al giorno d'oggi, i vettori numerici che possono contenere valori mancanti sono rappresentati internamente come vettori numerici "arricchiti", ovvero vettori numerici con informazioni aggiuntive su quali valori mancano. Questo ovviamente è molto meglio, perché i valori mancanti verranno trattati come tali e non erroneamente considerati validi.

Sfortunatamente, alcuni software usano ancora una tale convenzione, forse per compatibilità. E alcuni utenti hanno assorbito questa convenzione attraverso l'osmosi informale e immettono -999 invece di NA anche se il loro software supporta l'immissione pulita di valori mancanti.

Morale: non codificare i valori mancanti come -999.


1
Oltre a essere un blocco di tempi precedenti, ci sono probabilmente persone che non hanno mai imparato che esiste una rappresentazione esplicita di valori mancanti e quindi, quando hanno bisogno di inserire un valore mancante, pensano che la cosa da usare sia una specie di falso numero.
Kodiologo il

9
Questa non è solo una cosa da tenere d'occhio. Se sto scrivendo uno strumento per manipolare i dati, leggere in colonne di numeri è facile in quasi tutti i linguaggi di programmazione là fuori. Leggere valori, rilevare valori non numerici e analizzarli di conseguenza richiede molto più tempo. E se pensate che -9999 rispetti le statistiche, il mio gruppo con cui lavoro ha sviluppato l'amore per l'uso di 1e32 per valori non validi. Lascia che ti dica cosa succede alla tua varianza quando lo fai!
Cort Ammon - Ripristina Monica il

1
Ottima risposta succinta. Ma l'aggiunta di alcuni dettagli storici potrebbe renderlo una risposta ancora migliore. Certo, ci vorrebbe qualche ricerca. :)
tchakravarty,

1
Tale codifica potrebbe anche essere utilizzata per indicare un altro tipo di errore di misurazione; cioè "la macchina non funzionava" vs. "nessuno era lì per effettuare la misurazione".
Hao Ye,

1
@qqqwww: sarebbe meglio rilevare il valore utilizzato per indicare la mancanza e convertire tali voci in mancanza reale o NA. La discretizzazione dei dati numerici di solito non è una buona idea.
S. Kolassa - Ripristina Monica

24

Tali valori sono per i database. La maggior parte dei database molto tempo fa, e molti oggi, hanno assegnato un numero fisso di cifre per dati con valori interi. Un numero come -999 è il più piccolo che può essere memorizzato in quattro caratteri, -9999 in cinque caratteri e così via.

(Va da sé che - per definizione - un campo numerico non può memorizzare caratteri alfanumerici come "NA". È necessario utilizzare un codice numerico per rappresentare dati mancanti o non validi.)

Perché usare il numero più negativo che può essere memorizzato per indicare un valore mancante? Perché se lo tratti erroneamente come un numero valido, vuoi che i risultati siano drammaticamente errati. Quanto più i tuoi codici per i valori mancanti diventano realistici, tanto più sicuro sei, perché un input enormemente errato di solito rovina l'output. (I solidi metodi statistici sono notevoli eccezioni!)

Come può accadere un simile errore? Ciò si verifica continuamente quando si scambiano dati tra sistemi. Un sistema che presuppone che -9999 rappresenti un valore mancante produrrà beato quel valore quando si scrivono i dati nella maggior parte dei formati, come CSV. Il sistema che legge quel file CSV potrebbe non "conoscere" (o non essere "detto") per considerare tali valori come mancanti.

Un'altra ragione è che i buoni dati statistici e le piattaforme informatiche riconoscono molti diversi tipi di valori mancanti: NaN, valori veramente mancanti, overflow, underflow, mancate risposte, ecc. Ecc. Dedicando i valori più negativi possibili (come -9999, - 9998, -9997, ecc.), È facile interrogare tutti i valori mancanti da qualsiasi tabella o matrice.

Ancora un altro è che tali valori di solito vengono visualizzati nei display grafici come valori anomali estremi. Di tutti i valori che potresti scegliere di distinguere in un grafico, il più negativo possibile ha le maggiori possibilità di essere lontano dai tuoi dati.


Ci sono implicazioni e generalizzazioni utili:

  • 10303

  • Adottare una regola standard di questo tipo per semplificare l'invenzione dei codici NoData in nuove circostanze (durante la progettazione del proprio software di database).

  • Progetta il tuo software e i tuoi sistemi in modo che falliscano drammaticamente se falliscono. I peggiori bug sono quelli intermittenti, casuali o minuscoli, perché possono non essere rilevati ed essere difficili da scovare.


2
NaN10303

NaN non è un numero, NA non è disponibile almeno in R
ll

1
In teoria, i float IEEE supportano diversi tipi di NaN che funzionano bene come tag per diversi tipi di dati mancanti / non validi. In pratica, la maggior parte dei linguaggi di programmazione non ha un adeguato supporto per distinguere tali NaN e tende a perdere quelle informazioni extra.
CodesInChaos,

Molto buono, tranne per il bit di segno, non ha occupato spazio nello schema effettivamente utilizzato dai database. Si dividono in coppie di cifre da 00 a 99 e le trattano come numeri; ma se il numero fosse negativo, memorizzerebbero 255 - # anziché numero. Anche 127 e 128 sono stati usati per +/- inf.
Giosuè,

@Joshua Questo potrebbe essere corretto per alcuni database, ma sicuramente non è stato il caso di molti altri, specialmente all'inizio dello sviluppo. Qualsiasi database che utilizza valori codificati decimali non avrebbe comunque potuto utilizzare il meccanismo proposto. Un esempio di un database di PC utilizzato in precedenza e ampiamente utilizzato che funziona come ho descritto è dBase, eventualmente offerto come dBase III, Clipper e prodotti FoxPro (acquisiti da Microsoft e successivamente abbandonati a favore di Access). Per i formati di scambio dati a larghezza di campo fissa, il segno meno occupa sempre un carattere.
whuber

13

Puoi usare qualsiasi cosa per codificare i valori mancanti. Alcuni software, come R, utilizzano valori speciali per codificare i dati mancanti, ma esistono anche pacchetti software, ad esempio SPSS, che non dispongono di codici speciali per i dati mancanti. Nel secondo caso è necessario effettuare una scelta arbitraria per tali valori. Puoi scegliere qualsiasi cosa , ma in genere è una buona idea scegliere un valore che differisca visibilmente dai tuoi dati (ad esempio i tuoi dati sono percentuali nell'intervallo 0-100, quindi scegli 999 per codificare i dati mancanti, oppure i tuoi dati sono l'età umana e usi valori negativi per osservazioni mancanti). L'idea alla base è che così facendo dovresti essere in grado di notare se qualcosa è andato storto e i numeri non si sommano.

Il problema con tale codifica è tuttavia che in realtà non puoi notare la codifica speciale e finire con i risultati della spazzatura.


2

Ci sono variabili calcolate nel set di dati? Oppure si tratta di un set di dati analitici che deriva da dati uniti / ordinati? Alcuni software utilizzano valori negativi molto grandi per indicare i dati mancanti. Ma altri software creano valori mancanti con NA o .. Quando sono discrepanti, in genere alcune elaborazioni post hanno portato a disaccordi.


2

Ovviamente, in SPSS, i valori mancanti 999 o qualunque cosa sia contrassegnata come un codice mancante speciale e gestita separatamente dagli altri valori. Può essere tabulato separatamente o escluso del tutto. Viene fatta una distinzione dal risultato di cose come divisione zero o log (0).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.