<!DOCTYPE html>
Stata_MC.md
Stataでのモンテカルロ法
プログラム定義
syntax
でシンタックスの定義。引数は、以下のとおり。
obs
: 観測数(整数、デフォルト1)
mu
: 平均(実数、デフォルト0)
sigma
: 標準偏差(実数、デフォルト1)
rnormal
で正規分布から乱数発生。
exp
で指数変換しているので、z
は対数正規分布に従う。
. capture program drop lnsim
.
. program define lnsim, rclass //プログラム定義
1.
. version 18 // Stataのバージョン
2.
. syntax [, obs(integer 1) mu(real 0) sigma(real 1) ]
3.
. drop _all // 全ての変数削除
4.
. set obs `obs' // サンプル数
5.
. tempvar z //一時的な変数z作成
6.
. gen `z' = exp(rnormal(`mu',`sigma')) // 対数正規分布
7.
. summarize `z' // 記述統計
8.
. return scalar mean = r(mean) //平均保存
9.
. return scalar Var = r(Var) //分散保存
10.
. end
モンテカルロ法実行(1)
- 対数正規分布。
- 100個の観測サンプルの平均と分散を含むデータセットを作成。
- 実験を10,000回実行。
. simulate mean=r(mean) var=r(Var), reps(10000) nodots : lnsim, obs(100)
Command: lnsim, obs(100)
mean: r(mean)
var: r(Var)
.
. save "Data_output/data1.dta",replace
file Data_output/data1.dta saved
.
. su
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
mean | 10,000 1.651469 .2171037 .9949802 2.890096
var | 10,000 4.727914 4.587005 .7066754 125.7499
モンテカルロ法実行(2)
- 対数正規分布(平均が-3、標準偏差が7)。
- 50個の観測サンプルの平均と分散を含むデータセットを作成。
- 実験を10,000回実行。
. clear
.
. simulate mean=r(mean) var=r(Var), reps(10000) nodots : lnsim, obs(50) mu(-3) sigma(7)
Command: lnsim, obs(50) mu(-3) sigma(7)
mean: r(mean)
var: r(Var)
.
.
. save "Data_output/data2.dta",replace
file Data_output/data2.dta saved
OLS
. clear all
.
. program define ols, rclass
1.
. version 14.2
2.
. syntax
3.
.
. clear
4.
. drop _all
5. set obs 10000
6. gen x = 9*rnormal()
7. gen u = 36*rnormal()
8. gen y = 3 + 2*x + u
9. reg y x
10. end
.
. simulate beta=_b[x], reps(1000): ols
Command: ols
beta: _b[x]
Simulations (1,000): .........10.........20.........30.........40.........50.........60.........70.........80......
> ...90.........100.........110.........120.........130.........140.........150.........160.........170.........180
> .........190.........200.........210.........220.........230.........240.........250.........260.........270.....
> ....280.........290.........300.........310.........320.........330.........340.........350.........360.........3
> 70.........380.........390.........400.........410.........420.........430.........440.........450.........460...
> ......470.........480.........490.........500.........510.........520.........530.........540.........550........
> .560.........570.........580.........590.........600.........610.........620.........630.........640.........650.
> ........660.........670.........680.........690.........700.........710.........720.........730.........740......
> ...750.........760.........770.........780.........790.........800.........810.........820.........830.........84
> 0.........850.........860.........870.........880.........890.........900.........910.........920.........930....
> .....940.........950.........960.........970.........980.........990.........1,000 done
. su
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
beta | 1,000 1.997351 .0397718 1.875863 2.112572
.
. hist beta
(bin=29, start=1.8758633, width=.00816237)
.
. graph export "Figures/OLS_beta.png", replace
file /Users/ayumu/Documents/GitHub/RTips/MC/Figures/OLS_beta.png saved as PNG format
