Bradley-Terry Model

2人のプレイヤーあるいは2チーム間の対戦成績から強さの推定を行う統計モデル Bradley-Terry ModelをExcel VBAで実現しました。Excel 97 for Windowsを使用していますが、コードそのものはExcel 95 for Windows以上, Excel 6.0 for Mac以上で動作します。Excel 95またはExcel 6.0をご使用の方は「Excel VBAコード版」をダウンロードしてください。

[ダウンロード]

Excelのマクロの登録・使用法をご存じの方は「Excel VBAコード版」をダウンロードしてください。ご存じない方は「Excelファイル版」をダウンロードしてください。

[注意事項]

[モデルの前提]

(1) 2人あるいは2チーム間の対戦成績をデータとする
(2) 順位をつけたいすべてのチームの間に、強さの線形順序が成り立つ

線形順序というのは、わかりやすくいうと、全員を強さの順に一列に並べられるということです。ですから、AがBより強く、BがCより強く、CがAより強いとすると、線形順序になりませんからこのモデルは適切ではなくなります。3すくみが起こると、モデルは適切ではないわけです。もっとわかりやすく言えば、お互いかなり強いもの同士でも「相性」があって、「苦手」な相手が存在するような状況ですと、こうした3すくみが起こりやすいと思います。

ところで、こうした3すくみと実力伯仲とは意味がちがうことも理解していただく必要があります。例えば、A, B, C3人の強さがそれぞれ50, 51,52だと、一応線形順序で順位が付けられます。しかし、もっと対戦数を増やせば、3人の強さは同じになる可能性が高いですね。これが実力伯仲の状況です。いま得られているサンプルでは強さに線形順序は成り立つが、統計的に推測した母集団のレベルでは強さに優劣を付けられないという状況です。

要約すると、線形順序が成り立っているか否かの検定でモデルが棄却されればこれ以上の分析はできません。モデルが棄却されないで、かつ実力伯仲であるという結果なら、推定した強さの順序には意味が無く、すべてのプレイヤーの実力は等しいという結果になります。線形順序が成り立ち、かつ実力伯仲でない場合に、推定した強さの順位に意味があります。

プログラムは、線形順序が成り立っているか否かの検定および実力伯仲であるか否かの検定を行いますので、その結果をみてから強さの順位をみるようにしてください。

[データ入力]

(入力例)
ちょっと古い野球のデータですが、以下は広島は巨人に11回、阪神に11回、大洋に13回、中日に19回、ヤクルトに14回勝利したことを示しています。

[使用法]

「Excelファイル版」ご使用の方

  1. ダウンロードしたExcelファイルをダブルクリックして開いた後「マクロを有効にする」をクリックしてください。
  2. 分析したいデータを上の[データ入力]を参考にしてExcelのSheet1に入力してください。
  3. それからてExcelのSheet1上にある「RUN」ボタンをクリックすればマクロが起動します。
  4. つぎにマクロが参加人数を聞いてきますから、参加人数を入力し「OK」ボタンをクリックしてください。
  5. すると結果をデータを入力したExcelのSheet1に出力します。

「Excel VBAコード版」ご使用の方

  1. まずExcelのメニューから「ツール」--->「マクロ」--->「Visual Basic editor」の順に選び、それからVisual Basic editorのメニューから「表示」--->「コード」の順に選び、そこにVBAコードをコピー・ペーストしてください。
  2. つぎに、ExcelのSheet1に戻って分析したいデータを上の[データ入力]を参考にして入力てください。
  3. 「ツール」--->「マクロ」--->「実行」でマクロが起動します。
  4. つぎにマクロが参加人数を聞いてきますから、参加人数を入力し「OK」ボタンをクリックしてください。
  5. すると結果をデータを入力したExcelのSheet1に出力します。

[注]

  1. 「Excelファイル版」ご使用の方で、「RUN」ボタンを移動したい方は、「表示」--->「ツールバー」--->「Visual Basic」の順に選び、現れたVisual Basicのツールバーの右端の「デザインモード」をクリックします。これでマウスでドラッグすれば「RUN」ボタンを移動できます。移動が終了したら、もう一度「デザインモード」をクリックします。これで再び「RUN」が機能します。
  2. プログラムは最大10名までデータを扱えるようになっています。それ以上の人数を取り扱いたい場合は、「Visual Basic editor」でコードを開いた後、「編集」--->「置換」で「検索する文字列」を10に、「置換後の文字列」を希望する人数にして「すべて置換」をクリックしてください。

[結果]

検定
線形順序が成り立っているか否かの検定と実力伯仲であるか否かの検定の統計量と検定結果がデータのすぐ下に出力されます。

(例)
さきほどの野球のデータの場合、「モデル」欄が「有効」で「強さ」欄が「均等」なので、線形順序は成り立っているが実力伯仲なので、以下の強さの順位には統計的には差がないことになります。

順位
検定結果のすぐ下に、各プレイヤーの「名前」「勝数」「敗数」「勝率」「順位(1)」「強さ」「順位(2)」が出力されます。(勝率) = (勝数) / ( (勝数) + (敗数) )です。「順位(1)」はこの勝率にもとづく順位です。「強さ」はBradley-Terry Modelにもとづき最尤法でもとめた推定値です。この強さは相対的な順位のみに意味があり、絶対的な値の大きさには意味がありません。「順位(2)」はこの「強さ」にもとづく順位です。一般に、すべてのプレイヤーの対戦数が等しくない限り、「順位(1)」と「順位(2)」は一致しません。その場合、「順位(2)」を採用してください。

(例)
さきほどの野球のデータの場合の結果です。実力伯仲という結果なので、本当は強さに差がないのですが、とりあえずそのことを無視して眺めてみます。すると、大洋と中日の順位が「順位(1)」と「順位(2)」とでは違うことがわかります。

[参考文献]

竹内啓・藤野和建『スポーツの数理科学』共立出版
広津千尋『離散データ解析』教育出版
Alan Agresti (1996). An Introduction to Categorical Data Analysis, John Wiley and Sons.