P5. 随机抽样
整理人:熊禹铭 (中山大学)
E-Mail: xiongym3@mail2.sysu.edu.com
本讲主要介绍两种随机抽样方法:无放回抽样和有放回抽样。
1. 无放回抽样
在 Stata 中,通过 sample 命令实现无放回抽样。
- 数据产生过程
clear
set obs 10
gen x = _n
save P4_data1.dta, replace通过以上命令,我们可以得到一列 1 到 10 的整数,如下图所示。
x
1. 1
2. 2
3. 3
4. 4
5. 5
6. 6
7. 7
8. 8
9. 9
10. 101.1 按比例抽取
-抽取 30% 的观察值
use P4_data1, clear
browse
sample 30通过以上命令,可以得到 3 个观察值,例如:
x
1. 4
2. 7
3. 3如果对这三行命令重复多次,得到的结果有所差别,这也是所谓“随机”抽样的含义。在 Stata 内部,通过人为设定的随机数发生器来实现随机抽样,所以这样的“随机”抽样虽然名义上是“随机”抽样,但实质上是伪随机的,其中存在一个函数的发生器。
1.2 按计数抽取
-随机抽取 5 个观察值
use P4_data1, clear
sample 5, count
browse通过以上命令,可以得到 5 个观察值,例如:
x
1. 7
2. 3
3. 4
4. 2
5. 9同样的,重复多次,得到的结果也是“随机”的。
1.3 分组抽样 (sampling for each group)
分组抽样是更为复杂的抽样,我们可以在每一个组里依次去抽取一定量的观察值。
-范例 1
基于 Stata 中自带的“P4_xtdata.dta”面板数据,如下图所示。
id year x
1. 1 2001 .1
2. 1 2002 .2
3. 1 2003 .3
4. 1 2004 .4
5. 2 2001 .5
6. 2 2002 .6
7. 2 2003 .7
8. 2 2004 .8
9. 3 2001 .9
10. 3 2002 1
11. 3 2003 1.1
12. 3 2004 1.2
13. 4 2001 1.3
14. 4 2002 1.4
15. 4 2003 1.5
16. 4 2004 1.6
17. 5 2001 1.7
18. 5 2002 1.8
19. 5 2003 1.9
20. 5 2004 2这份数据一共有 3 个变量,分别为“id”,“year”,“x”,下表介绍了其具体含义:
| 变量名 | 说明 |
|---|---|
id |
公司代码 |
year |
年份 |
x |
研究关注的某个连续变量 |
使用如下代码:
use P4_xtdata, clear
browse
sample 50, by(id)
xtset id year每家公司 4 年的资料我们随机抽取两年(50%), xtset 将其示例成 Panel Data,相当于分别对 id 和 year 逐个进行排序。
抽样结果例如下图所示:
id year x
1. 1 2002 .2
2. 1 2004 .4
3. 2 2003 .7
4. 2 2004 .8
5. 3 2002 1
6. 3 2004 1.2
7. 4 2003 1.5
8. 4 2004 1.6
9. 5 2002 1.8
10. 5 2003 1.9如上图,第 1 家公司被抽中 02 和 04 年的观察值,而第二家公司被抽中 03 和 04 年的观察值。
-范例 2
基于 88 年妇女工资资料数据“nlsw88.dta”。
sysuse nlsw88, clear
des, short
sample 50, by(race)
des, short使用des, short选项可以在屏幕上列示出数据的基本状况,如下所示,一共包含了 2246 个观察值。
Contains data from C:\Program Files\Stata16\ado\base/n/nlsw88.dta
obs: 2,246 NLSW, 1988 extract
vars: 17 1 May 2018 22:52
Sorted by: idcode从这份数据中按照种族,每个种族内部分别抽取 50%的观察值,再次利用des, short命令可以查看抽样结果,如下所示,剩下 1124 个观察值,基本接近一半。
Contains data from C:\Program Files\Stata16\ado\base/n/nlsw88.dta
obs: 1,124 NLSW, 1988 extract
vars: 17 1 May 2018 22:52
Sorted by: race1.3 分块抽样 (sampling blocks)
同样使用“P4_xtdata.dta”面板数据。这里需要介绍一个外部命令 gsample ,即一般化的 sample。
-按计数抽取
help gsample //外部命令
use P4_xtdata, clear
browse
gsample 3, cluster(id) wor //随机抽取三家公司附加选项 cluster(id) 表示以公司为单位进行抽取,而不是以行(观察值)为单位进行抽取。 附加选项 wor 表示不可重复的抽样,也就是不放回抽样。抽样结果如下图所示:
id year x
1. 4 2001 1.3
2. 4 2002 1.4
3. 4 2003 1.5
4. 4 2004 1.6
5. 2 2001 .5
6. 2 2002 .6
7. 2 2003 .7
8. 2 2004 .8
9. 1 2001 .1
10. 1 2002 .2
11. 1 2003 .3
12. 1 2004 .4-按比例抽取
use P4_xtdata, clear
browse
gsample 40, cluster(id) wor percent //随机抽取 60% 的公司
2. 有放回抽样
在 Stata 中,通过 bsample 命令来实现有放回抽样,’b’是 bootstrap(自抽样)的简写。
-范例 1: 截面数据
同样使用 1 到 10 的 10 个整数作为总体,代码如下:
use P4_data1.dta, clear
browse
bsample
sort x抽样结果如下图所示,其中命令 sort 表示对观察值进行排序,观察值 4 被抽取了四次,6 被抽取了两次。
x
1. 2
2. 4
3. 4
4. 4
5. 4
6. 6
7. 6
8. 8
9. 9
10. 10
-范例 2: 面板数据
面板数据同样可以进行有放回的抽样,设置选项 cluster(id) 表示抽样是以公司为单位进行的,或者理解为每次抽取的是公司的编号而不是行(观察值),代码如下:
use P4_xtdata, clear
browse
bsample, cluster(id) idcluster(idnew)
xtset idnew year附加选项 idcluster(idnew) 重新确定了抽样样本出现的先后顺序,如下图所示:
1. 1 2001 .1 1
2. 1 2002 .2 1
3. 1 2003 .3 1
4. 1 2004 .4 1
5. 1 2001 .1 2
6. 1 2002 .2 2
7. 1 2003 .3 2
8. 1 2004 .4 2
9. 1 2001 .1 3
10. 1 2002 .2 3
11. 1 2003 .3 3
12. 1 2004 .4 3
13. 3 2001 .9 4
14. 3 2002 1 4
15. 3 2003 1.1 4
16. 3 2004 1.2 4
17. 4 2001 1.3 5
18. 4 2002 1.4 5
19. 4 2003 1.5 5
20. 4 2004 1.6 5
id 为 1 的公司被抽取了 3 次,分别被 idnew 标记为 1、2、3,如果多次重复运行代码,抽取的结果会发生变化。
近年中,bootstrap 方法的应用非常广泛。在 Stata 学术论文专题中介绍的面板门限模型中,主要是运用 bootstrap 来进行假设检验。
Note:
gsample可以完全替代bsample的功能,且有扩展。
-应用:bootstrap 标准误
可重复的抽样主要应用在 bootstrap 中,我们可以使用 bootstrap 去获取系数的标准误。在 Stata 中做线性回归,想要采用 bootstrap 去获得标准误,只需要在前面附加前缀bootstrap, reps(300):,代表我们进行 300 次可重复抽样,每一次可重复抽样的样本称为经验样本,用经验样本可以估计出变量的系数。 示例代码如下:
sysuse auto, clear
bootstrap, reps(300): ///
reg price weight mpg foreign, noheader对于 300 次重复抽样的系数,比如 weight 变量,我们可以计算出一个标准差,它可以作为 weight 变量对应系数的标准误。
-等价写法:
reg price weight mpg foreign, ///
vce(bootstrap, reps(300) seed(1357))等价写法是把 bootstrap 参数写在 vce() 选项中。
Notes:
- 90% 以上的 Stata 命令都支持
vce(bootstrap)选项。
- 90% 以上的 Stata 命令都支持
- 本部分的详细介绍见 R7_robustSE.do