它有助于了解数据是如何记录的。
让我分享一个故事。很久以前,许多数据集只存储在褪色的硬拷贝中。在那些黑暗的日子里,我与一个组织(拥有伟大的血统和规模;你们中的许多人可能拥有它的股票)签订了合同,将其其中一家制造厂的大约 10^5 条环境监测数据记录计算机化。为此,我亲自标记了实验室报告的架子(以显示数据的位置),创建数据输入表格,并与临时机构签约以进行识字工人将数据输入表格。(是的,您必须为能够阅读的人支付额外费用。)由于数据的价值和敏感性,我一次与两名工人并行执行此过程(他们通常每天都在变化)。花了几个星期。我编写了软件来比较两组条目,系统地识别和纠正所有出现的错误。
男孩有错误!会出什么问题?描述和测量误差的一个好方法是在基本记录的级别上,在这种情况下,它是对在给定监测点上获得的特定样品的单个分析结果(通常是某种化学物质的浓度)的描述给定日期。在比较这两个数据集时,我发现:
遗漏错误:一个数据集将包含记录,另一个则不包含。这通常是因为(a)在页面底部会忽略一两行,或者(b)会跳过整个页面。
明显的遗漏错误实际上是数据输入错误。记录由监测点名称、日期和“分析物”(通常是化学名称)标识。如果其中任何一个有印刷错误,它将不会与与之相关的其他记录匹配。实际上,正确的记录消失了,错误的记录出现了。
假复制。相同的结果可以出现在多个来源中,被多次转录,并且似乎是真正的重复测量,但实际上并非如此。重复项很容易检测,但确定它们是否错误取决于是否知道重复项是否应该出现在数据集中。有时候你就是不知道。
坦率的数据输入错误。“好”的很容易被抓住,因为它们改变了数据的类型:例如,使用字母“O”代表数字“0”,将数字变成非数字。其他好的错误会极大地改变值,以至于可以通过统计测试轻松检测到。(在一种情况下,“1,000,010 mg/Kg”中的前导数字被截断,留下了 10 的值。当您谈论农药浓度时,这是一个巨大的变化!)糟糕的错误很难被发现,因为它们会改变一个与其余数据相匹配(某种程度)的值,例如为“50”键入“80”。(这种错误一直发生在 OCR 软件中。)
换位。可以输入正确的值,但与错误的记录键相关联。这是阴险的,因为数据集的全局统计特征可能保持不变,但可以在组之间创建虚假差异。可能只有像复式输入这样的机制甚至能够检测到这些错误。
一旦您意识到这些错误并知道它们是如何发生的,或者有一个理论,您就可以编写脚本来控制您的数据集以查找可能存在的此类错误,并将它们标记为进一步关注。你不能总是解决它们,但至少你可以包含一个“评论”或“质量标志”字段,以在他们以后的分析中伴随数据。
从那时起,我就开始关注数据质量问题,并有更多机会对大型统计数据集进行全面检查。没有一个是完美的;他们都受益于质量检查。我多年来为此制定的一些原则包括
只要有可能,在数据输入和数据转录过程中创建冗余:校验和、总计、重复输入:任何支持自动内部一致性检查的东西。
如果可能,创建和利用另一个描述数据应该是什么样子的数据库:即计算机可读的元数据。 例如,在药物实验中,您可能事先知道每位患者将被看 3 次。这使您可以创建一个数据库,其中包含所有正确的记录及其标识符以及等待填写的值。用给定的数据填写它们,然后检查重复、遗漏和意外数据。
无论您计划如何格式化数据集以进行分析,始终对您的数据进行规范化(具体而言,将它们至少转换为第四范式)。这迫使您为正在建模的每个概念上不同的实体创建表。(在环境案例中,这将包括监测位置、样品、化学品(特性、典型范围等)、这些样品的测试(测试通常涵盖一套化学品)以及这些测试的个别结果的表格。在这样做的过程中,您可以对数据质量和一致性进行许多有效检查,并识别许多可能丢失、重复或不一致的值。
这项工作(需要良好的数据处理技能,但很简单)非常有效。如果您渴望分析大型或复杂的数据集,并且对关系数据库及其理论没有很好的工作知识,请尽快将其添加到您的学习清单中。它将在您的整个职业生涯中带来红利。
始终尽可能多地执行“愚蠢”检查。这些是对明显事物的自动验证,例如日期落在预期的时期内,患者(或化学品或其他)的数量总是正确地加起来,值总是合理的(例如,pH 值必须在 0 到 14 之间,并且可能在例如,血液 pH 值读数的范围要窄得多)等。这是领域专业知识可以提供最大帮助的地方:统计学家可以无所畏惧地向专家提出愚蠢的问题,并利用答案来检查数据。
当然可以说的更多——这个主题值得一本书——但这应该足以激发想法。