为什么有些人使用-999或-9999替换缺失值?


32

我有一个数据集。有很多缺失值。对于某些列,缺失值被替换为-999,而对于其他列,缺失值被标记为“ NA”。

为什么我们用-999代替缺失值?


1
我自己从未见过-999。到目前为止,我已经看到了空字符串和NA。
Ye Tian

12
因为他们想为那些做表面分析并且不仔细阅读文档的人搞砸结果!(尽管很认真,@ Stephan Kolassa才是真正的答案。)
马修·冈恩

1
问提供数据集的人...吗?
BlueRaja-Danny Pflughoeft16年

更好的是,度量值列中的999个值指示该度量不适用...至少-999或0的语义意味着它不是有效/重要的值。999只是最糟糕的。
亚当·马丁

我觉得我曾经读过,这是从在打孔卡上记录数据的时代开始的惯例。剔除整行9s使得看卡时丢失的数据清晰可见,因为它实际上是“丢失的行”。我找不到支持此操作的参考,因此将其保留为评论。
卢卡斯

Answers:


65

当计算机软件将数值向量存储为数值向量时,这是较早时期的坚持。没有实数具有“我不见了”的语义。因此,当早期的统计软件不得不区分“真实”数字和缺失值时,他们输入了“显然”不是有效数字的值,例如-999或-9999。

当然,-999或-9999代表缺失值根本不是“显而易见的”。通常,它肯定是一个有效值。除非您明确检查这些值,否则分析中可能会出现各种“有趣的”错误。

如今,可以包含缺失值的数字向量在内部表示为“丰富的”数字向量,即具有关于哪些值缺失的附加信息的数字向量。这当然好得多,因为缺失的值将被照这样处理,而不会被错误地视为有效。

不幸的是,某些软件可能仍使用这种约定,也许是出于兼容性考虑。而且,即使他们的软件支持干净地输入缺失值,一些用户也通过非正式渗透吸收了该约定,并输入-999而不是NA。

道德:不要将缺失值编码为-999。


1
除了是早期的坚持之外,可能还有一些人从未听说过存在缺失值的显式表示,因此,当他们需要插入缺失值时,会认为使用的东西是伪造的。数。
Kodiologist '16

9
这不仅仅是一个坚持的事情。如果我正在编写用于处理数据的工具,那么使用几乎所有编程语言都可以很容易地读取数字列。读入值,检测非数值并相应地解析它们会花费大量时间。如果您认为-9999与统计数字混为一谈,则与我一起工作的小组非常喜欢将1e32用于无效值。让我告诉您您这样做时方差会发生什么!
科特·阿蒙

1
简洁的答案。但是添加一些历史细节可能会使它成为一个更好的答案。诚然,这需要一些研究。:)
tchakravarty

1
这种编码也可以用来表示某种其他类型的测量误差。即“机器不工作”与“没有人在那里进行测量”。
浩业

1
@qqqwww:最好检测用于指示缺失的值,并将此类条目转换为真正的缺失或NA。离散化数字数据通常不是一个好主意。
S. Kolassa-恢复莫妮卡

24

这些值适用于数据库。很久以前的大多数数据库,今天的许多数据库,为整数值数据分配了固定数量的数字。像-999这样的数字是最小的,可以存储四个字符,-9999可以存储五个字符,依此类推。

(不言而喻,根据定义,数字字段不能存储字母数字字符,例如“ NA”。 必须使用某些数字代码来表示丢失或无效的数据。)

为什么使用可以存储的最大负数来表示缺失值? 因为如果您错误地将其视为有效数字,则希望结果显着不正确。 缺少值的代码越接近现实,您就越安全,因为严重错误的输入通常会破坏输出。(强大的统计方法是个例外!)

这样的错误怎么会发生?在系统之间交换数据时,始终会发生这种情况。当您以大多数格式(例如CSV)写出数据时,假设-9999表示缺少值的系统将自动输出该值。读取该CSV文件的系统可能不会“知道”(或不会被“告知”)以将此类值视为丢失。

另一个原因是,良好的统计数据和计算平台会识别许多不同类型的缺失值:NaN,真正的缺失值,上溢,下溢,无响应等。通过投入尽可能多的负值(例如-9999,- 9998,-9997等),您可以轻松查询任何表或数组中的所有缺失值。

还有另一个是,这些值通常在图形显示中显示为极端异常值。在您可以选择在图形中脱颖而出的所有值中,最大可能的负值是远离数据的最大机会。


有一些有用的含义和概括:

  • 10303

  • 采用这种类型的标准规则可以使在新情况下(设计自己的数据库软件时)轻松发明NoData代码。

  • 如果软件和系统完全失败,则将它们设计为严重失效。最严重的错误是断断续续的,随机的或微小的错误,因为它们可能会被发现而难以发现。


2
NaN10303

NaN不是数字,NA至少在R中不可用
llrs

1
从理论上讲,IEEE浮动支持不同种类的NaN,它们可以很好地用作不同种类的丢失/无效数据的标签。实际上,大多数编程语言都缺乏适当的支持来区分此类NaN,并且容易丢失这些额外信息。
CodesInChaos

非常好,除了符号位在数据库实际使用的方案中不占用任何空间。他们将分成00-99的数字对,并将它们视为数字。但是如果数字为负,则将存储255-#而不是数字。127和128也用于+/- inf。
约书亚

@Joshua对于某些数据库来说可能是正确的,但对于其他许多数据库则绝对不是这种情况,尤其是在开发初期。无论如何,任何使用十进制编码值的数据库都不会使用您建议的机制。dBase就是一个早期且广泛使用的PC数据库的示例,它可以像我描述的那样工作,最终以dBase III,Clipper和FoxPro产品的形式提供(被Microsoft收购,后来被Access放弃了)。对于固定字段宽度的数据交换格式,减号始终占据一个字符。
ub

13

您可以使用任何方法来编码缺失值。某些软件(例如R)使用特殊值对丢失的数据进行编码,但是也有一些软件包(例如SPSS)没有针对丢失数据的任何特殊代码。在第二种情况下,您需要为这些值做出任意选择。您可以选择任何内容,但通常最好选择一些明显不同于您数据的值(例如,您的数据是0-100范围内的百分比,因此您选择999来编码丢失的数据,或者您的数据是人类年龄和您将负值用于缺失的观测值)。其背后的想法是,这样做可以使您注意到是否出了问题,并且数字没有累加。

但是,这种编码的问题是,您实际上无法注意到特殊的编码,并最终导致了垃圾结果。


2

数据集中是否有计算变量?还是这是来自合并/排序数据的分析数据集?一些软件使用非常大的负值来表示丢失的数据。但是其他软件会使用NA或NA创建缺失值.。当它们不一致时,通常一些后期处理会导致分歧。


2

当然,在SPSS中,缺失值999或任何IS被标记为特殊的缺失代码并与其他值分开处理。它可以单独列出,也可以完全排除。区别在于零除法或log(0)之类的结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.