Stata基本操作

Stata基本操作

突然发现自己没有把这个讲义整理上来,这个是计量经济学课程中关于Stata使用的一个入门教程。

Stata是什么?

根据Stata对自己的介绍:

1. Stata is a statistical package for managing, analyzing, and graphing data.
2. Stata is available for a variety of platforms. Stata may be used either as a point-and-click application or as a command-driven package.
3. Stata’s GUI provides an easy interface for those new to Stata and for experienced Stata users whowish to execute a command that they seldom use.
4. The command language provides a fast way to communicate with Stata and to communicate more complex ideas.

也就是Stata是一个集数据管理、分析和可视化的工具。可以在各种操作系统中使用,可以通过鼠标点击操作也能通过命令行驱动。

Stata的图形用户界面让新手们很方便入门,Stata的命令语言是的很多复杂的想法变得容易实现。

我经常看到很多R、Python、Matlab用户对Stata非常不屑一顾。每每提及Stata总是要加一句:

"如果Stata也算编程语言的话······"

我也常听一些没有接触过编程的朋友对Stata望而却步,他们常说:

"虽然看不懂,但是觉得很厉害的样子。"

所以Stata是什么?

Stata's two programming languages, ado and Mata, each support object-oriented programming. [P] class explains object-oriented programming in ado. Most users interested in object-oriented programming will wish to do the programming in Mata. See [M-2] class to learn about object-oriented programming in Mata.

Stata是套体系完整的面向对象的编程语言。两种编程语言,adoMata ,第一种较为常用,第二种更为强大。我也只会第一种,第二种浅尝辄止了。因为后来遇到Stata解决不了的问题就寻求其它编程语言完成了。所以没有什么动力学Mata了。不过还是对Mata心怀崇敬,有时间就一定开始学习。

Stata能做什么?

  1. 数据获取与处理;
    使用Stata可以比较快速的获取多种数据并迅速整理成研究者所需要的数据。
  2. 精美统计图形绘制与导出。
    Stata的绘图系统是相当完整的。通过绘图主题的选择,Stata作图也可以非常的精美。
  3. 严谨可重复的实证研究。

在熟练使用Stata之前,你的论文原材料可能是这样的(下图并不是论文的原材料,是我随便截的,只是想表达乱):

在此之前可能你的主要数据处理工具是Excel,并且还不会Excel VBA,所以经常会整夜整夜的复制粘贴。而这些工作实际上用几行Stata语句就能完成。

那你用熟练了Stata之后你的论文数据是什么样的呢?(假如你是一个向我一样的强迫症患者)

这个文件夹的目录结构是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.
├── ADO
│ ├── carryforward.ado
│ ├── carryforward.hlp
│ ├── estadd.ado
│ ├── estadd.hlp
│ ├── esttab.ado
│ └── esttab.hlp
├── DATA
│ ├── beta.csv
│ └── mydata.dta
├── DO
│ ├── 表2-1-描述性统计表.do
│ ├── 表3-1-模型估计结果.do
│ ├── 图3-1-每个月份的风险暴露变化对股票流动性影响的差异.do
│ ├── 表3-2-模型估计结果.do
│ ├── 图3-2-每个年份风险暴露变化对股票流动性影响的差异.do
│ ├── 表4-1-稳健性检验结果.do
│ └── 设定绘图主题.do
├── DOCS
│ └── 风险暴露的变化对股票流动性的影响.pdf
├── IMAGE
│ ├── 年份效应.png
│ └── 月份效应.png
├── 主程序.do
└── 参考文献
└── 110228635.pdf

在用Stata之前,每次画图你可能都要在Excel上面点击无数次。而用Stata之后,即使是下面这样复杂的图,你只需要一行命令就能绘制出来:

此外,如果你还会一些数据库或其它编程软件,Stata能够很好的和它们交互使用。

如果说Stata不是最好的,我觉得Stata是做实证研究的最好工具。

  1. Stata作为商业软件,有着专业且负责的团队维护。所以Stata的帮助文档是最让人喜爱的,这些也是很多开源软件无法比拟的。
  2. Stata的速度相对较快,Stata的启动速度远快于Matlab、SAS这些软件,且对电脑硬件要求较低,这是非常重要的,如果你想用一个软件,然后打开它就要等待几分钟。那我想你可能很快就烦了。另外Stata运行的速度也足够快。可以满足大多数用户的需要。
  3. Stata同提供了很多可以把统计表格导出到Word、PDF和Tex文档的命令。实际上Stata15的putdocx命令搭配其它的一些命令可以实际实现论文的编排。

