Pourquoi certaines personnes utilisent -999 ou -9999 pour remplacer les valeurs manquantes?

32

J'ai un jeu de données. Il y a beaucoup de valeurs manquantes. Pour certaines colonnes, la valeur manquante a été remplacée par -999, mais pour d'autres colonnes, la valeur manquante a été marquée comme "NA".

Pourquoi utiliserions -999 pour remplacer la valeur manquante?

qqqwww
la source
1
Je n'ai jamais vu -999 moi-même. Jusqu'à présent, j'ai vu des chaînes vides et des NA.
Ye Tian
12
Parce qu'ils veulent horriblement gâcher les résultats pour les personnes qui effectuent une analyse superficielle et ne lisent pas la documentation attentivement! (En étant sérieux, @Stephan Kolassa a la vraie réponse.)
Matthew Gunn
1
Demandez à la personne qui a fourni le jeu de données ...?
BlueRaja - Danny Pflughoeft
Mieux encore, il y a 999 valeurs dans les colonnes de mesure pour indiquer que la mesure ne s'applique pas ... au moins un -999 ou un 0 aurait la sémantique voulant dire que ce n'est pas une valeur valide / importante. 999 est juste le pire.
Adam Martin
J'ai l'impression d'avoir lu une fois qu'il s'agissait d'une convention du temps de l'enregistrement de données sur des cartes perforées. La suppression d'une rangée complète de 9 rend les données manquantes clairement visibles lorsque l'on regarde la carte puisqu'il s'agit littéralement d'une "rangée manquante". Je ne trouve pas de référence pour appuyer cela, alors je vais le laisser comme commentaire.
Lucas

Réponses:

65

Il s’agit là d’une époque révolue, quand un logiciel informatique stockait des vecteurs numériques en tant que vecteurs numériques. Aucun nombre réel n'a la sémantique "je manque". Ainsi, lorsque les premiers logiciels statistiques ont dû faire la différence entre les "vrais" nombres et les valeurs manquantes, ils ont inséré quelque chose qui n'était "évidemment" pas valide, comme -999 ou -9999.

Bien sûr, que -999 ou -9999 représentait une valeur manquante n’est pas "évident" du tout. Très souvent, cela peut certainement être une valeur valide. À moins que vous ne vérifiiez explicitement ces valeurs, vous pouvez avoir toutes sortes d'erreurs "intéressantes" dans vos analyses.

De nos jours, les vecteurs numériques pouvant contenir des valeurs manquantes sont représentés de manière interne en tant que vecteurs numériques "enrichis", c'est-à-dire des vecteurs numériques avec des informations supplémentaires sur les valeurs manquantes. Ceci est bien sûr beaucoup mieux, car alors les valeurs manquantes seront traitées comme telles et ne seront pas considérées à tort comme valides.

Malheureusement, certains logiciels utilisent encore une telle convention, peut-être pour des raisons de compatibilité. Et certains utilisateurs ont imprégné cette convention par osmose informelle et ont entré -999 au lieu de NA même si leur logiciel prend en charge les valeurs manquantes.

Morale: ne codez pas les valeurs manquantes sous la forme -999.

S. Kolassa - Rétablir Monica
la source
1
En plus du fait qu’il a longtemps résisté, il y a probablement des gens qui n’ont jamais appris qu’il existe une représentation explicite des valeurs manquantes. Ainsi, lorsqu’ils doivent insérer une valeur manquante, déterminez que ce qu’il faut utiliser est une sorte de fausse nombre.
Kodiologue le
9
Ce n'est pas une simple affaire. Si j'écris un outil pour manipuler des données, la lecture de colonnes de chiffres est facile dans n'importe quel langage de programmation. Lire des valeurs dans, détecter des valeurs non numériques et les analyser en conséquence prend beaucoup plus de temps. Et si vous pensez -9999 mucks avec les statistiques, mon groupe avec lequel je travaille a développé un amour pour l'utilisation de 1e32 pour les valeurs invalides. Laissez-moi vous dire ce qu'il advient de votre variance quand vous faites cela!
Cort Ammon - Réintégrer Monica le
1
Super réponse, succincte. Mais ajouter des détails historiques pourrait en faire une réponse encore meilleure. Certes, cela prendrait des recherches. :)
tchakravarty
1
Un tel encodage pourrait également être utilisé pour désigner un autre type d'erreur de mesure; c'est-à-dire "la machine ne fonctionnait pas" et "personne n'était là pour faire la mesure".
Hao Ye
1
@qqqwww: il serait préférable de détecter la valeur utilisée pour indiquer le caractère manquant et de convertir ces entrées en véritable manque ou en NA. La discrétisation des données numériques n'est généralement pas une bonne idée.
S. Kolassa - Réintégrer Monica le
24

Ces valeurs sont pour les bases de données. Il y a longtemps et la plupart des bases de données, la plupart des bases de données allouaient un nombre fixe de chiffres aux données à valeurs entières. Un nombre comme -999 est le plus petit qui peut être stocké dans quatre caractères, -9999 en cinq caractères, etc.

(Il va sans dire que, par définition, un champ numérique ne peut pas stocker de caractères alphanumériques tels que "NA". Un code numérique doit être utilisé pour représenter des données manquantes ou non valides.)

