如何从标准正态分布抽样?Stata中R的replicate函数等效实现是什么
Stata中等效于R
replicate 生成重复随机样本的方法 你需要生成500份、每份包含10个数值的标准正态分布样本(最终得到10×500矩阵),对应R中replicate(500, rnorm(10))的效果,Stata中有两种常用实现方案:
- 方案1:直接生成目标矩阵(最简便)
结合Stata内置的矩阵生成函数J()和标准正态随机数函数rnormal(),一行代码即可实现:
代码说明:mat norm_matrix = J(10, 500, rnormal())J(r, c, val)函数的作用是生成r行c列、所有元素初始值为val的矩阵,这里val传入rnormal()时,Stata会为矩阵的每个元素独立生成一个标准正态分布随机数,最终直接输出10行500列的目标矩阵,你可以运行mat list norm_matrix查看生成结果。 - 方案2:迭代抽样框架(适配复杂抽样逻辑)
如果你需要处理更复杂的自定义抽样逻辑,和Rreplicate迭代逻辑完全匹配的实现是用simulate命令,示例代码如下:
代码说明:这种方案扩展性更强,只需要修改* 清空环境 clear all * 设置随机种子保证结果可复现 set seed 12345 * 定义单次抽样的程序:返回10个标准正态随机数 cap program drop draw_sample program define draw_sample, rclass forval i = 1/10 { return scalar n`i' = rnormal() } end * 重复运行抽样程序500次,结果保存为变量 simulate n1=r(n1) n2=r(n2) n3=r(n3) n4=r(n4) n5=r(n5) n6=r(n6) n7=r(n7) n8=r(n8) n9=r(n9) n10=r(n10), reps(500) noheader: draw_sample * 将结果转为10行500列的矩阵 mkmat n*, mat(norm_matrix) mat norm_matrix = norm_matrix'draw_sample程序里的逻辑,就可以实现任意自定义规则的重复抽样。
小提示:所有涉及随机数生成的操作,建议在代码开头设置固定随机种子,保证结果可以复现。
内容的提问来源于stack exchange,提问作者T Z
相关产品推荐
相关产品推荐

