查看原文
其他

数据,我要“拷打”你

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

本文作者:闫宇聪(广西大学)

文字编辑:王碧琪

技术总编:李朋冲

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》或点击文末阅读原文,了解培训详细信息,抓紧时间报名吧!


在日常的工作研究中,我们会接触到大量的数据。作为研究的重要一步,我们往往需要先直观地观察数据,对其进行反复的“拷打”,非要获取一些“情报”不可。这样我们会了解到数据变量的基本特征(均值、方差、极值、分位数、相关性等),而这些特征也会为接下来确定研究方法和计量模型提供一个有价值的参考。

 

如果想要了解每个变量的分布,我们可以使用Stata中的summarize、centile等命令获得描述性统计结果;而如果要查看变量与变量之间(二维或者多维)的统计情况,统计表就成为了不可或缺的直接观察数据的工具。统计表中显现出的数据统计信息,虽然最开始只是帮助我们了解数据在多维下的分布情况,但它可以为我们的因果推断指引方向。

 

笔者最近看了一篇上海财经大学范子英教授的论文——《“海归”教师与中国经济学科的“双一流”建设》,论文统计了“海归”教师回国任职前后是否发表英文论文的情况。结果发现,在其统计样本里,有43.7%的“海归”任职前后都没有发表英文论文。单单看到这里,笔者就产生了一个疑问:这些985高校和5所211财经类高校在聘用经济类“海归”博士时,究竟是采用的什么标准?而这篇论文恰恰围绕着这些统计情况开展了实证研究,也提供了相应的选聘“海归”博士的政策建议。

 

所以说,看似“相貌平平的统计表”,在有匠心的人看来,可能就是“情人眼里出西施”!在数据获取不易的现实下,我们更应该反复地琢磨“众里寻她千百度”才觅得的数据,查看各种各样的描述性统计表,说不定灵光乍现,一个好的因果推断就出来了!所谓“重剑无锋,大巧不工”,今天我们就好好地说道说道统计表这档子事儿。

 

在Stata中有很多可以生成各种形式的统计表的命令,今天小编就给大家介绍两个常用的——table命令和tabulate命令,它们可以十分便捷地输出一维、二维甚至多维统计表,但也各有侧重。比如当我们想生成一维和二维统计表,但是需要考虑权重时,我们要用tabulate命令;当我们想要生成多维统计表时,我们使用tabulate命令加上by前缀生成的结果并不是很整齐,这时我们就需要使用table命令来生成整齐的多维表。

 

table

table命令的语法如下:

table rowvar [colvar [supercolvar]] [if] [in] [weight] [, options]


其中,rowvar表示行变量、colvar表示列变量、supercolvar表示使用table命令生成三维表时的第二个列变量、weight表示权重、options为附加选项。

 

使用table命令生成统计表时,如果其中一个变量在建表时取多个值,那么将会生成大量的输出结果,所以我们往往使用附加选项contents()来生成表格,它能给出关键变量的描述性统计,比如均值或标准差等,这样的表即使在变量取值很少时也很有用。我们以auto数据为例,研究1978年汽车的维修次数(rep78)与汽车消耗每加仑油行走的公里数(mpg)的相关关系,使用table命令:

 

sysuse auto, cleartable rep78, content(n mpg mean mpg sd mpg median mpg)


 

从均值上我们可以看出,当维修次数的样本量比较大(≥8次)时,维修次数越多的汽车,每加仑油行走的公里数越大。

 

此外,使用带有content()选项的table命令也可以生成描述性统计的二维表和多维表。我们依然以auto数据为例,研究维修记录(rep78)以及汽车是否进口(foreign)与每加仑油行走公里数(mpg)的关系,我们使用table命令生成二维表,程序如下:

 

table rep78 foreign, content(mean mpg)

 

 

从上表可以看出,进口车维修次数越多,每加仑油行走公里数越大;而国产车则趋势不稳定。

 

下面,我们调用肺炎患病率数据 byssin.dta,研究工作环境(workplace)、人种(race)以及是否吸烟(smokes)对肺炎患病率(prob)的影响,并按照人口规模(pop)进行加权构建三维统计表。我们使用format选项将输出结果保留3位小数,并使用sc选项将第二个列变量的总和放入输出的三维表中,具体程序如下:

 

webuse byssin, cleartable workplace smokes race [fw=pop], c(mean prob) format(%9.3f) sc

 

 