我想以上的每一条都足以成为大家认真学习Stata的理由。

下面就让我们进入Stata的世界吧!

Stata基本操作

Stata系统文件夹

运行sysdir即可得到Stata的系统文件夹列表:

Stata
1
2
3
4
5
6
7
. sysdir
STATA: /Applications/Stata/
BASE: /Applications/Stata/ado/base/
SITE: /Applications/Stata/ado/site/
PLUS: /Users/mr.cheng/Library/Application Support/Stata/ado/plus/
PERSONAL: /Users/mr.cheng/Library/Application Support/Stata/ado/personal/
OLDPLACE: ~/ado/

  • BASE文件夹包含了Stata自己和官方的ado文件;
  • PERSONAL 文件夹可以放置你自己的ado-files;
  • PLUS 文件夹在你下载外部命令时会被自动创建。
    另外运行adopath也可以得到:
    Stata
    1
    2
    3
    4
    5
    6
    7
    . adopath
    [1] (BASE) "/Applications/Stata/ado/base/"
    [2] (SITE) "/Applications/Stata/ado/site/"
    [3] "."
    [4] (PERSONAL) "/Users/mr.cheng/Library/Application Support/Stata/ado/personal/"
    [5] (PLUS) "/Users/mr.cheng/Library/Application Support/Stata/ado/plus/"
    [6] (OLDPLACE) "~/ado/"

adopath命令的运行结果和sysdir基本相同,其中第三个是表示当前文件夹,这里的排序也是Stata寻找ado文件的顺序。

数据导入

导入系统数据集

系统数据集就是位于系统文件夹的数据集,这些数据集一般是一些示例数据集。导入系统数据集是使用sysuse命令,最有名的系统数据集要数auto数据集了:

Stata
1
sysuse auto, clear

这是个1978年的汽车数据集。这个数据集是这样的:

此外sysuse还可以用来查看所有的系统数据集:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
. sysuse dir
.dta cjd1617.dta lifeexp.dta reshape1.dta
air2.dta colorschemes.dta lutkepohl2.dta sandstone.dta
airq.dta countycode.dta moneysupply.dta sexratio.dta
auto.dta educ99gdp.dta network1.dta smoking.dta
auto2.dta fullauto.dta network1a.dta sp500.dta
autornd.dta ghanaage.dta nhanes2f.dta splotxmpl.dta
bplong.dta gnp96.dta nlsw88.dta stackxmpl.dta
bpwide.dta grunfeld.dta nlswide1.dta surface.dta
brewmeta.dta houseprice.dta nlswork.dta tsline1.dta
cancer.dta jd14151617xxb.dta nlswork2.dta tsline2.dta
census.dta jd141516cjd.dta parent.dta uslifeexp.dta
child.dta jd2017zsjh.dta pop2000.dta uslifeexp2.dta
citytemp.dta jdcourse2018a.dta population.dta voter.dta
citytemp4.dta lbw.dta rate2.dta xtline1.dta

使用all选项可以查看所有的:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
. sysuse dir, all
.dta child.dta network1a.dta
__i10v2003.dta china_map.dta nhanes2f.dta
__i10v2004.dta citytemp.dta nlsw88.dta
__i10v2006.dta citytemp4.dta nlswide1.dta
__i10v2007.dta cjd1617.dta nlswork.dta
__i10v2008.dta colorschemes.dta nlswork2.dta
__i10v2009.dta countycode.dta parent.dta
__i10v2010.dta echarts_worldmap.dta pop2000.dta
__i10v2011.dta educ99gdp.dta population.dta
__i10v2012.dta fullauto.dta rate2.dta
__i10v2013.dta ghanaage.dta reshape1.dta
__i10v2014.dta gini_prov.dta sandstone.dta
__i10v2016.dta gnp96.dta sexratio.dta
__icd10.dta grunfeld.dta smoking.dta
__icd10cm.dta houseprice.dta sp500.dta
__icd10pcs.dta icd9_cod.dta splotxmpl.dta
air2.dta icd9_cop.dta stackxmpl.dta
airq.dta jd14151617xxb.dta surface.dta
auto.dta jd141516cjd.dta tsline1.dta
auto2.dta jd2017zsjh.dta tsline2.dta
autornd.dta jdcourse2018a.dta uslifeexp.dta
bplong.dta lbw.dta uslifeexp2.dta
bpwide.dta lifeexp.dta voter.dta
brewmeta.dta lutkepohl2.dta xtline1.dta
cancer.dta moneysupply.dta
census.dta network1.dta

