2013/03/07

プログラミング講座(115) t分布による母平均の推定

標本から母集団の平均を推定することができるということで、9路盤のスコアについてやってみました。
t分布表から信頼できる区間の t の値を割り出し、式

μ=average(x)±t*s*√(n-1)

に標本平均 average(x)、t、標準偏差 s、データ数 n を入れて母平均μを求めます。
図115 母平均の区間推定
【図115 母平均の区間推定】

t分布表の作成には Excel の TINV 関数を使っています。平均には AVERAGE 関数、標準偏差には STDEVP 関数を使いました。

結論は、「9路盤棋譜の母集団のスコア(黒の点数、+なら勝ち、0なら引き分け、-なら負け)の平均は 99% の確率で 0.457 から 2.373 の間にある」ということになりました。でたらめに打った囲碁を標本にしているからなのかもしれませんが、9路盤のコミは最大でも2目半でいいということになるのでしょうか。また、これはすでに知られていることとはいえ、囲碁は黒(先手)が有利であることが分かります。

| | コメント (0) | トラックバック (0)

2013/03/03

プログラミング講座(114) 勝敗でみたχ二乗検定

区間を大幅に統合して、勝敗に注目してχ2検定をやり直してみました。

一つ目はコミなしのまま区間を黒の勝ち、持碁、負けに分けました。有意水準(危険率)は 5% 、自由度2のχ2と比較すると、初手天元並びに打った対局のばらつきχ2は有意に大きな値であり、統計的に初手天元並びに打つと勝率が高いと言えます。

二つ目はコミ1目半で区間を黒の勝ち、負けに分けました。有意水準は 5% 、自由度1のχ2と比較すると、こちらも初手天元並びに打つと勝率が高いと言えました。

図114 勝敗でみたχ二乗検定
【図114 勝敗でみたχ二乗検定】

同じデータでありながら、区間の設定によって検定結果が変わるというのは、ちょっと釈然としないところもありますが、感覚としては例えば二つ目のケースの場合、全局では黒の勝率が 4108/8175 = 0.503、初手天元並びの対局では黒の勝率が 233/401 = 0.581 なので、かなり初手を天元の並びに打ったほうが強そうであり、それと一致することができました。このケースでコミ1目半としたのは全局での勝率を 0.5 に最も近づけたかったからです。実戦で行われるようなコミ5目半などにすると、囲碁シミュレーション対局での黒の勝率は 0.440 ほどに下がってしまいます。

モンテカルロ囲碁ではシミュレーションで勝率の高い手を選んでいますが、単純に勝率を比較するだけでなく、統計的な検証を入れたほうが、より正着に近づけると思います。実際のモンテカルロ囲碁プログラムでは単に勝率が高くてもシミュレーションの回数が少ない場合はあまり信用しない、といったアルゴリズムが使われています。

| | コメント (0) | トラックバック (0)

プログラミング講座(113) χ二乗検定

9路盤の初手天元並びの集計結果の分布が偶然のばらつきの範囲にあるのかどうかをχ2(カイ二乗)検定で調べてみることにします。

本来どういう分布になるのか理論的にはちょっと分からないので囲碁シミュレータで作った全8175局の結果を期待値としてみます。データがなかった区間は計算に支障があるので削除し、17区間でのχ2の値を計算します。実現値を xi、期待値を ei とすると、

χ2 = Σ((xi-ei)2/ei)

となり、これを Excel で計算したのが下図のセル M19 です。
図113 χ二乗検定
【図113 χ二乗検定】

この計算結果の確率分布がχ2分布に従うそうです。今回は17区間に分けたので17事象、すなわち自由度17-1=16のχ2分布の右側 5% に入った場合は、統計的に偶然とは言えないとします。χ2分布の右側 5% に入るχ2の値は、Excel の =CHIINV(0.05,16) で計算できます。この値が上図のセル M21 に入っています。

計算した値が 23.7 、有意水準(危険率) 5% に入る値が 26.3 以上となるので、結論としてこの初手天元並びの集計結果は偶然のばらつきの範囲に入っていると言えることが分かりました。つまり統計的には初手天元並びの分布がそれ以外の分布に比べて明らかに右より(勝率が高い)とは言えないということです。

この検定結果は区間を17に区切ったことの影響を受けているようにも見えます。区間の数を減らし(自由度を減らし)てどうなるか、試してみようと思います。

| | コメント (0) | トラックバック (0)

プログラミング講座(111) CSVコンバーター

久しぶりに囲碁の話に戻ります。
9路盤の棋譜を8175局作ったところまでお話しました。この棋譜を Excel で統計処理するために、CSV(コンマで区切られた値)形式に変換するプログラムを作成しました。プログラムID RGR694 で発行しました。
図108 CSVコンバーター
【図108 CSVコンバーター】

