查看原文
其他

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

连享会 连享会 2023-02-21

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 2022 面板数据因果推断专题

作者:郑裕璇 (中央财经大学)
邮箱: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

    • 1.2 Bootstraps

  • 2. Stata 命令

    • 2.1 手动实现 Permuting

    • 2.2 手动实现 Bootstrapping

  • 3. 总结

  • 4.参考资料

  • 5. 相关推文



1. 引言

1.1 Permutations

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

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

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 是通过置换样本数据顺序,重新计算统计检验量并构造经验分布,在此基础上求出 值进行推断。而 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

  • 专题:Stata教程
    • Stata:自己动手做组间系数差异检验-bootstrap-bdiff
  • 专题:Stata命令
    • moremata程序包手动安装方法
  • 专题:数据处理
    • Stata:原始聚类自助法(wild cluster bootstrap)-boottest
  • 专题:Stata程序
    • Stata程序:最大公约数和最小公倍数
    • Stata程序:10 分钟快乐编写 ado 文件
    • Stata程序:Monte-Carlo-模拟之产生符合特定分布的随机数
    • Stata程序:我的程序多久能跑完?
    • Stata程序:暂元-(local)-和全局暂元-(global)
    • Stata程序:切割文件路径和文件名
    • Stata程序:是否有类似-Python-中的-zip()-函数
    • Stata程序:在我的程序中接纳另一个程序的所有选项
    • Stata 程序:数值求解极值的基本思想
    • Stata: Bootstrap-自抽样-自举法
  • 专题:合成控制法
    • Stata:合成控制法程序分享
  • 专题:内生性-因果推断
    • Robins - Causal Inference: What if - 数据和程序

课程推荐:因果推断实用计量方法
主讲老师:邱嘉平教授
🍓 课程主页https://gitee.com/lianxh/YGqjp

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


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

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