Stata:虚拟变量专题-生成与使用

New! lianxh 命令发布了:   GIF 动图介绍
随时搜索 Stata 推文、教程、手册、论坛,安装命令如下:
. ssc install lianxh

作者:冷萱(西南财经大学)
邮箱:lx@smail.swufe.edu.cn

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。

编者按:本文主要摘译自下文,特此致谢!
Source:Cox N J, Schechter C B. Speaking Stata: How best to generate indicator or dummy variables[J]. The Stata Journal, 2019, 19(1): 246-259. -PDF-


目录

  • 1. 引言

  • 2. 分类变量生成虚拟变量

  • 3. 连续变量生成虚拟变量

  • 4. 生成虚拟变量的进阶做法

    • 4.1 根据多个变量生成虚拟变量

    • 4.2 借助 inlist() 命令生成虚拟变量

    • 4.3 借助 inrange() 命令生成虚拟变量

  • 5. 总结

  • 6. 相关推文


1. 引言

在实证分析中,虚拟变量应用较为广泛,例如可以作为被解释变量 (是否创业、是否上大学等),解释变量 (DID 中经常用到),控制变量 (是否城镇、是否老年人、是否党员等),并且相对简单。即便如此,生成虚拟变量仍有诸多细节需要注意,否则会导致虚拟变量存在偏差。

为此,本文将对 Cox 和 Schechter (2019) 关于如何生成虚拟变量的文章进行简要介绍,以帮助大家对  Stata 生成虚拟变量的要点及注意事项有更好的理解。

2. 分类变量生成虚拟变量

对于分类变量,我们是无法直接放入模型中进行回归的,例如微观调查数据中,个体的受教育程度 (小学、初中、高中等)。此时,一般会有两种处理方法:

  • 一是将受教育程度转换为受教育年限,即连续变量;
  • 二是将受教育程度转换为不同类别的虚拟变量。

下面是基于 CFPS2018 个人问卷中的受教育水平生成虚拟变量的具体命令。其中,CFPS2018 个人问卷数据需到「中国家庭追踪调查」官网申请下载。

. use cfps2018person_201911.dta, clear

. tab cfps2018edu, gen(edu)

CFPS2018个人问 |
卷受访者已完 |
成的最高学历 | Freq. Percent Cum.
--------------------+-----------------------------------
文盲/半文盲 | 7,661 23.45 23.45
小学 | 7,194 22.02 45.47
初中 | 9,202 28.17 73.64
高中/中专/技校/职高 | 4,915 15.05 88.69
大专 | 2,041 6.25 94.94
大学本科 | 1,529 4.68 99.62
硕士 | 118 0.36 99.98
博士 | 7 0.02 100.00
--------------------+-----------------------------------
Total | 32,667 100.00

上述命令执行后,会生成教育水平对应的虚拟变量,分别为 edu1edu2edu3edu4edu5edu6edu7edu8,对应原始教育水平的 8 个类别。具体来看,当个体受教育水平为文盲/半文盲时,edu1=1,否则 edu1=0,以此类推。

. sum edu1-edu8

 Variable |     Obs      Mean    Std. Dev.   Min   Max----------+-------------------------------------------     edu1 |  32,667   .234518    .4237037      0     1     edu2 |  32,667  .2202222    .4144028      0     1     edu3 |  32,667   .281691    .4498304      0     1     edu4 |  32,667  .1504576    .3575249      0     1     edu5 |  32,667   .062479    .2420271      0     1----------+-------------------------------------------     edu6 |  32,667  .0468056    .2112256      0     1     edu7 |  32,667  .0036122    .0599939      0     1     edu8 |  32,667  .0002143    .0146371      0     1

注意事项

  • 使用 tab 生成虚拟变量时,要注意异常值对结果的影响。例如,某些受访者拒绝回答自己受教育程度,数据对应编码可能为 -2 或其他。因此,在正式生成虚拟变量前要检查相关变量的类别是否有异常值。如果有异常值,可以选择进行填补或定义为缺失值 (recode cfps2018edu (-2==.));
  • 以上生成的 8 个虚拟变量不能同时放入回归方程中进行分析,因为需要选择一组作为对照组。如果全部纳入回归,Stata 则会自动剔除一类作为对照组;
  • 将以上 7 个教育程度的虚拟变量纳入回归方程时,对于虚拟变量系数的解读需要尤其注意。这里每一组的参照组均为未纳入回归方程的那一组。例如,未将 edu1 (文盲/半文盲) 纳入方程,那么 edu2 (小学) 的系数解读应该为,相对于文盲或半文盲,上过小学对被解释变量有多大影响,其他以此类推。

