Stata:手动实现置换检验(permutation)和自抽样(bootstrap)

发布时间:2022-10-26 阅读 1081

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:郑裕璇 (中央财经大学)
邮箱zhengyuxuan811@gmail.com

编者按:本文主要参考自下文,特此致谢!
Source:Ängquist L. Stata tip 92: Manual implementation of permutations and bootstraps[J]. The Stata Journal, 2010, 10(4): 686-688. -PDF-


目录


1. 引言

1.1 Permutations

在数学中,Permutations (置换检验) 可视为对一组有序抽象元素的重新排序,例如 Fraleigh (2002)。在实证数据分析中,这个概念可能对应于一组有序观察结果的重新排序。模糊地说,当在一个特定变量相对于另一个变量的零关联或效应的零假设条件下进行模拟时,Permutations 可能是一个有趣的概念。

在这里,除了与核心变量相对应的随机排列值外,数据集基本保持不变。因为在没有关联的原假设下,所有排列通常都是等可能的 (至少在适当处理潜在混淆变量的情况下),这是一种通过此类模拟估算相应零分布的方法,例如相关的 p 值。简言之,Permutations 是通过置换样本顺序,重新计算统计检验量并构造经验分布,在此基础上求出 p 值进行推断。

1.2 Bootstraps

类似地,也可以采用 bootstrap 模拟程序。在这里,不会对观测数据重新排序,而是基于这一集合的经验分布,从样本中重复抽样进行推断。某种意义上,bootstrap 和 permutation 分别对应于在有替换和无替换的情况下从经验分布中均匀随机地选择值。

更多详细介绍,请参考 Manly (2007) 的 permutations 方法,Davison 和 Hinkley (1997) 的 bootstraps 方法,以及 Robert 和 Casella (2004) 的一般随机模拟方法。

2. Stata 命令

在 Stata 中,我们可以使用命令 permutebootstrap 来分别执行基于 permutation 和 bootstrap 的显著性检验。但是,有时需要更具体或者想对实际操作保持更细致的控制时,手动操作可能是更有利的。

2.1 手动实现 Permuting

假设有一个感兴趣的变量 permvar,我们想要按照上述的方式排列,可尝试:

generate id = _n                 // 创建一个与当前排列顺序对应的新变量 id
generate double u = runiform()   // 生成随机分布在 0—1 之间的变量 u
sort u                           // 对 u 进行排序
local type: type permvar  
generate `type' upermvar = permvar 
// 将排列存储在新变量 upermvar 中,每个新的值都来自于随机选择的 permvar 中

为了降低固定值相对于随机抽取的风险,并进一步增加派生值的随机性,可以将上述 2—3 行的代码替换为:

generate double u1 = runiform()
generate double u2 = runiform()
sort u1 u2

随机性参考对应于这样一个事实:计算机生成的随机数仅在实现所谓伪随机数对应的范围内是随机的,例如 Knuth (1998)。因此,为获得可重复的结果,需要设定种子值:

set seeds 760130  // 随机种子数必须是正整数

2.2 手动实现 Bootstrapping

我们可以使用一个与上述 permutations 方法相关但略有不同的变体,来生成一个名为 ubootsvar 的 bootstrapped 变量,它是基于原始变量 bootsvar 的当前观测值构成的经验分布。

generate u = ceil(runiform()*_N)
generate ubootsvar = bootsvar[u]

上述代码中,均匀分布的值不是用来决定排序顺序,而是通过让它们成为整数 1、2、... 、N 上均匀分布的值来直接构成索引值。为此,使用了 ceil() 函数。有关 runiform() 的更多信息,可查阅 help runiform 或者是 Buis (2007)。此外,在 Cox (2003) 中描述了 ceil()floor() 的相关函数。

3. 总结

permutations 是通过置换样本数据顺序,重新计算统计检验量并构造经验分布,在此基础上求出 p 值进行推断。而 bootstrap 不会对观测数据重新排序,而是根据这一集合的经验分布,从观测数据中重复抽样进行推断。为了更详细地掌握实际操作数据,可以通过手动实现 Permutations 和 Bootstraps。

4.参考资料

  • Buis M L. Stata tip 48: Discrete uses for uniform ()[J]. The Stata Journal, 2007, 7(3): 434-435. -PDF-
  • Cox N J. Stata tip 2: Building with floors and ceilings[J]. The Stata Journal, 2003, 3(4): 446-447. -PDF-
  • Davison A C, Hinkley D V. Bootstrap methods and their application[M]. Cambridge university press, 1997. -PDF-
  • Knuth D E. Art of computer programming, volume 2: Seminumerical algorithms[M]. Addison-Wesley Professional, 2014. -PDF-
  • Newson R. Stata tip 5: Ensuring programs preserve dataset sort order[J]. The Stata Journal, 2004, 4(1): 94-94. -PDF-

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh bootstrap 种子值, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh