Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:滕泽鹏 (中山大学)
邮箱:tengzp@mail2.sysu.edu.cn
目录
本篇推文介绍 Stata 中用于抽样的外部命令:gsample
。该命令不仅支持简单随机抽样 (SRS),也支持不等概率抽样 (UPS),并且 SRS 和 UPS 两种方法均提供有放回抽样和无放回抽样。此外,gsample
还支持分层抽样和整群抽样。
命令安装:
ssc install gsample, replace
ssc install moremata, replace
关于 moremata
更多安装方法,详见连享会推文 moremata程序包手动安装方法。
命令语法:
gsample [#|varname] [if] [in] [weight] [, options]
其中,#
表示样本的大小。在不指定 #
时,gsample
默认将内存中的数据替换为随机顺序的采样观测值。指定 #
以后,gsample
会存储一个反映观测值抽样频率的新变量。在不放回抽样的情况下,样本容量必须小于等于数据中的采样单元数,采样单元要么是单个观测值,要么是由 cluster()
选项指定的簇。若没有指定 #
或者所指定的 #
是空值,那么样本大小将自动设定为数据中观测到的单元数。
对于分层抽样,#
表示将从 strata()
选项确定的每个类层中选择 #
个单元。此处也可指定 varname
来替代 #
,所指定的 varname
是包含每个类层特定样本容量的变量且需要为常数。
weight
用于设定进行不等概率抽样时的权重,在这种情况下,采样概率将与指定的权重成正比 (此处使用 iweight
或 aweight
亦可,并不影响结果)。如果权重分布过于不均,可能会导致无放回的不等概率抽样 (UPS) 失败。
options
包括:
percent
:以总体的百分比表示样本量。wor
:不放回抽样。alt
:使用更高效的 SRSWOR 算法进行不放回简单随机抽样,alt
仅在指定不放回抽样 wor
且未提供权重 weight
时才可用。nowarn
:在不等概率不放回抽样 (UPSWOR) 的基础上允许重复,仅在指定不放回抽样 wor
且提供了权重 weight
时可用。strata(varlist)
:用于指定类层的变量,即在每个类层内选取样本,类层变量可以是数值型的,也可以是字符串型的。rround
:对所有类层的样本总量进行随机取整,仅在类层 strata(varlist)
已指定的情况下可用。一般情况下,gsample
将对样本容量进行四舍五入,但使用 rround
后,将在分层抽样的情况下进行随机取整。cluster(varlist
):指定识别重抽样簇的变量 (比如初始采样单元),簇变量可以是数值型的,也可以是字符串型的。如果 cluster(varlist)
与 weight
一起使用,则假设每个簇内部权重相同。idcluster(newvar)
:创建新的簇 ID 变量,在有放回抽样时特别有用。keep
:保留不符合 if
和 in
的观察值以及出现空值或者 0 权重的观察值。不适用该选项时,默认去除这些观察值。generate(newvar)
:将抽样频率存储在新变量 newvar
中。如果使用了 generate(newvar)
,数据的原始排序顺序将被保留,对于不满足 if
或 in
条件的观测值,newvar
将为 0 或 1,如果同时使用了选项 keep
,则为 1,否则为 0。replace
:覆盖替换现有变量。noprreserve
:在运行出现 break 或 error 时不要恢复原始数据,但在使用了选项 generate()
时不可用。
下面使用 Stata 系统数据展示 gsampl
命令的实际用法和效果。
. sysuse "auto.dta", clear // 调用系统数据
. drop in 11/74 // 为便于展示仅使用前 10 个观测值
. sort price
. gen n = _n // 按照价格对观察值进行排序并编号
. drop rep78 headroom trunk weight foreign displacement turn gear_ratio
. gsample
. list
+--------------------------------------------+
| make price mpg length n |
|--------------------------------------------|
1. | Buick Riviera 10,372 16 207 10 |
2. | AMC Pacer 4,749 17 173 5 |
3. | AMC Spirit 3,799 22 168 1 |
4. | Buick Opel 4,453 26 170 4 |
5. | Buick Riviera 10,372 16 207 10 |
|--------------------------------------------|
6. | Buick LeSabre 5,788 18 218 8 |
7. | AMC Spirit 3,799 22 168 1 |
8. | Buick LeSabre 5,788 18 218 8 |
9. | AMC Pacer 4,749 17 173 5 |
1. | Buick LeSabre 5,788 18 218 8 |
+--------------------------------------------+
此处是产生样本容量为总体 65% (无放回的简单随机样本) 的 bootstrap 样本,且内存中的数据将被采样的观测值代替。
. sysuse "auto.dta", clear
. drop in 11/74
. sort price
. gen n = _n
. drop rep78 headroom trunk weight foreign displacement turn gear_ratio
. gsample 65, percent wor
. list
+--------------------------------------------+
| make price mpg length n |
|--------------------------------------------|
1. | Buick Opel 4,453 26 170 4 |
2. | Buick Skylark 4,082 19 200 2 |
3. | Buick Electra 7,827 15 222 9 |
4. | Buick LeSabre 5,788 18 218 8 |
5. | AMC Concord 4,099 22 186 3 |
|--------------------------------------------|
6. | Buick Riviera 10,372 16 207 10 |
7. | AMC Spirit 3,799 22 168 1 |
+--------------------------------------------+
weight[]
所设定的变量为抽样的辅助变量,总体中各观察值被抽中的概率与这些观察值的辅助变量大小成正比。此处以变量 mpg 作为辅助变量来进行展示。
. sysuse "auto.dta", clear
. drop in 11/74
. sort price
. gen n = _n
. drop rep78 headroom trunk weight foreign displacement turn gear_ratio
. gsample 1000 [weight=mpg], generate(fre)
. list
+--------------------------------------------------+
| make price mpg length n fre |
|--------------------------------------------------|
1. | AMC Spirit 3,799 22 168 1 129 |
2. | Buick Skylark 4,082 19 200 2 107 |
3. | AMC Concord 4,099 22 186 3 104 |
4. | Buick Opel 4,453 26 170 4 140 |
5. | AMC Pacer 4,749 17 173 5 87 |
|--------------------------------------------------|
6. | Buick Century 4,816 20 196 6 106 |
7. | Buick Regal 5,189 20 200 7 78 |
8. | Buick LeSabre 5,788 18 218 8 86 |
9. | Buick Electra 7,827 15 222 9 75 |
10. | Buick Riviera 10,372 16 207 10 88 |
+--------------------------------------------------+
上述代码以变量 mpg 作为辅助变量,进行 1000 次有放回随机抽样并形成新变量 fre 以记录每个观察值被抽取的次数。在本次抽样中,10 个初始观察值中 mpg 最大值对应的编号 4 被抽取了 140 次,而 mpg 最小值对应的编号 9 被抽取了 75 次。这样的结果能够很直观地展现出辅助变量对于抽样的影响,即某一观察值的辅助变量值越大,其被抽取的概率越高,这就是不等概率抽样。
此处以变量 length 和 price 作为分层依据,每个类层抽取 2 个样本,且内存中的数据不会被抽取的观测值代替,而是生成新变量 fre 以记录每个观察值被抽到的次数。
. sysuse "auto.dta", clear
. drop in 11/74
. sort price
. gen n = _n
. drop rep78 headroom trunk weight foreign displacement turn gear_ratio
. gsample 2, strata(length price) generate(fre)
. list
+--------------------------------------------------+
| make price mpg length n fre |
|--------------------------------------------------|
1. | AMC Spirit 3,799 22 168 1 2 |
2. | Buick Skylark 4,082 19 200 2 2 |
3. | AMC Concord 4,099 22 186 3 2 |
4. | Buick Opel 4,453 26 170 4 2 |
5. | AMC Pacer 4,749 17 173 5 2 |
|--------------------------------------------------|
6. | Buick Century 4,816 20 196 6 2 |
7. | Buick Regal 5,189 20 200 7 2 |
8. | Buick LeSabre 5,788 18 218 8 2 |
9. | Buick Electra 7,827 15 222 9 2 |
10. | Buick Riviera 10,372 16 207 10 2 |
+--------------------------------------------------+
可以看出,原始数据并未发生改变,并且由于变量的特征,分层实现了每个观察值作为一个单独的类层,因而每个观察值都被抽样了 2 次。
在前面分层抽样的基础上,为更清晰地展示 rround
的作用,采用如下代码进行抽样:
. sysuse "auto.dta", clear
. drop in 11/74
. sort price
. gen n = _n
. drop rep78 headroom trunk weight foreign displacement turn gear_ratio
. gsample 233, percent strata(length price) rround generate(fre)
. gsample 233, percent strata(length price) generate(fre2)
. list
+---------------------------------------------------------+
| make price mpg length n fre fre2 |
|---------------------------------------------------------|
1. | AMC Spirit 3,799 22 168 1 2 2 |
2. | Buick Skylark 4,082 19 200 2 2 2 |
3. | AMC Concord 4,099 22 186 3 3 2 |
4. | Buick Opel 4,453 26 170 4 3 2 |
5. | AMC Pacer 4,749 17 173 5 2 2 |
|---------------------------------------------------------|
6. | Buick Century 4,816 20 196 6 2 2 |
7. | Buick Regal 5,189 20 200 7 2 2 |
8. | Buick LeSabre 5,788 18 218 8 2 2 |
9. | Buick Electra 7,827 15 222 9 2 2 |
10. | Buick Riviera 10,372 16 207 10 3 2 |
+---------------------------------------------------------+
上列代码对原始数据进行了有放回的分层抽样,以 length 和 price 作为划分类层的依据,每个类层抽取的样本数为类层中观察值总数的 233%,并分别形成了 fre 和 fre2 来记录每个原始观察值被抽取的频率。
可以看出,使用了选项 rround
的抽样总共抽取了 23 个样本,而没有使用的抽样总共抽取了 20 个样本。这是因为添加了 rround
后,gsample
会对原始观察值整体进行取整,然后在对各个类层的抽样中,会有一部分类群抽取的样本数量向上取整,从而保证样本数量的充足。此处整体要抽取 23 个样本,由于有 10 个类层,因而在对 7 个类层抽取 2 个样本的同时,会随机挑选 3 个类层抽取 3 个样本。这就是 rround
的作用。
Note:产生如下推文列表的 Stata 命令为:
lianxh 抽样 bootstrap, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh