科学の箱

科学・IT・登山の話題

R

一対比較法によるリーグ戦の分析

投稿日:

一対比較法を利用すると2者の比較から全体の重要度や実力を数字で表現できる。

一対比較法を使った分析の手順は以下のようにすすめる。

  1. データを取得する。
    一対比較法のデータは複数の項目から2者を選び比較した結果となる。比較は優劣の対立でもよいし、点数による差でもよい。例えばサッカーや野球のリーグ戦の結果は点数による差となっている。相撲の結果は優劣の比較になる。
  2. データを回帰分析用に変換する。
    取得したデータを質的データを回帰分析するときの手順と同じようにダミー変数を使ってテーブルに変換する。
  3. 自由度の調整
    いづれかの列を削除して自由度を調整する。
  4. 回帰分析を実行する。
  5. モデルにデータを入力して実力差を比較する。また偏差値で表現をしてわかりやすくする。

インターネット上で利用できるリーグ戦の結果を利用して一対比較法で分析してみる。

第48回関西サッカーリーグ Division1の結果が下記のリンクから取得できる。

http://football-system.jp/fss/pub_matrix.php?lid=DicyXwJKc6o=

result

 

データを回帰分析用に変換する。以下のようなった。

FCO AMI RAY BAN NARA ARU LARA AI SCORE
1 -1 5
1 -1 6
1 -1 0
1 -1 2
1 -1 7
1 -1 6
1 -1 5
-1 1 1
1 -1 1
1 -1 4
1 -1 9
1 -1 4
1 -1 8
1 -1 0
1 -1 7
1 -1 1
1 -1 3
1 -1 4
1 -1 1
1 -1 2
1 -1 3
1 -1 6
1 -1 1
1 -1 1
1 -1 1
-1 1 1
1 -1 1
1 -1 0

自由度を調整する。AI列を削除した。

FCO AMI RAY BAN NARA ARU LARA SCORE
1 -1 5
1 -1 6
1 -1 0
1 -1 2
1 -1 7
1 -1 6
1 5
-1 1 1
1 -1 1
1 -1 4
1 -1 9
1 -1 4
1 8
1 -1 0
1 -1 7
1 -1 1
1 -1 3
1 4
1 -1 1
1 -1 2
1 -1 3
1 6
1 -1 1
1 -1 1
1 1
-1 1 1
1 1
1 0

Rにデータを読み込む。

kansai_fc_div <- read.csv("kansai_fc_div.csv")
kansai_fc_div

   FCO AMI RAY BAN NARA ARU LARA SCORE
1    1  -1  NA  NA   NA  NA   NA     5
2    1  NA  -1  NA   NA  NA   NA     6
3    1  NA  NA  -1   NA  NA   NA     0
4    1  NA  NA  NA   -1  NA   NA     2
5    1  NA  NA  NA   NA  -1   NA     7
6    1  NA  NA  NA   NA  NA   -1     6

NAがある。このままでは回帰分析を実行できないので0に変換する。

kansai_fc_div[is.na(kansai_fc_div)] <- 0
kansai_fc_div
   FCO AMI RAY BAN NARA ARU LARA SCORE
1    1  -1   0   0    0   0    0     5
2    1   0  -1   0    0   0    0     6
3    1   0   0  -1    0   0    0     0
4    1   0   0   0   -1   0    0     2
5    1   0   0   0    0  -1    0     7
6    1   0   0   0    0   0   -1     6
7    1   0   0   0    0   0    0     5
8    0  -1   1   0    0   0    0     1
9    0   1   0  -1    0   0    0     1

回帰分析を実行する。

result <- lm(SCORE ~ FCO + AMI + RAY + BAN + NARA + ARU + LARA, data=kansai_fc_div)
summary(result)

以下の結果になった。

Call:
lm(formula = SCORE ~ FCO + AMI + RAY + BAN + NARA + ARU + LARA, 
    data = kansai_fc_div)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2500 -1.0625 -0.2857  1.1652  4.1607 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.8571     0.8696   0.986  0.33604   
FCO           5.5000     1.9076   2.883  0.00919 **
AMI           4.5536     1.5826   2.877  0.00931 **
RAY           3.0893     1.7391   1.776  0.09089 . 
BAN           3.6429     1.4420   2.526  0.02007 * 
NARA          1.1071     1.3223   0.837  0.41233   
ARU           0.4107     1.1707   0.351  0.72938   
LARA          0.6964     1.2297   0.566  0.57747   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 2.301 on 20 degrees of freedom
Multiple R-squared: 0.4563,     Adjusted R-squared: 0.2661 
F-statistic: 2.398 on 7 and 20 DF,  p-value: 0.05908

チームの実力を比較してみる。結果はcoefficientから取得できる。

score <- coefficients(result)
score <- score[-1]
plot(score,rep(0, length(score)), pch=19, xlab="", main="", , xaxt="n",
                xlim=range(pretty(score)), ylab="", yaxt="n", ylim=c(0,0.2),
                bty="n", xpd=TRUE)
text(score, 0.0, names(score), pos=3, cex=0.5)
axis(1, pos=0)

score

グラフは下記を参考にした。

サーストンの一対比較法

偏差値を計算してみた。

tosd <- function(x){
 x_mean <- mean(x);
 x_sd <- sqrt(mean((x - x_mean)^2));
 x_z <- (x - x_mean)/x_sd;
 print(x_z);
}

tosd(score)*10+50

結果は以下である。

> tosd(score)*10+50
     FCO      AMI      RAY      BAN     NARA      ARU     LARA 
65.01111 59.91118 52.02073 55.00370 41.33975 37.58697 39.12657 

メタ情報

inarticle



メタ情報

inarticle



-R
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

oneway.test, aov, anovaの違い-2

さてoneway.test, aov, anovaの違いをもとにしてそれぞれの関数について調べてみる。 機能 advantage disadvantage oneway.test 分散分析 等分散を仮 …

no image

diag

3×3の対角行列を生成する > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 3×3の対角行列を生成し、対角 …

no image

Rでのランダムデータ作成 – 上級編

平均が異なるランダムデータを作成する > x <- rnorm(12, mean=rep(1:3,each=4), sd=0.2) > y <- rnorm(12, mean= …

no image

Rで集計をする

バイナリ ifelse()を利用する ファクタ factor()を利用する カテゴリ集計 cut()関数を利用する クロス集計 Rではクロス集計表を簡単に作れる。クロス集計表はtable()を利用する …

no image

ジニ係数(再掲)

ジニ係数について修正した。とりあえずコード。 revenue<-read.csv(file=”data.csv”, head=TRUE) revenue$TotalRevenues_n < …

2014年5月
« 4月   6月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

side bar top



アーカイブ

カテゴリー