查看原文
其他

零值太多怎么办?解锁Stata17新命令ziologit

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者闫宇聪,中南财经政法大学金融学院

本文编辑:陈梦华

技术总编:李婷婷

Stata&Python云端课程来啦!

好雨知时节,当春乃发生。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!

引言

logit模型是我们进行微观计量研究时所用到的最主流的模型之一。本次Stata17中新增了两个与logit模型有关的命令——xtmlogit(面板多项logit模型)和ziologit(零膨胀有序logit模型)。xtmlogit在往期推文《小罗肥归升级啦|解锁Stata17之新命令xtmlogit》中已经为大家详细介绍了,那么今天小编就带领大家一起来学习一下ziologit命令。那么各位科研老司机们,我们出发吧!

为什么要使用ziologit?

在使用ziologit命令之前,我们必须要了解我们为什么要使用ziologit。在传统的有序logit模型中,一个零值可能代表着样本不具备某个特征,而剩余的非零值代表该特征水平的增加。然而,在某些情况下,数据中观察到的零值比传统有序logit模型预期的要多。这些零值有些是因为个体没有这种特质,有些是因为个体有这种特质,但在数据收集期间并未表现出来。下面,我们列举两个非常简单的例子来说明一下。  
1.在一项关于酒精消费的研究中,有些人报告说他们从不喝酒,所以没有酒精消费,而另一些人虽然喝酒,但是在研究调查期间没有喝酒,因此也没有酒精消费。         
2.有一项旨在缩小肿瘤的临床治疗试验,一共有没有改善、部分缓解或完全缓解三种可能的结果。没有改善可以分为两种情况:第一是治疗对肿瘤没有效果,第二是治疗对肿瘤有效果,但在数据测量时没有缩小。
在上述的两个例子中,传统的有序logit是不能识别出出现零值的两种原因的,但是ziologit可以识别,因此当我们面临样本中较多零值且出现零值的原因有两类时,可以选择使用零膨胀有序logit模型来代替传统的有序logit模型。

ziologit基本语法

  ziologit命令的基本语法如下:

ziologit depvar [indepvars] [if] [in] [weight], ///inflate(varlist[, noconstant offset(varname)]|_cons) [options]
depvar是被解释变量,[indepvars]是解释变量,[if]是条件语句,[in]表示范围,[weight]表示权重。inflate()是必选项,确定多余零值的logit模型的膨胀方程。此外,还可以使用vce()报告不同类型的标准误,使用level()以百分比形式指定置信区间的置信水平(默认为level(95)),使用collinear保留共线的变量等。


以烟草消费数据为例

  为了让大家更好地了解和掌握ziologit命令,本文将通过一个非常简单的例子——探究收入与烟草消费之间的关系,来为大家详细展示ziologit命令的用法。

  • 下载数据并观察

clear allwebuse tobaccocodebook tobacco

通过对被解释变量烟草消费的观察,我们可以发现,样本总数为15000,而烟草消费为0的样本数为9469,烟草消费为0的情况分为两类:第一类是这些人本来就不吸烟,第二类是这些人吸烟,但是在数据收集期内并没有吸烟,所以烟草消费为0。因此在这种情况下,我们可以使用ziologit模型进行分析。

  • 模型及结果分析

ziologit tobacco education income age i.female, ///inflate(education income i.parent i.religion) vce(r)

我们可以看到使用ziologit命令回归的结果分为两个部分,其中第一个部分(tobacco)是传统的有序logit模型的回归结果,而第二部分(inflate)则是判断一个香烟消费者是否是一个吸烟者的模型。我们使用受教育水平、收入水平、年龄以及性别来作为烟草消费的解释变量,使用受教育水平、收入水平、父母是否吸烟以及香烟消费者的宗教信仰是否支持他吸烟作为香烟消费者是否吸烟的解释变量。由于logit模型的系数其经济含义理解起来相对较为困难,因此我们使用or选项去报告优势比(odds ratio)。

  • 显示优势比

ziologit, or

由优势比的结果我们可以看出,年收入增加1万美元会使吸烟的几率变为原来的0.89倍(几率降低11%),但在吸烟者中,年收入增加1万美元会使他们增加烟草消费的几率变为原来的3.71倍(几率增加271%)。这表明较富裕的人不太可能吸烟,但如果他们决定吸烟,他们往往会抽更多的烟。

  • 收入水平与香烟消费的关系(结合margins命令)