我们可以看出:在无尘或微尘工作环境下,不吸烟的白种人肺炎患病率要比不吸烟的其他肤色人种患病率低,而在粉尘量大的工作环境下,都不吸烟时,患病率差异不大;但在吸烟情况下,无论无尘、微尘还是重尘工作环境,白种人患病率都要比其他肤色人种患病率高出许多。总体来讲,吸烟者的肺炎患病率要高于不吸烟者的患病率。我们可以参考这个三维统计表里得到的统计相关性,建立一个因果推断的雏形:人种、吸烟、工作环境都可以影响肺炎患病率,至于影响程度大小,要通过科学的计量工具去测度。如果最后证实工作环境影响程度更大,则可为相关的立法提供依据;若吸烟更为明显,则又是一个推动禁烟的理由。

 

此外,table还可以使用选项by来构建四维表,我们以byssin1.dta数据为例,研究工作环境(workplace)、人种(race)、性别(sex)以及是否吸烟(smokes)对肺炎患病率(prob)的影响,程序如下:

 

webuse byssin1, cleartable workplace smokes race, by(sex) c(mean prob)

 

 

我们可以看到,四维表中出现了第二个行变量性别(sex),即整个四维表包括了性别变量(男和女)、工作环境变量(无尘、微尘和重尘)、人种(白人和其他)以及是否吸烟(是和否)。我们可以在前面三维表的基础上,探讨其他条件相同时,性别不同是否会引起肺炎患病率的不同。这样我们的四维统计表就构建完成了,读者可自行解读一下这个统计表。

 

table命令用法非常简单,形成的统计表,则需要仔细审读。我们当然可以对不同的变量组合进行尝试,如果发现了显著差异,可以考虑将其纳入到基准模型里面。至于其他的选项,我们在此就不细讲了。

 

tabulate

接下来我们来介绍tabulate命令,它的语法结构为:

tabulate varname1 (varname2) [if] [in] [weight] [, tabulate1_options]

 

tabulate命令也可输出一维或者二维统计表,用法也非常简单。我们以census数据为例,生成有关地区(region)的一维统计表,如下:

 

sysuse census, cleartabulate region



 

由上图结果我们可以看到一维表关于地区的频数,百分比和累计百分比信息。

我们也可以使用sort选项来对频数从大到小进行排序:

 

tabulate region, sort

 

二维表与此类似,只需在后面加上变量即可,在此我们不再赘述。

 

tabulate还有一个十分重要的选项——gen选项当我们进行实证研究时,通常需要控制年份、行业或个体的固定效应,我们可以通过gen()选项生成我们需要的虚拟变量。以census数据为例,使用tabulate的gen选项生成地区(region)的虚拟变量(即变量是此地区,设置为1;不是此地区,设置为0),由上面的一维统计表可知,有四个地区,相应地,会生成四个地区虚拟变量:

 

tabulate region, gen(x)order state state2 region x*

 

 

当然,还有很多命令可以生成不同维度的统计表,比如tab1和tab2命令,可分别生成一维或者二维统计表。这些都是很实用的命令,在得到了数据之后,帮助我们查看数据在不同分组情况下的分布,以期对其进行充分的信息挖掘。如前所述,对数据进行多重的描述性统计或相关性统计分析,对于实证研究的进行,是大有裨益的。“横看成岭侧成峰,远近高低各不同”,分析的视角不一样,从数据里提取的信息也不尽相同,论文的优劣,也从此分野。



对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
花式调用返回值 —— svret与storedresults
encode 和decode——带你探索编码与解码的世界
字符串方法(二)
如何快速生成分组变量?
用Stata实现数据标准化
字符串方法介绍
Jupyter Notebook的使用
Stata16新功能之“框架”——frlink连接多个数据集(3)
Stata16新功能之“框架”——基础命令大合集(2)
三分钟教你读懂Python报错
解析XML文件
命令更新之reg2docx:将回归结果输出到word
命令更新之t2docx——报告分组均值t检验
爬虫俱乐部2019十一Python编程技术培训报名啦!
数据类型——Dict、Set与Frozenset简析
数据类型介绍——tuple、list和range对象
把pdf文件批量转成docx文件
朝花夕拾—— 如何输出内存中的矩阵与绘图
Stata16新功能——定义图形元素的绝对大小

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

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

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

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