导入网络数据集

网络数据集是存放在Stata公司服务器上的一些数据集,通常也是一些示例数据集。例如导入lifeexp.dta数据集:

Stata
1
2
. webuse lifeexp, clear
(Life expectancy, 1998)

这是一个1998年预期寿命数据集,括号里面的内容是label data

webuse query可以用来查看当前webuse指向的数据仓库地址:

Stata
1
2
. webuse query
(prefix now "http://www.stata-press.com/data/r15")

我还可以换个地址:

Stata
1
2
. webuse set "http://www.czxa.top/cuse/c"
(prefix now "http://www.czxa.top/cuse/c")

这个网址是我的数据仓库下的一个名称为c的子文件夹,里面放置着c开头的数据集。设定好网址指向之后就可以调用该指向下的数据集了:

Stata
1
2
webuse cjd1617, clear
(金融学16和17年成绩单)

这是我们班同学2016和2017年的成绩单,为了保护隐私,我抹去了大家的姓名。
重新把webuse的指向的网址指向设定为默认网址,只需要运行下面的命令即可:

Stata
1
2
. webuse set
(prefix now "http://www.stata-press.com/data/r15")

调用我的个人仓库里面的数据集

《计量经济学及Stata应用》这本书配套了很多数据集。以往我们同学在学习的时候都要把数据集拷贝到自己的电脑上,然后使用的时候还有把工作目录设定为那个数据集文件夹,然后才能开始读数据。

是不是太麻烦了,我们能不能像sysuse、webuse这样直接使用数据呢?所以我就写了这套cuse命令。这个命令不仅仅是为这本书的,里面还包含了很多我经常使用的数据集,例如各省市的行政区号之类的。

运行下面的命令即可安装这个命令:

Stata
1
2
3
4
/* 首先你需要安装github命令,这个命令是用来安装github上的命令的 */
net install github, from("https://haghish.github.io/github/")
/* 然后就可以安装这个命令了 */
github install czxa/cuse, replace

或者直接安装:

Stata
1
net install cuse, from("http://www.czxa.top/cuse") replace

