跳转到内容

Stata/随机数生成

来自维基教科书,开放的书籍,开放的世界


生成单变量均匀分布

[编辑 | 编辑源代码]
  • 函数 -runiform()- 返回区间 [0,1) 上的均匀分布的伪随机数
. set obs 10
obs was 0, now 10
. gen x = runiform()

您有针对主要分布的内置随机数生成方法。关键字是 rnd。以下帮助文件中列出了所有可用分布:-h rnd-

逆CDF方法

[编辑 | 编辑源代码]
  • 生成随机数的基本函数是 uniform()。因此,您通常必须使用逆CDF方法从其他分布中进行采样。

我们可以从均匀分布中抽取 

. clear
. set obs 500
obs was 0, now 500
. gen unif=runiform()
. hist unif
(bin=22, start=.0043096, width=.04522361)

我们可以从正态分布中抽取 

. gen norm=invnorm(runiform())
. hist norm
(bin=22, start=-2.8517358, width=.23821211)

我们可以从 分布中抽取

. gen chi2=invchi2(1,uniform())
. hist chi2
(bin=22, start=.00002381, width=.50381869)
. gen chi210=invchi2(10,uniform())
. hist chi210
(bin=22, start=1.8273849, width=1.3336678)

我们可以从 Fisher Snedecor 分布中抽取

. gen fisher=invF(10,10,uniform())
. hist fisher
(bin=22, start=.14025442, width=.39209784)

我们可以从 Student 分布中抽取。记住invttail()不是 CDF(累积分布函数)的逆,而是生存函数(1 - CDF)的逆。

 
. gen student=1-invttail(10,uniform())
. hist student
(bin=22, start=-3.9568543, width=.4741968)

多元正态分布

[编辑 | 编辑源代码]

drawnorm 直接从多元正态分布中抽取。

前一节:概率函数 索引 下一节:数据管理
华夏公益教科书