数据清理第一步:整体数据查看

一、查看识别变量--isid、duplicates

一般而言,每个数据集都有唯一一个识别每条记录的识别符(重复测量的长型数据除外)。Stata检查唯一识别符是否唯一的命令为isid(或许是is this an ID的缩写)。isid允许同时检查多个唯一识别符,如果没有返回值,就说明是唯一的(没有消息就是好消息);如果不唯一,就会出现红色提示variable *** does not uniquely identify the observations。如采用下面例子中的查重方式:

isid company   //检查company是否唯一
isid company year        //检查company year 是否唯一

如果出现重复记录就需要详细查看重复记录的情况,深入检查数据集重复记录的Stata命令为duplicates,对应的Stata菜单操作方式为Data → Data utilities → Manageduplicate observations。Stata是这样描述duplicates命令的:duplicates命令用来报告、查看、标示和删除重复记录。具体应用,大家可以在Stata软件命令栏中输入help duplicates查看。

*单变量
bys symbol: gen filter=_n  //对相同id的数据从1到最后一条编号
keep if filter == 1    *多变量
sort date symbol
by date symbol : gen set=_n         //证券代码和date相同则编号:从1到 最后
keep if set==1   //date 和 证券代码相同的观测,只保留了一条记录
drop set
save mystockdata_dropreplicate,replace*一行即可
duplicates drop year stkcd,force

数据清理第二步:变量清理

一、缺失值的识别与处理

命令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]

该命令可以识别数值型变量和字符型变量,它不仅可以查看变量缺失值的样本量,还可以看其分布。

对于数据中的异常值,我们通常的处理方式有以下几种:

方法一:直接删除----适合缺失值数量较小,并且是随机出现的,删除它们对整体数据影响不大的情况。

Stata会区分缺失值:数值型变量缺失以点(.)表示,字符型变量确实以双引号("")表示,不要与空字符型变量(“ ”)搞混。

drop if provincename==""       //删除字符型变量

代码批量删除空缺值