这个命令的使用方法是:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* cuselist可以用来查看数据库中包含的数据 */
. cuselist
【0】
----------------------------------------------------------------------
1. 000001.dta: 平安银行历史股票数据
【a】
----------------------------------------------------------------------
1. amricancellmapdata.dta: 美国蜂窝地图各个省份的位置坐标
【c】
----------------------------------------------------------------------
1. cellmapdata.dta: 中国蜂窝地图各个省份的位置坐标
1. countycode.dta: 中国各省市区县编号(即身份证前六位号码)
2. china_label.dta: 中国地图标签
3. china_map.dta: 中国地图数据
4. china_city_spatial_distance.dta: 中国地级地图数据集
5. china_province_spatial_distance.dta: 中国省级地图数据集
6. cjd1617.dta: 金融学16和17年成绩单
7. cpi.dta: 中国CPI2008/1-2017/11
8. countrysexratio.dta: knoema各国总人口性别比例数据
9. ctbc2.dta: 中债国债2002-2017年国债到期收益率
10. cnstockholiday.dta: 上交所与深交所休市日期
11. cnstockincome.dta:1989年-2017年所有上市公司的基本收入状况
----------------------------------------------------------------------
d
----------------------------------------------------------------------
1. echarts_worldmap.dta: ECharts世界地图各国中英文名称对照
g
----------------------------------------------------------------------
1. gdpjdlj.dta: 中国GDP季度累计2006/第一季度-2017/第三季度
2. gini_prov.dta: 1995-2010中国各省份Gini系数
h
----------------------------------------------------------------------
1. huaihe.dta: 2017年淮河供暖政策对人预期寿命的影响模仿数据集
2. houseprice.dta: 中国百城房价数据集
----------------------------------------------------------------------
【j】
----------------------------------------------------------------------
1. jdcourse2018a.dta: 2018年上半年暨南大学排课选课表
2. jd2017zsjh.dta: 暨南大学2017年各省招生人数
----------------------------------------------------------------------
l
----------------------------------------------------------------------
1. life_expentancy.dta: 2010年中国各省市自治区人口出生时预期寿命
m
----------------------------------------------------------------------
1. moneysupply.dta: 2008/1-2017/11中国货币供应量M0M1M2
----------------------------------------------------------------------
【p】
----------------------------------------------------------------------
1. pm10.dta: 2017年淮河供暖政策对人预期寿命影响的原始数据集
2. population.dta: 2010年中国各区县人口
3. population_prov.dta: 2002-2014年全国各省市年末人口
4. pjw.dta: 分城市人口、就业与工资(1990-2016)
----------------------------------------------------------------------
【s】
----------------------------------------------------------------------
1. station.dta: 中国所有火车站车站代码
2. smoking.dta: 合成控制法的美国39个洲的香烟销售量数据集
2. sexratio.dta: knoema各国总人口性别比例数据
----------------------------------------------------------------------
【t】
----------------------------------------------------------------------
1. titanic.dta: 泰坦尼克号生存数据集
2. tourism.dta: 旅游事业发展情况
----------------------------------------------------------------------
【书籍数据集】
注意!如果你想调用的数据集的名字里含大写字母,你需要把它的首字母调成小写才能调用!
1. 《计量经济学及Stata应用》——陈强著
2. 《高级计量经济学及Stata应用》——陈强著
3. 《An Introduction to Stata Programming, Second Edition》——Christopher F. Baum著

然后如果你想调用需要的数据集,使用cuse命令,这个命令的语法是:

cuse filename , [clear web savetosystem]

下划线表明该选项可以简写为下划线部分。

  • clear:清空当前数据集;
  • web:表示从网络读取数据,对我的电脑来说,这是个可选项,对于别人的电脑来说,这是个必选项。
  • savetosystem表示调用的同时把该数据集存入系统文件夹。

例如,假如我想调用书上第10页下面的grilic_small.dta数据集,下面的命令即可:

Stata
1
cuse grilic_small, c w s

上面的命令就实现了把内存清空、从网络获取数据和存入系统文件夹三个操作,以后如果需要这个数据集,用sysuse也可以读取了:

Stata
1
sysuse grilic_small, clear

另外需要注意:如果需要读的数据集的名字中首字母是大写的,需要把首字母改成小写的。

例如,书本105页的5.7中用到的数据集是Woody3.dta,调用它的方法是:

Stata
1
cuse woody3, clear web

读入dta数据集

这个也是最为常用的命令,use命令。用来导入Stata的dta格式的数据集。
例如我想读取grilic_small.dta数据集,下面的命令即可:

Stata
1
2
3
4
5
6
7
// 首先把工作目录设置到这个数据集所在的文件夹
cd ~/Desktop/datasets
// 然后使用use命令读取该数据集
use grilic_small, clear
// 当然你也可以这么做,也就是路径+文件名
use ~/Desktop/datasets/grilic_small.dta, clear
// 但是不推荐。建议的工作流程是把所有的工作都在工作目录下进行。

读入csv数据集

csv格式的数据集是逗号分隔的文本文件,可以直接用Excel打开。例如,我想读取pingan.csv文件,这个文件下载地址为:
http://www.czxa.top/mr/pingan.csv
Stata的copy命令可以被用来下载文件:

Stata
1
copy "http://www.czxa.top/mr/pingan.csv" pingan.csv, replace

然后你就能在你的工作目录里面发现这个文件了。如果你不清楚你的工作目录在哪里,可以运行下面的命令:

Stata
1
2
. pwd
/Users/mr.cheng/Desktop

然后我们把这个csv文件读入Stata:

Stata
1
import delimited using pingan.csv, clear

此外,你好可以通过GUI导入:

稍等片刻,在对话框里进行选择,然后提交即可:

为了保存这个操作,我们最好把这个提交动作的命令复制粘贴到我们的do文档里面:

