DC娱乐网

Stata 数据质量核查:实用工具汇总

在拟合统计模型前,必须先对数据集进行核查,保证数据准确、完整。无论是外部获取还是自主整理的数据,都需要排查录入错误。本文

在拟合统计模型前,必须先对数据集进行核查,保证数据准确、完整。无论是外部获取还是自主整理的数据,都需要排查录入错误。本文将讲解 Stata 数据质量核查的四大核心命令:duplicates、isid、assert 和 misstable。

重复值

我们使用一组模拟患者数据,数据对象为接受眼部矫正手术的患者。每条数据包含患者编号、手术入院日期、年龄、性别以及收缩压。

每位患者仅可接受一次主手术,数年后可进行修复补强手术。因此,我们首先需要核对患者编号与手术日期信息的准确性,第一步先排查重复观测数据。

该数据集共有19个观测值,其中15个是唯一的。对于这 15 个观测值,我们只有一份信息副本。然而,有4个观测值是重复的。有两名患者的记录出现了两次。我们将其列出如下:

我们有两份患者ID 3和6的副本;我们可以看到所有变量的信息都是重复的。下面,我们删除这些重复值。

另一款实用的社区扩展命令是distinct,该命令可统计单个或多个变量的唯一值数量。它也能统计由多个变量组合形成的独立分组数,例如按患者编号和手术日期划分的唯一分组数量。输入search distinct可查看详细说明,若需使用该命令,按照指引完成安装即可。

唯一标识符

删除重复项之后,我们现在检查观测结果是否由患者ID和手术日期的组合唯一标识;如果是,isid将不会报告任何信息。我们使用前缀capture来捕获返回代码,以防isid产生错误;这在do-files中非常有用,因为它能让您的do-file在出现错误时继续运行。我们还使用noisily前缀,以便能够看到错误消息。

我们发现patient_id和surgery_date并不能唯一标识观测值。让我们检查一下患者ID是否存在重复项:

这些重复观测值的患者ID相同,但其他变量的取值不同;否则,它们将在我们之前的duplicates report中报告。让我们仔细看看重复项:

观测值1和2的患者ID均为1;birth_date和sex相同。这似乎是同一位患者;该患者最初在2020年接受了手术,并于2025年前来复诊并进行修复。因此,这两个观测值在patient_id 上是重复的,但并非真正的重复值,因为它们在其他变量(如age和surgery_date)上存在差异。对于某些数据应用,您可能希望删除此类观测值;您可以通过输入以下内容来实现:

此处需要force选项,因为您要删除的是在某个变量上重复但在其他变量上是唯一值的观测值。如果我们发出此命令,就会丢失有关该患者修复手术的信息,这是我们不想看到的;因此,请注意,删除此类观测值时会导致数据丢失。

我们还发现,观测值10和11的患者ID都是9。它们的手术日期相同,但出生日期和性别不同,所以这似乎是一个数据输入错误。我们需要将其中一个观测值的患者ID更改为另一个值;让我们先查看当前ID号码的范围。

我们的患者ID范围从1到15。为了确保每个患者的ID号都是唯一的,我们可以将患者的编号改为0或16;我们选择16。

codebook命令可用于检查变量的取值范围、计量单位以及缺失值数量。如果想要详细查看各取值的频数,推荐使用fre命令。这款社区扩展命令能够生成一维频数表,搭配值标签使用效果尤佳。

举个例子,若需要统计每个区县对应的观测样本量,fre会同时展示区县编号与对应标签,例如 ‘‘1 Los Angeles’’ ,‘‘2 Bronx’’。输入search fre可查阅详细介绍,如需使用该命令,按照提示完成安装即可。

现在我们再次运行isid,以确认每位患者都能被唯一标识。

没有输出任何相关报告。我们可以确认每位患者及其手术日期对应唯一一条观测值。

验证主张的真实性

接下来,我们要确保变量highbp的编码是正确的。我们认为收缩压达到160或更高即为高血压。现在来确认一下,对于收缩压大于等于160的观测值,highbp 的值为1。我们指定表达式,当bpsystol大于或等于 160 时,highbp等于1;如果该主张对所有观测值都成立,assert将不会报告任何内容。然而,即使只有一条观测值不满足该条件,输出结果也会提示主张为假。

assert 检查我们的表达式对于每个观测值是否为真,并报告存在2处矛盾。若您处理的是大型数据集,建议使用fast选项,该选项会强制assert在发现第一处矛盾时即停止运行。这样您就无需等待assert逐条检查所有观测值。

有两条观测值不满足我们的表达式。这可能是因为收缩压实际上偏低,但highbp被错误地编码为1,或者收缩压实际偏高,但highbp被错误编码为0。我们将在下面逐一排查这两种情况。

对于观测值13,highbp应被编码为1。我们在下面进行修正。

检查缺失值

对于观测值15,血压数据缺失,所以highbp也应标记为缺失。让我们查看数据集中共有多少缺失值。

变量bpsystol是唯一存在缺失值的变量。让我们确认一下,在bpsystol缺失的另一条观测记录中,highbp是否也缺失。

我们需要将这两个值都替换为系统缺失值。

通过这最后的改动,我们再次验证主张的准确性。我们断言,当收缩压bpsystol非缺失且大于等于160时,highbp等于1。

现在我们的主张成立。

以上就是检查重复值和缺失值、确认唯一标识符以及验证数据陈述是否属实的方法。