作成したCSVファイル (simulated.csv) を Excel で読み込んだのが以下の図です。
図109 Excel に読み込んだ CSV
【図109 Excel に読み込んだ CSV】

ここから先は Excel の話になります。
Excel のバージョンは 2007 を使っています。読み込んだデータを、このバージョンからの新機能「テーブル」に変換しました。[挿入][テーブル]で変換できます。テーブルに Score (スコア=点数)という欄を追加しました。CSVデータには Result (結果)という欄があり、黒1目勝ちなら B+1、白1目勝ちなら W+1 となっていますが、これを黒1目勝ちなら 1、白1目勝ちなら -1 に変換します。

ここまでデータの準備をして、今度は Excel のグラフ機能で Score 毎の度数分布図を作ってみました。まず、グラフのデータを集計します。Score の範囲を区切って棋譜の数を集計しました。例えば下図の-90< Score <=-80 つまり白89目勝ちから白80目勝ちまでの範囲の棋譜が 36 局ありました。
図110 データの集計
【図110 データの集計】

この集計には COUNTIFS 関数を使いました。複数の条件でデータの件数を集計できる関数でとても便利です。
ちなみにさきほどの例でセルC4には =COUNTIFS(テーブル1[Score],$A4,テーブル1[Score],$B4) という式を入れてあります。テーブルの参照は範囲を指定せずに欄の名前が使えます。

この集計をグラフにしたのが下図です。まずは全局の度数分布図です。横軸が Score で縦軸が度数(局数)です。Score ±80 付近は相手の石をすべて取って勝った対局のもので、それなりの局数があることがわかります。
図111 全局の度数分布図
【図111 全局の度数分布図】

また、最も黒の勝率が高かった、初手が天元の横(並び)の対局の度数分布が以下のようになりました。全局の分布より少し右にずれているはずです。
図112 初手天元並びの度数分布図
【図112 初手天元並びの度数分布図】

この勝率のずれが、偶然によるものか、そうでないかを統計の手法で今後検証していきたいと思います。

| | コメント (0) | トラックバック (0)

2012/11/17

プログラミング講座(100) 散布図

しばらく9路盤のプレイアウトの結果について検証してみようと思います。今回は初手と勝率に関する散布図を描いてみました。
図100 9路盤初手と勝率の散布図
【図100 9路盤初手と勝率の散布図】

このグラフを見る限り明らかにのこぎりの歯のような形になっていて盤の端は勝率が低く、中心に近づくほど勝率が高いことが伺えます。ただし天元は少し落ち込んでいます。

参考書として『例題で学ぶExcel統計入門第2版』(森北出版)を購入しました。

初手だけではなく3手目についても同様の結果になりそうなので比較してみようと思います。

 

| | コメント (0) | トラックバック (0)

2011/06/06

プログラミング講座(64) 和時計の完成、Excelを使った検算

今日の日付から太陽黄経を求めるには、以前の記事「プログラミング講座(60) ケプラーの第2法則」のように楕円軌道を考慮する必要がありますが、途中2つほど方程式を数値計算で解かなければなりません。和時計の文字盤はもともとそれほどの精度があるわけではないので、今回これまでのプランを変更し、地球が円軌道上を等速度で移動していると仮定して太陽黄経を求めることにしました。これなら日付と太陽黄経は単純な比例の関係になるので、計算はとても楽です。

そのようしてできた和時計の最終版を HRT547-3 として発行しました。

和時計の企画からこのひと月余りは計算の日々でした。三角関数やその逆関数には範囲の制約があり、プログラミングも結構簡単に行きませんでした。サブルーチンの計算結果を確かめるために、次のような工夫をしました。

(1) 電卓で計算してみる。
(2) 文献の計算結果との比較プログラムを作り、結果をテキストやグラフにして比較する。
(3) Excelシート上でも一連の計算を並行して行う。

3次元の天文やグラフィックスの計算は複雑になるんだということを実感したひと月でした。

ところで、和時計の文字盤についてですが、夜が下、昼が上になっています。午(うま)の刻が昼の真ん中です。午前・午後という言葉はこの頃の名残ですね。干支とともに九八七六五四という数字がありますが、江戸幕府が時を知らせる鐘を打った回数だそうです。午後のおやつ(八つ)だけは今も使われています。

さて、これまで1年、64回にわたりSmall Basicによるプログラミングについて学んできましたが、今回をもって休止しようと思います。今後は、少しレベルを上げてJavaによるプログラミングに挑戦してみる予定です。今回作ったSmall BasicのプログラムをJavaに移植しながら、さらにプログラミングやプログラミング言語について比較・探究していきます。

| | コメント (0) | トラックバック (0)