Up

2項分布の計算

C++/Linuxプログラミング例

 

独立に同じベルヌーイ分布(Bernoulli distribution)に従うN回のベルヌーイ試行(Bernoulli trial)を考える(岡本安晴「データ分析統計学入門おうふう、2009pp. 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をクリックしてダウンロードすることができる。

 

Up