跳轉到內容

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 直接從多元正態分佈中抽取。

前一節:機率函式 索引 下一節:資料管理
華夏公益教科書