2項分布の計算
C++/Linuxプログラミング例
独立に同じベルヌーイ分布(Bernoulli distribution)に従うN回のベルヌーイ試行(Bernoulli trial)を考える(岡本安晴「データ分析のための統計学入門」おうふう、2009、pp. 208-211参照)。第i試行の結果をで表し、
とおく。このとき、
は2項分布
に従う。
2項分布を求めるプログラムを以下のように作成した。
=================================================
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double Combi( int
n, int y ){
double
v = 1.0;
if
((1 <= y) && (y < n))
for
(double i = y; i > 0.99;
i -= 1.0) v *= (n + 1.0 - i)
/ i;
return
v;
}
int main()
{
double
p;
while(true){
cout << endl <<
"p = ";
cin >> p;
if
((p > 0.0) && (p < 1.0)) break;
}
int n;
while(true){
cout << "N = ";
cin >> n;
if(n
> 0) break;
}
cout << endl;
cout << "p = " << p <<
" N = "
<< n << endl;
cout << setw(12) <<
"k" << "
P(k) =" << endl;
double
sum_p = 0.0;
for
(int k = 0; k <= n; k++){
double
v = Combi(n, k) * pow(p, k)
* pow(1.0 - p, n - k);
sum_p += v;
cout << setw(12) << k
<< ": "
<<
setprecision(12) << fixed << v << endl;
}
cout << endl <<
"Check_sum_p = " << sum_p << endl << endl;
return
0;
}
=================================================
上のプログラムの実行例を図1に示す。
図1
プログラムを実行すると、
p =
と確率をきいてくるので、適当な確率を設定する。
次に、
N =
とNの値をきいてくるので、これも適当な値を設定する。
Nの値の設定後、2項分布の値が「P(k) =」の下に表示されていく。
プログラムのソースコードは圧縮ファイルBinDistriProbs.zipとして用意した。ファイル名BinDistriProbs.zipをクリックしてダウンロードすることができる。