Stata
1
2
import delimited /Users/mr.cheng/Desktop/pingan.csv, ///
delimiter(comma) varnames(1) encoding(utf8) clear

读入xls、xlsx数据

这两种格式的数据是Excel的数据,例如我想导入书上的grilic_small.xls数据集:

Stata
1
2
3
// 如果你暂时没有拿到这个数据集,可以用copy下载:
copy "http://www.czxa.top/mr/grilic_small.xls" grilic_small.xls, replace
import excel using grilic_small.xls, clear firstrow

firstrow表示设定第一行为变量名。

同样导入Excel文件也能通过界面鼠标点击操作。

导入自由格式的txt文件

下面我要介绍的这种是在使用Stata爬数据的时候最为常用的一种方法了。
假如我想爬东方财富网的采购经理人指数:网址是:中国 采购经理人指数(PMI)。那么第一步就是我的把这个网页读入Stata,下面的命令就可以实现了:

Stata
1
2
3
4
// 首先把这个网页下载存储为temp.txt文件:
copy "http://data.eastmoney.com/cjsj/pmi.html" temp.txt, replace
// 然后读入Stata,把每一行的前20000个字符(可以确定是整行了)读入strL格式的变量v。
infix strL v 1-20000 using temp.txt, clear

然后你会发现这个变量v里面的有些观测值是乱码的,这是因为这个网页文件不是UTF-8编码的,所以需要先把这个temp.txt文件转一下码。Stata中的转码命令是:

Stata
1
2
3
unicode encoding set gb18030
unicode translate 文件名.后缀名
unicode erasebackups, badidea

所以我们把这个temp.txt文件转个码再读如Stata中:

Stata
1
2
3
4
5
6
7
// 首先清空内存,这个清空是非常彻底的清空。
clear all
copy "http://data.eastmoney.com/cjsj/pmi.html" temp.txt, replace
unicode encoding set gb18030
unicode translate temp.txt
unicode erasebackups, badidea
infix strL v 1-20000 using temp.txt, clear

然后就会发现乱码问题得到了解决。
Stata14之前的版本创建的数据集读入Stata14、15都是需要转码的,都可以用这三句命令完成。

但是每次都打这三句是不是非常麻烦?所以我简单把这三句封装成了一个小命令utrans
这个命令位于我的finance命令包中,安装finance包即可安装这个命令:

Stata
1
github install czxa/finance, replace

然后上面的转码只需要utrans + 文件即可完成

Stata
1
2
. utrans temp.txt
转码完成

数据处理

当我们把数据读入之后就能进行数据处理了。数据处理的熟练程度直接决定了你写论文的速度。这里介绍一些常用的Stata处理数据的命令。

describe:审视数据

这个命令可以被简写为des。建议初学者不要立即使用简写,以免后来记不住命令的全称。

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
. sysuse auto, clear
(1978 Automobile Data)

. des

Contains data from /Applications/Stata/ado/base/a/auto.dta
obs: 74 1978 Automobile Data
vars: 12 13 Apr 2016 17:45
size: 3,182 (_dta has notes)
------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
------------------------------------------------------------------------------------
make str18 %-18s Make and Model
price int %8.0gc Price
mpg int %8.0g Mileage (mpg)
rep78 int %8.0g Repair Record 1978
headroom float %6.1f Headroom (in.)
trunk int %8.0g Trunk space (cu. ft.)
weight int %8.0gc Weight (lbs.)
length int %8.0g Length (in.)
turn int %8.0g Turn Circle (ft.)
displacement int %8.0g Displacement (cu. in.)
gear_ratio float %6.2f Gear Ratio
foreign byte %8.0g origin Car type
------------------------------------------------------------------------------------
Sorted by: foreign

list:列示数据

这个命令有两种用法,第一种是列示某些变量,第二种是列示某些观测值:

Stata
1
2
3
4
5
6
7
8
9
10
/* 列示整个数据表 */
list
/* 列示变量price和make */
list price make
/* 列示所有变量的第5-10个观测值 */
list in 5/10
/* 列示变量price和make的最后一个观测值 */
list price make in -1
/* 列示price大于10000的部分 */
list price if price > 10000

gsort/order:排序

sort命令正在被逐渐弃用。gsort用于观测值的排序,order用于变量的排序。