foreach i in CF DIV C LEV TobinQ {drop if `i'==.
}

方法二:使用一个全局常量填充---譬如将缺失值用“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等等)已经可以做回归分析了?这里只能说相当抱歉!真的还差得远!如果真的要采用这些数据进行回归,你可能还要经历一下的过程:

数据清理第三步:一些更为深入的工作

在这里,我们以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;接着再利用前一轮次的调查数据和增长速度计算缺失年份的数据来补充数据有助于反映某特征数据的全貌。

stata计量之前数据清洗的必备步骤相关推荐

  1. 【Stata】Stata计量论文写作:实证论文如何写作?

    Stata计量论文写作:实证论文如何写作? 一.论文三支柱 二.详细例子解说 2.1 描述性统计 2.2 相关性分析 2.3 实证分析 2.3.1 回归 2.3.2 显著性 2.4 导出实证结果 一. ...

  2. 普通人,自学编程,5个必备步骤

    天给大家分享个干货哈 普通人自学编程 想学成找到一份工作甚至进大厂 非常有效且必备的5个步骤 文章最后 还给大家提供了一些免费的学习资料 记得提前收藏起来 相信很多人在最开始学编程的时候 上来就是去网 ...

  3. Stata计算莫兰指数基本步骤

    之前的博客有介绍过R和Geoda计算莫兰指数的方法,考虑到有时候我们需要自定义空间权重矩阵来计算莫兰指数,那以上两种方法显得有点复杂.所以,今天来分享Stata计算莫兰指数的方法~ 目录 一.数据准备 ...

  4. 第二届Stata中国用户大会暨“计量经济方法及应用研讨会”会议通知

    会议背景: 2018年"第二届Stata中国用户大会"(2018China Stata Users' Conference)是由北京友万信息科技有限公司(简称:友万科技)主办,顺德 ...

  5. matlab 定义一个有自变量的方程_Eviews、Stata、Python、Matlab、R描述+相关+回归分析教程汇总...

    1描述统计分析简介 基本统计分析,又叫描述性统计分析,描述性统计主要包括数据的集中趋勢分析.数据的离散程度分析.频数分布分析等. 通常对收集来的数据进行直接的频率.频数等描述,描述性统计分析一般对样本 ...

  6. 修改stata执行程序和调用数据路径的cd命令,以及查找程序的findit或help命令

    如需转载,请注明来源,谢谢合作. 若本文对您有一点点的帮助,欢迎点赞.评论和关注.您的鼓励和支持,是我继续学习和分享的动力. 修改stata的存储路径,可以方便所写程序执行修改路径后文件夹里的程序和数 ...

  7. 7个步骤,帮您轻松实现云迁移

    虽然内部部署的数据中心技术不会很快消失,但是云计算作为一种替代方案具有许多吸引人的好处,其中包括可扩展性和敏捷性.因此,许多企业将其应用程序和数据迁移到云中.但在企业迈出这一步之前,需要考虑一些重要事 ...

  8. Win10进不去系统怎么办? 不重装就能修复系统必备技能

    使用系统光盘或者U盘启动是不错的想法,因为这可以直接调出命令提示符来启动注册表编辑器.按照脚本之家介绍过的方法,在使用镜像盘启动后,按Shift+F10就可以调出命令提示符,然后输入regedit按回 ...

  9. 常用数据清洗方法大盘点

    本文来自网易云社区 数据清洗是将重复.多余的数据筛选清除,将缺失的数据补充完整,将错误的数据纠正或者删除,最后整理成为我们可以进一步加工.使用的数据. 所谓的数据清洗,也就是ETL处理,包含抽取Ext ...

  10. r library car_Stata+R:Stata 与 R 等效命令备忘录

    作者:任建辉(山西财经大学) 邮箱:jianhui1986_love@126.com 连享会-知乎推文列表 Note: 助教招聘信息请进入「课程主页」查看. 因果推断-内生性 专题 ⌚ 2020.11 ...

最新文章

  1. (转)跟我一起写 Makefile(一)(陈皓)
  2. curl访问nagios中Host Status Details For All Host Groups页面的方法
  3. HTTP文件下载原理(OTA 下载 断点续传)
  4. python连连看_python tkinter实现连连看游戏
  5. 京东 你访问的页面需要验证证书_SSL证书安全认证有什么原理?
  6. QTCreator2.8.0+Qt Open source 4.8.5环境配置(Win7x64)
  7. python3第八天(面向对象)
  8. java io中file类_java中IO常见的IO流和file类理论总结
  9. 淘宝API接口:item_cat_get - 获得淘宝商品类目
  10. 2020年ROS机器人操作系统用户官方调查
  11. android caj转word,如何把整篇CAJ文章转换成Word文档
  12. iphone视频照片恢复
  13. Linux下Makefile的automake生成全攻略(转)
  14. Flask模板中可以直接访问的特殊变量和方法
  15. 黑客入侵自我保护手册
  16. VS2015使用WTL库的ribbon风格界面的注意事项
  17. FL Studio20.9序列号账户注册教程
  18. 【NOIP2017提高组】轰炸
  19. CRE6959TL70V055
  20. HTML实现HTTP-POST请求访问SpringMVC

热门文章

  1. windows10安装masscan
  2. 万能五笔输入法弹窗_万能五笔输入法广告怎么去掉
  3. php 三消算法,三消游戏关卡设计教程(初级篇)——基本地形设计
  4. 浙大PAT 1051
  5. http下载大文件测试
  6. UNITY读取图片素材的URL并使用
  7. Java LDAP统一身份认证
  8. 第10章第13节:使用iSlide的图标库往幻灯片中插入一枚图标 [PowerPoint精美幻灯片实战教程]
  9. 【毕业设计】基于情感分析的网络舆情热点评估系统 - 大数据 python可视化 数据分析
  10. 卸载Microsoft Edge浏览器