3. 连续变量生成虚拟变量

对于一些连续变量,我们可能会按照取值是否大于均值将其分为高低两类。例如,当收入水平 (连续变量) 超过全样本均值时,虚拟变量取值为 1 (高收入人群),反之取值为 0 (低收入人群)。

. sum income

Variable | Obs Mean Std. Dev. Min Max
---------+--------------------------------------------
income | 32,669 14043.73 29701.14 -8 840000

. gen high_income = (income> `r(mean)')

上述生成虚拟变量的方式主要是借助了一个逻辑判断,即当 = 后面为真时,取值为1,否则为 0。当然,我们也可以使用类似的命令生成一个中等收入 (收入介于 6-20 万) 虚拟变量。

. gen middle_income = (income >= 60000) & (income <= 200000)

注意事项

  • 这里依然需要注意数据的异常值。较为细心的读者可能已经发现,在sum income 呈现的结果中,最小值为-8,这是一个不好的信号。建议在清理每一个变量时,先使用 tab 查阅一下数值分布,是否有异常。如果有异常值,则需要先对异常值进行处理。
  • 缺失值在 Stata 中默认为最大的数值。直接使用 tab varname 时,结果并不会呈现缺失值的分布。但是,在使用连续变量生成虚拟变量时,如果遗漏了缺失值就可能造成结果错误。例如,个体还没参加工作,对应个体收入水平可能定义为缺失值 '.',但 Stata 默认 '.' 为无穷大。正确的做法是在命令后面加上 if !missing(income)
. sum income

Variable | Obs Mean Std. Dev. Min Max
----------+---------------------------------------------
income | 32,669 14043.73 29701.14 -8 840000

. gen high_income = (income > `r(mean)') if !missing(income)

4. 生成虚拟变量的进阶做法

4.1 根据多个变量生成虚拟变量

上文都是基于某一个变量生成虚拟变量,在处理数据过程中,可能需要借助多个变量来生成虚拟变量。例如,生成一个家庭是否有未成年人的虚拟变量时,我们需要结合年龄 age 和家庭编码 fid18 来进行处理。

. egen any_children = max(age < 18), by(fid18)

上述命令的具体含义为,生成一个虚拟变量 any_children,并以家庭编码 fid18 作为分组依据,以 max(age < 18) 为判断条件。其中,max(age < 18) 可以理解为 max(1 if age < 18; 0 otherwise),这里 max 为取 0 和 1 较大值。之所以如此,是考虑到家庭成员不止一个,但是只要家里有小于 18 岁的个体,any_children 就取值为 1,否则为 0。

4.2 借助 inlist() 命令生成虚拟变量

inlist() 命令语法为 inlist(z, var1, var2,...)。该命令具体含义是 var1var2,...中任意一个变量取值为 z,则虚拟变量取值为 1,否则为 0。

具体来看,前文已经生成了 edu1edu2edu3edu4edu5edu6edu7edu8 等 8 个虚拟变量,现在我们想在上述变量基础上生成一个新的虚拟变量,即个体是否完成初中及以上教育 (edu3 对应是否完成初中教育)。实现上述过程的两种方法如下:

*-方法1
. generate middle_school_1 = ///
(edu3 == 1) | (edu4 == 1) | ///
(edu5 == 1) | (edu6 == 1) | ///
(edu7 == 1) | (edu8 == 1)

*-方法2
. generate middle_school_2 = inlist(1, edu1, edu2, edu3, edu4, edu5, edu6, edu7, edu8)

4.3 借助 inrange() 命令生成虚拟变量

inrange() 命令语法为 inrange(var, a, b)。该命令具体含义为,当变量 var 的取值介于 [a, b] 之间时,虚拟变量取值为 1,否则为 0。与上文类似,我们生成中等收入 (收入介于 6-20 万) 虚拟变量为例。inrange() 命令实现如下:

. gen middle_income = inrange(income, 60000, 200000)

5. 总结

虚拟变量的生成方式有很多,并且不同的命令的便捷程度也不一样。但是,无论使用哪种方式,在生成虚拟变量之前都需要对相关变量进行检查,以确保无异常值或缺失值。否则,按照以下方式处理:

  • 如果有异常值则需要处理 (填补) 为正常值或缺失值;
  • 如果存在缺失值,要注意 Stata 会将其识别为最大的数字。在生成虚拟变量时候要格外小心。

若需实操本文介绍的命令,也可以使用 sysuse 'nlsw88.dta', clear 调入 Stata 自带数据文件 nlsw88.dta 进行练习。

6. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 虚拟变量 缺失值 补漏 egen, m
安装最新版 lianxh 命令:
ssc install lianxh, replace 

(0)

相关推荐

  • 数据转置pro之sxpose2

    本文作者:崔赵雯,中南财经政法大学金融学院本文编辑:陈丹慧技术总编:余术玲爬虫俱乐部云端课程爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专 ...

  • Stata结果输出:tabout命令详解

    Stata结果输出:tabout命令详解

  • 互助问答第420期:关于潜变量的问题

    关于潜变量的问题 老师,我最近在做企业违规的数据,文献中这样阐述的: 针对部分可观测问题最先做出了关于Bivariate Probit估计方法的理论研究.本文在研究公司违规行为的同时,将同时考察公司违 ...

  • 互助问答第471期:关于stata命令的问题

    关于stata命令的问题 老师好,请教一下,在stata里面,vce(cluster stkcd)和 cluster( Stkcd)命令是一样的意思吗? 原理是一样的.好像不能同时使用vce 和clu ...

  • R语言计量经济学:虚拟变量(哑变量)在线性回归模型中的应用

    原文链接:http://tecdat.cn/?p=22805 为什么需要虚拟变量? 大多数数据都可以用数字来衡量,如身高和体重.然而,诸如性别.季节.地点等变量则不能用数字来衡量.相反,我们使用虚拟变 ...

  • 【外语】高考英语语法虚拟语气专题汇总,建议收藏!

    [高中外语] 一.虚拟语气谓语动词的几种表现形式 1. 用在虚拟条件句中 虚拟条件句及其主句的谓语形式可归纳如下: 例1:I would certainly go if I had the time. ...

  • R语言使用虚拟变量(Dummy Variables) 回归分析工资影响因素

    原文链接:http://tecdat.cn/?p=23170  简介 本文与以下两个问题有关.你应该如何添加虚拟变量?你应该如何解释结果? 如果使用一个例子,我们可能会更容易理解这些问题. 数据 假设 ...

  • Stata: 工具变量法 (IV) 讲义

    一.内生性问题及应对 内生性( endogeneity)问题,是指由自变量与误差项相关所引发的估计偏倚及统计结果误导性等问题的总称,即违背了线性回归中的正交假定而产生的一系列问题.内生性问题看似简单, ...

  • 虚拟企业管理专题研究

    内容简介: 本书是国家985工程建设项目之研究成果.作为一种新型的企业模式,虚拟企业的产生和发展有其必要性和必然性.在市场需求日趋多变.技术进步突飞猛进.顾客需求趋于多样化和个性化的环境面前,企业的竞 ...

  • Stata中变量观测值的亲密伙伴——levelsof命令

    导读 前段时间我们爬虫俱乐部的Stata学员群有学员问了这样的一个问题: 虽然帮助这位学员解决了这个问题,但是我一时竟想不起来如何向他展示正确结果.只能用最原始直白的方法--截图,以图为证.在征求那位 ...

  • 高考英语语法虚拟语气专题汇总,建议收藏!

    虚拟语气表示说话人的主观愿望.猜疑.建议或与事实不符的假设等,而不表示客观存在的事实.虚拟语气是由句中的谓语动词的特殊形式表现出来的.一起来学习一下~ 一.虚拟语气谓语动词的几种表现形式 1. 用在虚 ...

  • 一天一学丨Lambert计量系列103 虚拟变量——交互项解释

    视频简介 本视频提供了本科阶段计量经济学的概述.计量经济学帮助评估我们某种感兴趣的关系,其思想是使用某种统计或数学工具来研究样本,使我们能够推断出总体中发生了什么或者对总体参数进行估计.课程的第一部分 ...

  • 一天一学丨Lambert计量系列102 虚拟变量简介

    视频简介 本视频提供了本科阶段计量经济学的概述.计量经济学帮助评估我们某种感兴趣的关系,其思想是使用某种统计或数学工具来研究样本,使我们能够推断出总体中发生了什么或者对总体参数进行估计.课程的第一部分 ...