【STATA】runiform() – 一様分布乱数の使い方・具体例

一様分布(uniform distribution)とは?

一様分布は離散型または連続型の確率分布となります。確率論での離散型では、それぞれの確率変数が均一な確率分布を持ちます。つまり、定義されている集合のすべての要素に同じ確率を割り当てることになります。

離散一様分布の例でよくあげられるのが、サイコロ(6面)を振ることによって値が1、2、3、4、5、および6のどれかになりますが、それぞれは発生する値の確率が全て1/6となります。

連続一様分布では、連続型確率変数の実現値を使うことになります。

コマンドruniform()の使い方

まずは、runiform()の一番簡単な使い方から実際にSTATAを動かしてみましょう。結論から言うとこのままの利用の場合のruniform()は連続一様分布における0から1までの数字が入ります。

1. seedを使う

 

set seed 1234

 

set seed 1234と置くことで、STATAが乱数を同じ結果になるように設定することができます。これで同じことが再現可能となります。ちなみにこの1234は 1でも、12でも、123でも大丈夫です。要はreplicateするときに同じものを使えば良いです。

 

2. データセットobsを使う

 

set obs 100

 

今回は観測値を100個作りましょう。set obs ○○ (○○は自然数)とすることで、次にコマンドを入れて作る枠を100個まで作るかたちとなりまっす。

 

3. 変数yを「runiform()」コマンドを使って定義

 

gen y = runiform()

 

するとどうでしょうか。観測値が下記の【図1】のようになります。

【図1】

初めの数値は 0.9472316 (表記では .9472316) となっており、その後の数値も0から1の間になっているとわかります。では実際にその数値の大きさの順を見ていきましょう。

 

tab y

 

とコマンドを入力します。「tab y」は「table y」の省略形で「table y」としても同じ結果が出ます。ここで表示されるのは y の数値の大きさの降順となります。

【図2-1】

【図2-2】

図で見るように、【図2-1】のsample1つ目の数字は 0.0066236となっており、0に一番近く、【図2-2】での100個目の数は0.9874877となっております。つまり0から1の間に‘一様’に連続している分布になることが分かります。

ということは平均はだいたい0.5に近い数字になっているのではと予想されます。

 

sum y

 

としてみましょう。「sum y」は元の「summarize y」や更に短縮形の「su y」としても同じです。これでサンプル数、平均、標準偏差、、最小値、最大値の順番で表示されます。

 

【図3】

 

結果は【図3】のようになると分かります。ここでMeanが平均ですが、0.5019454となり、ほぼ0.5となります。

 

次に今度は具体的な数値を見てみましょう。

具体例:サイコロを6000回振ってみよう

まずは先程の結果を消すために「clear」のコマンドを使いましょう。

clear

1. seedを使う

set seed 5678

今度はseedを5678にしてみましょう。今回もこの5678は数字としては意味を持ちません。他の方が同じ結果になるように設定しています。

2. データセットobsを使う

set obs 6000

今回は6000個の観測値を出してみましょう。

 

3. 変数yを「runiform()」コマンドを応用して定義

そして今回は6000回、6面のサイコロを振るという行為を定義してみます。

 

gen y = 1+int((6-1+1)*runiform())

 

と書くことができます。こちらのイコールの右側ですがどのような意味かという最初の「1」は1からスタートという意味になり、「int」は、整数を意味して「6-1」というのは連続する6つの数値を作るという作業です。またその後の「+1)」も忘れず入れて下さい。この辺りは今回は説明を割愛します。

 

tab y

 

で【図4】結果を見てみましょう。

 

【図4】

変数yですが1,2,3,4,5,6があることが分かり、その数もだいたいですが1000回前後という数になっています。2の番号は丁度1000回という数字になっております。