其他
统计计量 | 做研究之前如何用Stata进行数据清理?
本文转载自公众号经管学院
来源:风哗啦啦啦少年(ID:fengzhizi2990)
数据清理第一步:整体数据查看
读取数据——数据转码Unicode
查看识别变量——isid、duplicates
重复记录是数据清理中一个非常常见的问题,可能就是因为该问题太常见了,所以Stata开发了一整套识别、描述和移除重复记录的命令。一般而言,每个数据集都有唯一一个识别每条记录的识别符(重复测量的长型数据除外)。Stata检查唯一识别符是否唯一的命令为isid(或许是is this an ID的缩写)。isid允许同时检查多个唯一识别符,如果没有返回值,就说明是唯一的(没有消息就是好消息);如果不唯一,就会出现红色提示variable *** does not uniquely identify the observations。如采用下面例子中的查重方式:数据清理第二步:变量清理
数据的逻辑清理
缺失值的识别与处理
对于调查数据来说,缺失值是司空见惯的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据每种缺失都会对统计分析产生不同的影响,数据清理时需要对每种缺失值采用不同的处理方式。那么,Stata中有哪些命令可以快速查看数据的缺失值呢?这里为大家简单介绍几个与查看缺失值相关的命令。命令1:misstable命令misstable可以快速查看变量的缺失值,它会以表格的形式呈现数据缺失的样本量,该命令的语法结构为:misstable summarize[varlist][if][in][, summarize_options]
运行命令misstable和选项all可以直接输出指定变量串中所有变量的缺失情况。如果变量本身没有缺失值,表格结果显示为空;由于misstable只能识别数值型变量的缺失值,无法识别字符型变量的缺失值,所以,对于字符型变量来说,表格结果显示为“(string variable)”。命令2:nmissing
nmissing是第三方用户写的命令,该命令的语法结构为:nmissing [varlist] [if exp] [in range] [, min(#) obs piasm trim]
运行命令nmissing不仅可以给出指定变量串中的数值型变量的缺失值的个数,还可以给出字符型变量的缺失值的个数。选项min(#)可以显示缺失值个数超过#的变量及其缺失值情况。命令3:mdesc
命令mdesc也是一个查看变量缺失情况的第三方命令,它的语法结构为:mdescvarlist [if] [in] [, abbreviate(#) any all none]
该命令可以识别数值型变量和字符型变量,它不仅可以查看变量缺失值的样本量,还可以看其分布。对于数据中的异常值,我们通常的处理方式有以下几种:方法一:直接删除----适合缺失值数量较小,并且是随机出现的,删除它们对整体数据影响不大的情况。方法二:使用一个全局常量填充---譬如将缺失值用“Unknown”等填充,但是效果不一定好,因为算法可能会把它识别为一个新的类别,一般很少用。方法三:使用均值或中位数代替----优点:不会减少样本信息,处理简单。缺点:当缺失数据不是随机数据时会产生偏差.对于正常分布的数据可以使用均值代替,如果数据是倾斜的,使用中位数可能更好。方法四:插补法随机插补法----从总体中随机抽取某个样本代替缺失样本
多重插补法----通过变量之间的关系对缺失数据进行预测,利用蒙特卡洛方法生成多个完整的数据集,在对这些数据集进行分析,最后对分析结果进行汇总处理
热平台插补----指在非缺失数据集中找到一个与缺失值所在样本相似的样本(匹配样本),利用其中的观测值对缺失值进行插补。
异常值的识别与处理
异常值(outlier)是指一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。通常面对样本时需要做整体数据观察,以确认样本数量、均值、极值、方差、标准差以及数据范围等。其中的极值很可能是异常值,此时如何处理异常值会直接影响数据结果。那么我们在Stata中应该如何识别异常值呢?、方法一:简单的统计分析拿到数据后可以对数据进行一个简单的描述性统计分析,譬如最大最小值可以用来判断这个变量的取值是否超过了合理的范围,如客户的年龄为-20岁或200岁,显然是不合常理的,为异常值。这种方法我们可以在Stata中summarize命令来实现。summarize命令用来计算及展示一组单变量的概要统计,若后面不指定变量,则计算当前数据集中所有变量的概要统计。若觉得某个变量的极值不符合常识,可选择detail选项,则显示变量的额外统计量,包括skewness、kurtosis、4个最小值、4个最大值,以及各种百分比。这就很容易以查看极值找到异常值。方法二:简单画图
我们也可以在Stata中采用scatter命令,通过画散点图的方法,直接观察是否存在异常值。方法三:箱形图
方法四:3δ原则
当数据服从正态分布:根据正态分布的定义可知,距离平均值3δ之外的概率为 P(|x-μ|>3δ) <= 0.003 ,这属于极小概率事件,在默认情况下我们可以认定,距离超过平均值3δ的样本是不存在的。因此,当样本距离平均值大于3δ,则认定该样本为异常值。winsor2 变量名 变量名, replace cuts(1 99)
p()里的数字可以自己设,一般是0.01。当然,0.01就是在1%的异常变量,也可以设定5%,就是p里面写成0.05。这个命令把最高1%和最低1%替换成离他们最近的值,不删除或变成缺失。这个命令也可以将识别出来的异常值直接删除,命令形式如下:winsor2 变量名 变量名, replace cuts(199) trim
这里插一句:数据清理永无止境,需要不断反复,有时候觉得数据很干净了,没问题了,过一段时间之后还是会发现一些小错误,有的能被修正过来,而有的只能保持错误状态。这个世界上很难找到完美的调查和数据,因此每次做清理时都要假定这个变量有问题,而不是这个变量没问题。经过上面那么多道程序之后,你是否觉得自己拿到手的数据(比如CGSS、CHNS、CFPS、CHIPS等等)已经可以做回归分析了?这里只能说相当抱歉!真的还差得远!如果真的要采用这些数据进行回归,你可能还要经历一下的过程: 数据清理第三步:一些更为深入的工作
首先明确,所研究的问题是否需要一个真正的长期面板
在数据调研过程中,样本丢失是一种非常常见的现象。比如原样本家庭访户的去世,原企业在原有领域的退出等等。然而依据我们所要研究的主题的差异,我们需要对数据样本进行选择。如果只是研究X与Y之间的因果性问题,那么所有样本可用。而如果要研究样本某个特征的长期趋势,那么我们可能需要只研究数据库中存在的长期样本。比如刘志军(2017)中的研究主题是收入流动性的长期趋势,那么他便在在所有调查的样本数据中,只保留有长期追踪调查的样本,根据研究的需要构造三个平衡面板数据。一是1989-2000年期间含有在9个调查年份中同时都出现的样本量;二是1989-2000年期间同时含有5个调查年份数据;三是2000-2011年期间同时含有所有5个调查年份数据。需要用权重对长周期调查中的数据磨损加以调整
每个数据库在数据调查过程中,都采用了特定的抽样方法,如CHNS采用的是多阶段分层整群随机抽样方法。这里对于不同的地区和样本进行了权重赋予,因此我们在重新使用过程中,需要利用这些权重对调查出的数据进行重新调整,以保证数据的随机性。在进行完上面的过程之后,我们的数据已经基本能用了,但是如果研究的主题是样本某特征的长期趋势,我们可能还要进行下一步工作:如果有余力,可以将调查缺失年份的数据补齐
很多数据库的调查年份的间隔并不是等距的,中间可能有多少一两年的差别。这时候为了能够更好地反映样本某特征的长期演化趋势,可以进一步我们采取一种方法将非调查年度的某特征数据补充完整:首先根据期初和期末收入计算出在此时间跨度中的每个样本i的年均收入增长速度g;接着再利用前一轮次的调查数据和增长速度计算缺失年份的数据来补充数据有助于反映某特征数据的全貌。总结:以上便是本人在学习过程中了解到的数据清理过程,分享给大家,欢迎批评指正,互相进步。另外,在学习与研究的初级阶段,数据清理大致占据了论文写作整体过程70%-80%的时间,可谓费时费力,希望大家不辞辛劳,咬牙坚持住;数据清理是论文写作的第一步,加油吧,不要吝惜自己去 dirty your hands,你会收货颇丰的,加油!共勉O(∩_∩)O哈哈~————————————
PS:本文并不包括出数据处理的所有步骤,如阅读数据库的相关调查问卷,给相关变量重新命名或者添加注释等基础工作,相信大家都了解,就不说了………………
点击阅读原文,进入CCAD数据库
·END·
星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文丨经管学院
推荐丨青酱
欢迎扫描👇二维码添加关注