野球の続き。
今まで推移行列や漸化式を使って、打者にある打撃確率を与えたらk点を確率的に何点取る、というのをやってきた。
ただ、これでは1チーム中に複数の打者がいるときの得点が出せない。いまのところいいやり方が思いついていないし。
例えば9人チームなら、あるイニングの先頭打者は9通りあって、その9通り考えたときの1イニングの得点の平均を、1イニングあたりに取りうる得点にしてしまう?
ただそれだと、1イニング3アウトで計9イニング試合として、先頭打者になる確率は9人一緒なの?
的な感じがしたのでちょっと保留。
まあ、初心に戻って(?)、シミュレーションでデータを生成しよう。
ルールとしては
・1チーム9人
・game回(ここでは1000回としておく)1チームだけでシミュレーションして、データを格納しておく
・Noutは3にしておこう
・格納したデータの1項目、2項目、…、game項目と比較する
・勝ち、分け、負けをカウントする
1試合の得点シミュレーションはこのリンクから。
リンクの下のほうに阪神のデータを入力してあった。これ使おう。
game<- 1000 D1<- rep(0,game) D2<- rep(0,game) batter<- matrix(c(0.7,0.1,0.1,0.05,0.05),9,5,byrow=T) #batter<- matrix(c(colMeans(Tigars)),9,5,byrow=T) for(i in 1:game){ D1[i]<- one.game.score(batter,3) } library(MCMCpack) #r<- rdirichlet(1,c(1,1,1,1))*0.3 #r #batter<- matrix(c(0.7,r),9,5,byrow=T) batter<- Tigars for(i in 1:game){ D2[i]<- one.game.score(batter,3) } par(mfcol=c(1,2)) hist(D1,breaks=0:max(D1),col=5,freq=F) hist(D2,breaks=0:max(D2),col=5,freq=F)
勝分負の数値を手に入れたとして、どう評価しよう〜と思って、とりあえず勝敗の差を試合数(引き分けを除く)で割ってみようかと。
5%超えていたら勝ちやすい(負けやすい)傾向にある、とかにしてみようか。
wdl<- c(sum(D1>D2),sum(D1==D2),sum(D1<D2)) wdl<- c(wdl,(wdl[1]-wdl[3])/(game-wdl[2])) names(wdl)<- c("win","draw","lose","win.prob") wdl
で、何が勝敗を分けたか、的なものを、ここらあたりの数値で評価…できるのかなあ?
library(e1071) analy<- function(vec){ DATA<- rep(0,5) DATA[1]<- mean(vec) DATA[2]<- sd(vec) DATA[3]<- median(vec) DATA[4]<- skewness(vec) DATA[5]<- kurtosis(vec) names(DATA)<- c("mean","sd","median","skewness","kurtosis") return(DATA) } analy(D1) analy(D2)
いろいろ用意したところで、プログラム実行。
D1は、みんな打撃確率が0.7,0.1,0.1,0.05,0.05(初項からアウト、シングル、…)
D2は、2010年終了時の阪神。
wdl win draw lose win.prob 691 75 234 0.4940541 analy(D1) mean sd median skewness kurtosis 5.4990000 3.3312304 5.0000000 0.7260805 0.5107385 analy(D2) mean sd median skewness kurtosis 3.024000 2.545172 3.000000 1.075492 1.488678