Pourquoi utiliser le nombre le plus négatif qui puisse être stocké pour indiquer une valeur manquante? Parce que si vous le traitez par erreur comme un nombre valide, vous voulez que les résultats soient radicalement incorrects. Plus vos codes pour les valeurs manquantes deviennent réalistes, plus vous êtes en sécurité, car une entrée extrêmement erronée déforme généralement la sortie. (Les méthodes statistiques robustes sont des exceptions notables!)

Comment une telle erreur pourrait-elle arriver? Cela se produit tout le temps lorsque les données sont échangées entre les systèmes. Un système qui suppose que -9999 représente une valeur manquante l’affiche automatiquement lorsque vous écrivez les données dans la plupart des formats, tels que CSV. Le système qui lit ce fichier CSV peut ne pas "savoir" (ou ne pas être "informé") pour traiter de telles valeurs comme manquantes.

Une autre raison est que de bonnes données statistiques et des plates-formes informatiques reconnaissent de nombreux types de valeurs manquantes: NaN, véritablement valeurs manquantes, débordements, débordements, non-réponses, etc., en consacrant les valeurs les plus négatives possibles (telles que -9999, - 9998, -9997, etc.), vous facilitez l’interrogation de toutes les valeurs manquantes dans une table ou un tableau.

Une autre encore est que de telles valeurs apparaissent généralement dans les affichages graphiques comme des valeurs extrêmes extrêmes. Parmi toutes les valeurs que vous pouvez choisir de distinguer dans un graphique, la plus négative possible présente les plus grandes chances de vous éloigner de vos données.


Il y a des implications et des généralisations utiles:

  • 10303

  • Adoptez une règle standard de ce type pour faciliter l’invention des codes NoData dans de nouvelles circonstances (lorsque vous concevez votre propre logiciel de base de données).

  • Concevez vos logiciels et vos systèmes de manière à ce qu’ils échouent de manière dramatique. Les pires insectes sont ceux qui sont intermittents, aléatoires ou minuscules, car ils peuvent rester non détectés et être difficiles à traquer.

whuber
la source
2
NaN10303
NaN n'est pas un nombre, NA n'est pas disponible au moins en R
llrs.
1
En théorie, les flotteurs IEEE prennent en charge différents types de NaN qui fonctionneraient bien comme balises pour différents types de données manquantes / non valides. En pratique, la plupart des langages de programmation ne prennent pas en charge la distinction entre ces NaN et risquent de perdre ces informations supplémentaires.
CodesInChaos
Très bon sauf que le bit de signe ne prend aucune place dans le schéma réellement utilisé par les bases de données. Ils se sépareraient en paires de chiffres de 00 à 99 et les traiteraient comme des nombres; mais si le nombre était négatif, ils stockeraient 255 - # au lieu du nombre. De plus, 127 et 128 ont été utilisés pour +/- inf.
Josué
@ Josua Cela pourrait être correct pour certaines bases de données, mais ce n'était certainement pas le cas pour beaucoup d'autres, surtout au début du développement. Toute base de données utilisant des valeurs décimales décimales n'aurait de toute façon pas utilisé le mécanisme que vous proposez. Un exemple de base de données informatique ancienne et largement utilisée qui fonctionne de la manière décrite ci-dessus est dBase, proposé sous la forme de produits dBase III, Clipper et FoxPro (acquis par Microsoft puis abandonnés au profit d'Access). Pour les formats d'échange de données à largeur de champ fixe, le signe moins occupe toujours un caractère.
whuber
13

Vous pouvez utiliser n'importe quoi pour encoder les valeurs manquantes. Certains logiciels, tels que R, utilisent des valeurs spéciales pour coder les données manquantes, mais il existe également des progiciels, tels que SPSS, qui ne comportent aucun code spécial pour les données manquantes. Dans le second cas, vous devez faire un choix arbitraire pour ces valeurs. Vous pouvez choisir n’importe quoi , mais il est généralement judicieux de choisir une valeur qui diffère visiblement de vos données (par exemple, vos données correspondent à des pourcentages compris entre 0 et 100, de sorte que vous choisissez 999 pour coder les données manquantes ou que vos données correspondent à l’âge humain et vous utilisez des valeurs négatives pour les observations manquantes). L'idée sous-jacente est que, ce faisant, vous devriez pouvoir remarquer si quelque chose ne va pas et si les chiffres ne concordent pas.

Le problème avec un tel encodage est cependant que vous ne pouvez réellement pas remarquer l’encodage spécial et aboutir à des résultats décevants.

Tim
la source
2

Y a-t-il des variables calculées dans le jeu de données? Ou est-ce un ensemble de données analytiques qui provient de données fusionnées / triées? Certains logiciels utilisent de très grandes valeurs négatives pour indiquer les données manquantes. Mais un autre logiciel crée des valeurs manquantes avec NA ou .. Lorsqu'ils sont discordants, certains post-traitements ont généralement conduit à un désaccord.

AdamO
la source
2

Bien entendu, dans SPSS, la ou les valeurs manquantes 999 ou quoi que ce soit sont étiquetées comme un code manquant spécial et gérées séparément des autres valeurs. Il peut être tabulé séparément ou totalement exclu. Une distinction est faite du résultat d'éléments comme la division zéro ou le log (0).

JKP
la source