接下来我们着重研究一下收入水平与香烟消费的关系。例如,我们想了解年收入为0美元、5万美元、10万美元、15万美元和20万美元时香烟的消费情况,我们可以使用margins命令估计每种香烟消费水平的预期概率。
margins, at(income=(0(5)20))

我们发现,predict的1、2、3、4分别代表着烟草消费水平的四个等级,at的1、2、3、4、5分别代表着收入的五个水平。但是上述结果显然看起来并不直观,因此我们可以使用marginsplot命令将结果可视化。
marginsplot, legend(order(5 "0 cigarettes" 6 "1–7 cigarettes/day" ///7 "8–12 cigarettes/day" 8 ">12 cigarettes/day"))

通过可视化的图表我们可以看到,消费0支烟的概率随着年收入的增加而降低,直至10万美元;然后,概率又逐渐增大。当年收入为10万美元时,消费香烟的香烟消费者中,每天消费1-7支的可能性最高,而当年收入为20万美元时,每天消费大于12支的可能性最高。     

  • 收入与是否吸烟之间的关系

除此之外,我们还可以研究收入与是否吸烟之间的关系。我们将 predict(ps)选项添加到margins中,可以对收入与是否吸烟的预测概率进行估计。
quietly margins, predict(ps) at(income=(0(5)20))marginsplot

通过结果我们可以看到,当收入为零时,五分之四的受访者很可能吸烟。随着收入的增加,成为吸烟者的可能性降低,只有三分之一左右的受访者在年收入为20万美元时容易吸烟。这可能是因为收入较高的人具有较强的健康意识,因此更不容易吸烟。

  • 在吸烟者中,收入水平与香烟消费的关系

接下来,我们研究在吸烟者中,收入水平与香烟消费的关系。通过在选项predict中指定pcond1和五个收入水平,我们计算了每个收入水平上烟草消费的概率,并用marginsplot作图。
quietly margins, predict(pcond1 outcome(0)) predict(pcond1 outcome(1)) ///predict(pcond1 outcome(2)) predict(pcond1 outcome(3)) at(income=(0(5)20))marginsplot, legend(order(5 "0 cigarettes" 6 "1–7 cigarettes/day" ///7 "8–12 cigarettes/day" 8 ">12 cigarettes/day"))

通过结果我们可以看到,当年收入为零时,超过一半的易吸烟人群报告说他们的香烟消费量为零。随着收入的增加,零消费的概率下降。年收入越高,易吸烟人群的香烟消费量就越高,这也意味着成为重度吸烟者的可能性越高。这表明,在易吸烟人群中,香烟是一种正常商品,因为当收入增加时,香烟的需求就会增加。
从这个例子我们可以看出,收入对香烟消费的影响是多方面的。ziologit命令可以推测人们是否容易吸烟,以及香烟消费的强度,从而更好地了解影响香烟消费行为的因素。以上就是本次Stata17新增命令ziologit的基本用法。下期我们将继续介绍Stata17的其他新功能。盆友们、火鸡们,我们下期见!

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。


欢迎大家点赞、评论、转发哟~

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐
  Stata17新功能之Python API

小罗肥归升级啦|解锁Stata17之新命令xtmlogit

 
速度大比拼之Stata17有多快?

初识PyStata

辞旧迎新——Stata17之Do-file编辑器优化

Stata17新亮点——解放表格输出生产力

【爬虫+可视化】链家网北京租房信息

 手把手教你如何获取股票数据和可视化

  Countvalues——数数的超级小帮手

         frame框架进阶篇

 下拉选择框如何变成“小猫咪” | selenium小技巧

  Python中的运算符知多少?

  快来get缺失值的正确打开方式

  frame框架——我到底在哪个“房间”

如何使用Pandas读取txt文件?

基于MySQL数据库实现增量式爬取

寻找春日气息|本月最受欢迎的景点都在这里!

问世间情为何物,大数据也想参悟——后考研时代,何以解忧?唯有数据!

Python与数据库交互—浅述pymysql

偷懒小妙招|selenium之玩转鼠标键盘操作--鼠标篇

大家用Stata来“找茬”

“粉墨登场”——多期双重差分法(DID)的Stata操作

Python与百度地图合璧,绘制棒呆的热力地图

【数据可视化】统计图绘制神器:Seaborn

检索Stata推文的“任意门”学会了这些,分分钟提升你的毕业体验

【爬虫实战】双一流大学的月关注度

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存