2項分布の信頼区間
Visual C++ フォームアプリケーション作成についてのTips
2項分布
のパラメータについて、信頼係数の信頼区間を求める。
N回の試行においてk回当該の事象が生起したときの信頼区間は、次式
で与えられる(岡本、1998、pp. 176-179)。
上記の方法で与えられる信頼区間と確率との関係は、「芝・南風原(1990)、pp. 90-92」で論じられている。
上記の信頼区間を算出するプログラムCalcIntervalP.exeを用意した。プログラムファイル名CalcIntervalP.exeをクリックしてダウンロード・実行することができる。プログラムは.NET Framework 4.5対応である。プログラムのソースコードなどは圧縮ファイルCalcIntervalP.zipとしてまとめた。圧縮ファイル名CalcIntervalP.zipをクリックしてダウンロードしたものを解凍すれば、Visual C++ 2012で開くことができる。
プログラムを実行すると図1のフォームが提示される。
図1
Nとkの値を設定して「Calc」ボタンをクリックすると図2のように計算結果が表示される。
図2
信頼係数は、%を単位として適当な値を設定することができる。例えば、90%を設定して「Calc」ボタンをクリックすると、図3のようになる。
図3
CopyボタンをクリックするとRichTextBox内のテキストがクリップボードにコピーされる。Copyボタンをクリックしてから、例えばメモ帳に貼り付けると図4のようになる。
図4
Visual C++/CLRによるフォームアプリケーションプログラミングにおいて、フォームのヘッダーファイルForm1.hにコードを書き込むとフォームの参照クラス型のメンバーとなるので、注意が必要である。フォームの参照クラス型のメンバーとしない場合は、別にヘッダーファイルやコードファイルを用意して、そこで宣言、定義する必要がある。例えば、式(2)、(3)におけるおよびはバイセクション法の関数Bisectionを
Bisection(
Cum_prob, -1.0, pa/2.0, 0.0, 1.0, UB, 1.0e-9 );
Bisection( UCum_prob, 1.0, pa/2.0, 0.0, 1.0, LB, 1.0e-9 );
と呼び出して求めている。このとき累積確率などを与える関数Cum_probおよびUCum_probを引数とするために、これらの関数はフォームのヘッダーファイルForm1.hとは別のファイルcommon.cppおよびcommon.hで定義・宣言を行っている。
なお、関数Bisectionの頭部は、
//
Bisection法による根の計算
void Bisection( double
(*f)(double),
double s,
//
fが増加関数のときs
> 0.0
double c,
// 根に対する関数値
double L_b, double
U_b,
// 根の存在区間の下限と上限
double & Root,
// 根 f(Root) = c
double acc );
となっている。
また、2項分布(1)における2項係数はそのまま計算するとオーバーフローを起こしやすい。2項係数の計算におけるオーバーフローと確率計算におけるアンダーフローを避けるため、式(1)を対数変換を利用した式
を用いて、
Math::Exp(LogCombi[i] + (i * Math::Log(p) + (N - i) * Math::Log(1.0 - p)))
と確率を求めている。上式におけるLogCombi[i]は
である。これは、common.cppに用意した配列に計算の最初に以下のコードによって値を設定している。
LogCombi = new
double[N+1];
for (int i = 0; i <= N; i++){
if ((i == 0) || (i == N)) LogCombi[i] = 0.0;
else {
double v = 0.0;
for (int j = i; j
>= 1; j--)
v
+= Math::Log(N + 1.0 - j) - Math::Log( j );
LogCombi[i]
= v;
}
}
なお、Visual C++プログラミングの解説書として<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>を上梓した。
参考文献
岡本安晴(1998)「Delphiで学ぶデータ分析法」CQ出版
芝 祐順・南風原朝和(1990)「行動科学における統計解析法」東京大学出版会