【⾥昂第三⼤学】全球⼯商管理博⼠(DBA)⼁应⽤stata计量之前数据清洗必
备步骤
法国⾥昂第三⼤学,法国“卓越⼤学计划”⾼校(Université de Lyon),⾥昂⼤学⼯商管理硕⼠(MBA),⼯商管理博⼠(DBA)并含下列细分专业博⼠智能制造管理博⼠(DBA in IMM),⼈⼒资源管理博⼠(DBA in HRM),医疗健康管理博⼠(DBA in HM),⾦融管理博⼠(DBA in FM),纯学术博⼠(PhD)
中国项⽬中⼼中国校友会(北京、上海、⼴州、深圳)
全国教学中⼼由上海(中国管理中⼼)统⼀管理
两个表格核对重复数据
项⽬对象:企业家(特别是具有全球视野,有志于开拓全球市场的企业家)、企业决策者、企业⾼层管理⼈员、咨询⾏业专家、⾼校教师等
中国管理中⼼(上海)
电话:021-********
⼿机:136********(交⼤章⽼师,同号,建议添加咨询)
数据清理第⼀步:整体数据查看
⼀、读取数据--数据转码Unicode
⽐如常见的我们在stata14进⾏数据读取时,结果是乱码。然后⽤Unicode analyze 对其进⾏分析,结果说该⽂件需要进⾏Unicode translate。此时,关键是要设对需要转换⽂件的原始编码类型。例如,如果原始数据中变量标签为中⽂,⽤stata14打开时,变量标签⽆法识别。此时,需要设定编码类型。命令为 Unicodeencoding set gb18030,即设定编码类型为国标18030,即简体中⽂。然后,⽤Unicode analyze filename. dta 分析⽂件是否需要转换,如结果为需要,那么继续⽤Unicode translate filename. dta来转换数据⽂件中不可识别的中⽂汉字。成功以后,原始数据中不能识别的中⽂则可以在stata14中识别了。
其实,在实际数据读取过程中,我们只是偶然会遇到这种情况。更多的情况是各种不同数据格式之间的转换,⽐如⼀些数据库的原始数据是SAS数据或者SPSS数据甚⾄直接就是Excel数据,此时我们需要转换成Stata可以读取的dta格式,这⾥Excel数据可以⽤Stata软件直接转换,其他的推荐Stata translate软件进⾏转换。
⼆、查看识别变量--isid、duplicates
重复记录是数据清理中⼀个⾮常常见的问题,可能就是因为该问题太常见了,所以Stata开发了⼀整套识别、描述和移除重复记录的命令。
⼀般⽽⾔,每个数据集都有唯⼀⼀个识别每条记录的识别符(重复测量的长型数据除外)。Stata检查唯⼀识别符是否唯⼀的命令为isid(或许是is this an ID的缩写)。isid允许同时检查多个唯⼀识别符,如果没有返回值,就说明是唯⼀的(没有消息就是好消息);如果不唯⼀,就会出现红⾊提⽰variable *** does not uniquely identify the observations。如采⽤下⾯例⼦中的查重⽅式:
如果出现重复记录就需要详细查看重复记录的情况,深⼊检查数据集重复记录的Stata命令为duplicates,对应的Stata菜单操作⽅式为Data → Data utilities → Manageduplicate observations。Stata是这样描述duplicates命令的:duplicates命令⽤来报告、查看、标⽰和删除重复记录。具体应⽤,⼤家可以在Stata软件命令栏中输⼊help duplicates查看。
2
数据清理第⼆步:变量清理
⼀、数据的逻辑清理
在数据清理时,我们会根据常识及专业知识对连续变量间的关系进⾏核对,以识别可能的错误。如调查
对象的出⽣⽇期应⼩于或等于调查⽇期(常识),妇⼥的⽣育年龄肯定不能⼩于⽉经初潮年龄(专业知识)。还有⼀些具有经济意义的数据,如个⼈年消费总额肯定不能为负,数据样本中我国省级⾏政单位数⽬肯定不能超过34等等。这些需要学术研究者认真研究和⽐对,可以采⽤list命令列举的⽅式,或者scatter命令看散点图等简单处理后运⽤专业知识或者常识来判别。
⼆、缺失值的识别与处理
对于调查数据来说,缺失值是司空见惯的。缺失值的产⽣的原因多种多样,主要分为机械原因和⼈为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,⽐如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集⽽⾔)。⼈为原因是由于⼈的主观失误、历史局限或有意隐瞒造成的数据缺失,⽐如,在市场调查中被访⼈拒绝透露相关问题的答案,或者回答的问题是⽆效的,数据录⼊⼈员失误漏录了数据每种缺失都会对统计分析产⽣不同的影响,数据清理时需要对每种缺失值采⽤不同的处理⽅式。那么,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”等填充,但是效果不⼀定好,因为算法可能会把它识别为⼀个新的类别,⼀般很少⽤。
⽅法三:使⽤均值或中位数代替----优点:不会减少样本信息,处理简单。缺点:当缺失数据不是随机数据时会产⽣偏差.对于正常分布的数据可以使⽤均值代替,如果数据是倾斜的,使⽤中位数可能更好。
⽅法四:插补法
1)随机插补法----从总体中随机抽取某个样本代替缺失样本
2)多重插补法----通过变量之间的关系对缺失数据进⾏预测,利⽤蒙特卡洛⽅法⽣成多个完整的数据集,在对这些数据集进⾏分析,最后对分析结果进⾏汇总处理
3)热平台插补----指在⾮缺失数据集中到⼀个与缺失值所在样本相似的样本(匹配样本),利⽤其中的观
测值对缺失值进⾏插补。这样做的优点是:简单易⾏,准去率较⾼。缺点:变量数量较多时,通常很难到与需要插补样本完全相同的样本。但我们可以按照某些变量将数据分层,在层中对缺失值实⽤均值插补
4)拉格朗⽇差值法和⽜顿插值法(简单⾼效,数值分析⾥的内容)
⽅法五:建模法
可以⽤回归、使⽤贝叶斯形式化⽅法的基于推理的⼯具或决策树归纳确定。例如,利⽤数据集中其他数据的属性,可以构造⼀棵判定树,来预测缺失值的值。
以上⽅法各有优缺点,具体情况要根据实际数据分分布情况、倾斜程度、缺失值所占⽐例等等来选择⽅法。⼀般⽽⾔,建模法是⽐较常⽤的⽅法,它根据已有的值来预测缺失值,准确率更⾼。
三、异常值的识别与处理
异常值(outlier)是指⼀组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为⾼度异常的异常值。通常⾯对样本时需要做整体数据观察,以确认样本数量、均值、极值、⽅差、标准差以及数据范围等。其中的极值很可能是异常值,此时如何处理异常值会直接影响数据结果。那么我们在Stata中应该如何识别异常值呢?
⽅法⼀:简单的统计分析
拿到数据后可以对数据进⾏⼀个简单的描述性统计分析,譬如最⼤最⼩值可以⽤来判断这个变量的取值是否超过了合理的范围,如客户的年龄为-20岁或200岁,显然是不合常理的,为异常值。这种⽅法我们可以在Stata中summarize命令来实现。summarize命令⽤来计算及展⽰⼀组单变量的概要统计,若后⾯不指定变量,则计算当前数据集中所有变量的概要统计。若觉得某个变量的极值不符合常识,可选择detail选项,则显⽰变量的额外统计量,包括skewness、kurtosis、4个最⼩值、4个最⼤值,以及各种百分⽐。这就很容易以查看极值到异常值。
⼆:简单画图
也可以在Stata中采⽤scatter命令,通过画散点图的⽅法,直接观察是否存在异常值。
⽅法三:箱形图
box图分为四个分位点,75th和25th⽐较简单。
上四分位数Q3,⼜叫做升序数列的75%位点
下四分位数Q1,⼜叫做升序数列的25%位点
箱式图检验就是摘除⼤于Q3+3/2*(Q3-Q1),⼩于Q1-3/2*(Q3-Q1)外的数据,并认定其为异常值;
这⾥的具体操作过程,可以查看Stata中的graph box命令来更多了解。
⽅法四:3δ原则
当数据服从正态分布:根据正态分布的定义可知,距离平均值3δ之外的概率为 P(|x-μ|>3δ) <= 0.003 ,这属于极⼩概率事件,在默认情况下我们可以认定,距离超过平均值3δ的样本是不存在的。因此,当样本距离平均值⼤于3δ,则认定该样本为异常值。
样本为异常值。
当数据不服从正态分布:当数据不服从正态分布,可以通过远离平均距离多少倍的标准差来判定,多少倍的取值需要根据经验和实际情况来决定。
那么在stata中我们如何处理这些异常值呢?
⽅法⼀:直接删除
这只⼀种⾮常粗暴的⽅法。由于异常值对于统计推断的影响巨⼤,这种做法⽬前已经不多采⽤了,尤其当样本量规模不⼤甚⾄⽐较⼩的时候。当然如果数据量样本⾜够⼤⽽异常值并不多的情况下,慎⾏。
⽅法⼆:替换成均值或者中位数
这是⼀种⾮常偷懒的做法,如果是做回归那么就在回归时改成⽤中位数回归,不过这也确实是⼀种很不错的办法。
⽅法三:将异常值视为缺失值,交给缺失值处理⽅法来处理
缺失值的处理⽅式本⽂前⾯已经详细介绍,在此不再赘述。
⽅法四:winsorize命令
winsorize是⽤相应分位数的值替代分位数之外的值,⽽不是删掉,这样可以最⼤限度的保存数据信息。主要是根据已有⽂献来的,如果别⼈⽤winsorize你也要⽤,否则你的结论和别⼈的没有可⽐性。⽬前来看,⾄少在⾦融领域,使⽤winsorize⽐较普遍,删除异常值的做法越来越少的被使⽤了。Stata中有现成的winsorize程序,打开Stata,在命令⾏输⼊ssc install winsor2,replace,⾃动安装 winsor2。安装完之后,winsor2命令的基本格式为:
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等等)已经可以做回归分析了?这⾥只能说相当抱歉!真的还差得远!如果真的要采⽤这些数据进⾏回归,你可能还要经历⼀下的过程:
3
数据清理第三步:⼀些更为深⼊的⼯作
在这⾥,我们以CHNS数据为例,在进⾏完前两步的⼯作之后,对接下来个的⼯序进⾏详细解释。CHNS调查数据是中国疾病预防控制中⼼营养与⾷品安全所(原中国预防医学科学院营养与⾷品卫⽣研究所)与美国北卡罗来纳⼤学⼈⼝中⼼合作的追踪调查项⽬,其⽬的在于探讨中国社会的经济转型和计划⽣育政策的开展对国民健康和营养状况的影响。该调查始于1989年,到⽬前为⽌共进⾏了⼗次,包括1989
、1991、1993、1997、2000、2004、2006、2009、2011、2015年数据。范围覆盖了9个省的城市和农村地区,内容涉及⼈⼝特征,经济发展、公共资源和健康指标。除此之外,还有详细的社区数据,包括⾷品市场、医疗机构和其他社会服务设施的信息。⽬前CHNS数据上⾯这些优点使得CHNS 具有独特的应⽤价值。该调查采⽤多阶段分层整随机抽样⽅法。为了理清接下来的数据处理过程,我们可能还需要知道:
道:
⼀、⾸先明确,所研究的问题是否需要⼀个真正的长期⾯板
在数据调研过程中,样本丢失是⼀种⾮常常见的现象。⽐如原样本家庭访户的去世,原企业在原有领域的退出等等。然⽽依据我们所要研究的主题的差异,我们需要对数据样本进⾏选择。如果只是研究X与Y之间的因果性问题,那么所有样本可⽤。⽽如果要研究样本某个特征的长期趋势,那么我们可能需要只研究数据库中存在的长期样本。⽐如(2017)中的研究主题是收⼊流动性的长期趋势,那么他便在在所有调查的样本数据中,只保留有长期追踪调查的样本,根据研究的需要构造三个平衡⾯板数据。⼀是1989-2000年期间含有在9个调查年份中同时都出现的样本量;⼆是1989-2000年期间同时含有5个调查年份数据;三是2000-2011年期间同时含有所有5个调查年份数据。
⼆、需要⽤权重对长周期调查中的数据磨损加以调整
每个数据库在数据调查过程中,都采⽤了特定的抽样⽅法,如CHNS采⽤的是多阶段分层整随机抽样⽅法。这⾥对于不同的地区和样本进⾏了权重赋予,因此我们在重新使⽤过程中,需要利⽤这些权重对调查出的数据进⾏重新调整,以保证数据的随机性。这⼀过程是当下很多研究者没有进⾏的程序,但是实际上不进⾏真的是不⾏的。
在进⾏完上⾯的过程之后,我们的数据已经基本能⽤了,但是如果研究的主题是样本某特征的长期趋势,我们可能还要进⾏下⼀步⼯作:
三、如果有余⼒,可以将调查缺失年份的数据补齐
很多数据库的调查年份的间隔并不是等距的,中间可能有多少⼀两年的差别。这时候为了能够更好地反映样本某特征的长期演化趋势,可以进⼀步我们采取⼀种⽅法将⾮调查年度的某特征数据补充完整:⾸先根据期初和期末收⼊计算出在此时间跨度中的每个样本i的年均收⼊增长速度g;接着再利⽤前⼀轮次的调查数据和增长速度计算缺失年份的数据来补充数据有助于反映某特征数据的全貌。
总结:以上便是本⼈在学习过程中了解到的数据清理过程,分享给⼤家,欢迎批评指正,互相进步。另外,在学习与研究的初级阶段,数据清理⼤致占据了论⽂写作整体过程70%-80%的时间,可谓费时费⼒,希望⼤家不辞⾟劳,咬⽛坚持住;数据清理是论⽂写作的第⼀步,加油吧,不要吝惜⾃⼰去 dirty your hands,你会收货颇丰的,加油!共勉O(∩_∩)O哈哈~
PS:本⽂并不包括出数据处理的所有步骤,如阅读数据库的相关调查问卷,给相关变量重新命名或者添加注释等基础⼯作,相信⼤家都了解,就不说了………………

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。