Stata
1
2
3
4
5
6
/* 把price按照由低到高的顺序排列 */
gsort price
/* 把price按照由高到低的顺序排列 */
gsort -price
/* 先排rep78再排price */
gsort rep78 -price

codebook:描述数据的内容

Stata
1
2
codebook
codebook price

generate:生成新变量

这个命令可以简写为gen

Stata
1
2
3
4
5
6
/* 例如我想生成一列等于观测值编号的变量v */
gen v = _n
/* 再例如我想生成一列等于总观测值数据的变量v1 */
gen v1 = _N
/* 还可以和数学函数一起使用,例如生成pirce的平方序列 */
gen price2 = price^2

gen还可以和by/bysort一起使用。例如我想生成一个表示rep78变量的每个值的个数的变量v2:

Stata
1
bysort rep78: gen v2 = _N

replace: 替换

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
/* 例如把rep78中的缺失值都替换成0(Stata中的数值型变量的缺失值用点表示,其实际数值是无穷大) */
replace rep78 = 0 if rep78 == .
/* 或者 */
replace rep78 = 0 if missing(rep78)

/* 把price变量取值在10000-15000的观测值替换成-1 */
replace price = -1 if inrange(price, 10000, 15000)

/* 把make变量取值为“Olds Starfire”和“Dodge St. Regis”的替换成“”(空字符串) */
replace make = "" if inlist(make, "Olds Starfire", "Dodge St. Regis")

/* 把make变量中含字母A的观测值替换成空字符串 */
replace make = "" if index(make, "A")

rename:重命名变量

这个命令可以简写为ren。

Stata
1
2
/* 例如把make重命名为make1 */
ren make make1

drop:删除

这个命令也有两种用法:删除变量和删除观测值。

Stata
1
2
3
4
5
6
7
8
/* 删除变量make1 */
drop make1
/* 删除第5-10个观测值 */
drop in 5/10
/* 删除price大于10000的观测值 */
drop if price > 10000
/* 使用通配符:删除m开头的变量 */
drop m*

summarize:查看描述性统计量

这个命令可以简写为sum

Stata
1
2
3
sum price
sum price if price > 10000
sum price, detail

tabulate:查看频率频数表

这个命令可以被简写为tab。

Stata
1
tab rep78

pwcorr:计算相关系数表

Stata
1
pwcorr price length weight, star(0.05) sig
  • star表示在5%显著性水平上显著的相关系数上标星星。
  • sig表示显示显著性水平。
    corr 命令也能用于计算相关系数表:
    Stata
    1
    2
    3
    corr price weight
    /* 还可以用来计算协方差矩阵 */
    corr price weight, c

display

这个命令可以被简写为di,用于打印:

Stata
1
2
3
4
5
6
7
8
9
10
11
display "这是一行字符串"
di as text "这是一行字符串"
di as error "这是一行字符串"
di as result "这是一行字符串"
di in green "这是一行字符串"
di in red "这是一行字符串"
di in yellow "这是一行字符串"
di in white "这是一行字符串"
di as input di in white "这是一行字符串"
di 3 + 4
di 2^0.5

数据导出

save: 导出为dta文件

Stata
1
save auto2, replace

export delimited:导出为csv文件

Stata
1
export delimited using auto2.csv, replace

export excel:导出为excel文件

Stata
1
export excel using auto2.xlsx, replace

绘图

histogram:绘制直方图

这个命令可以被简写为hist。

Stata
1
2
cuse grilic_small, c w
hist s, width(1) freq

  • width:组宽
  • freq:设定纵轴为频数,默认是密度

推荐大家使用plotplain主题,刚刚按照finance命令包的时候这个主题已经安装好了,使用scheme()选项可以指定选项。

Stata
1
hist s, width(1) freq sch(plotplain)

scatter:绘制散点图

Stata
1
2
3
/* 例如,我想观察工资和受教育年限之间的关系 */
gen n = _n
sc lnw s, mlab(n) msize(*2) mc(red*0.6) xti("受教育年限") yti("对数工资")

统计相关

grilic数据集示例

Stata
1
2
3
4
5
6
7
8
9
cuse grilic, c w
ren lw lnw
des
sum
sum lnw, d
hist lnw, width(0.1)
kdensity lnw, normal normop(lp(dash)) leg(pos(6) row(1)) ///
xti("工资对数") yti("密度") ///
yla(,format(%6.1f))

