一対比較法を利用すると2者の比較から全体の重要度や実力を数字で表現できる。
一対比較法を使った分析の手順は以下のようにすすめる。
- データを取得する。
一対比較法のデータは複数の項目から2者を選び比較した結果となる。比較は優劣の対立でもよいし、点数による差でもよい。例えばサッカーや野球のリーグ戦の結果は点数による差となっている。相撲の結果は優劣の比較になる。 - データを回帰分析用に変換する。
取得したデータを質的データを回帰分析するときの手順と同じようにダミー変数を使ってテーブルに変換する。 - 自由度の調整
いづれかの列を削除して自由度を調整する。 - 回帰分析を実行する。
- モデルにデータを入力して実力差を比較する。また偏差値で表現をしてわかりやすくする。
インターネット上で利用できるリーグ戦の結果を利用して一対比較法で分析してみる。
第48回関西サッカーリーグ Division1の結果が下記のリンクから取得できる。
http://football-system.jp/fss/pub_matrix.php?lid=DicyXwJKc6o=
データを回帰分析用に変換する。以下のようなった。
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)
グラフは下記を参考にした。
偏差値を計算してみた。
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