Stata
1
2
3
4
5
6
tw ///
kdensity lnw || ///
kdensity lnw if s == 16, lp(dash) ||, ///
xti("工资对数") yti("密度") ///
leg(pos(6) row(1)) ///
yla(#4, format(%6.1f)) xla(, format(%6.1f)) ///

验证迭代期望定律

迭代期望定律:
$$E(Y) = E_x[E(Y|x)]$$

使用数据集grilic.dta来验证该定律:
$$E(lnw) = E_{rns}[E(lnw|rns)]$$

  • rns是一个虚拟变量,首先我们计算$[E(lnw|rns=1)]$和$[E(lnw|rns=0)]$
  • 那么$E_{rns}[E(lnw|rns)]$等于两者的加权平均:
  • 先别急着算,均值这么长,抄起来多累,我们重新开始,这一次使用局部宏来记录每一次的均值。
1
2
3
4
5
6
7
sum lnw if rns == 1
return list
local a = r(mean)
sum lnw if rns == 0
return list
local b = r(mean)
di (`a'*204+`b'*554)/(204+554)

结果是5.6867388

另一方面,E(lnw)为:

Stata
1
sum lnw

忽略舍入误差,两者完全相等。从而得证。

t检验、方差分析和因子分析

t检验

t检验使用ttest命令。

单样本t检验

单样本t检验就是均值检验,检验某组数的均值是否等于某个值。
例如检验auto数据集中的mpg的变量是否为20:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sysuse auto, clear
ttest mpg == 20

One-sample t test
------------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
mpg | 74 21.2973 .6725511 5.785503 19.9569 22.63769
------------------------------------------------------------------------------
mean = mean(mpg) t = 1.9289
Ho: mean = 20 degrees of freedom = 73

Ha: mean < 20 Ha: mean != 20 Ha: mean > 20
Pr(T < t) = 0.9712 Pr(|T| > |t|) = 0.0576 Pr(T > t) = 0.0288

双样本t检验

双样本t检验也就是检验两组样本的均值是否相等。例如,我想检验国产车和进口车的价格的均值是否相等:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ttest price, by(for)

Two-sample t test with equal variances
------------------------------------------------------------------------------
Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
Domestic | 52 6072.423 429.4911 3097.104 5210.184 6934.662
Foreign | 22 6384.682 558.9942 2621.915 5222.19 7547.174
---------+--------------------------------------------------------------------
combined | 74 6165.257 342.8719 2949.496 5481.914 6848.6
---------+--------------------------------------------------------------------
diff | -312.2587 754.4488 -1816.225 1191.708
------------------------------------------------------------------------------
diff = mean(Domestic) - mean(Foreign) t = -0.4139
Ho: diff = 0 degrees of freedom = 72

Ha: diff < 0 Ha: diff != 0 Ha: diff > 0
Pr(T < t) = 0.3401 Pr(|T| > |t|) = 0.6802 Pr(T > t) = 0.6599

方差分析

方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”,是R.A.Fisher发明的,用于两个及两个以上样本均数差别的显著性检验。

单因素方差分析

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
webuse systolic, clear
anova systolic drug

Number of obs = 58 R-squared = 0.3355
Root MSE = 10.7211 Adj R-squared = 0.2985
Source | Partial SS df MS F Prob>F
-----------+----------------------------------------------------
Model | 3133.2385 3 1044.4128 9.09 0.0001
|
drug | 3133.2385 3 1044.4128 9.09 0.0001
|
Residual | 6206.9167 54 114.9429
-----------+----------------------------------------------------
Total | 9340.1552 57 163.86237

双因素方差分析

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
. anova systolic drug disease

Number of obs = 58 R-squared = 0.3803
Root MSE = 10.5503 Adj R-squared = 0.3207
Source | Partial SS df MS F Prob>F
-----------+----------------------------------------------------
Model | 3552.0722 5 710.41445 6.38 0.0001
|
drug | 3063.4329 3 1021.1443 9.17 0.0001
disease | 418.83374 2 209.41687 1.88 0.1626
|
Residual | 5788.0829 52 111.30929
-----------+----------------------------------------------------
Total | 9340.1552 57 163.86237
# Stata

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了604.4k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×