arrayと野球確率

MikuHatsune2010-11-15

ヒットを打つ(1種類)確率がpのとき、Nout.num回アウトになるまでに打席に立つバッターの加算確率的な何か。
Vnumは打者人数。
Nout.numは1イニング変わるためのアウトの数。
hitpは0.1、0.2、...0.9とヒットを打つ確率が変わる。ここではシングルヒットのみを考える。
アウト結果は1-hitpだね。

Vnum    <- 9      # the number of batters
Nout.num<- 3      # the number of outs
hitp    <- 9      # hit probability

A<- array(0,c(Vnum,Nout.num,hitp))        # Vnum行Nout列の行列をp個作る。
for(p in 1:hitp){
  for(v in 1:Vnum){
    for(Nout in 1:Nout.num){
# 最後のバッターは必ずアウト。Vnum-1人のうちNout - 1人がアウト。
      A[v,Nout,p]<- choose((v - 1),(Nout - 1))*(0.1*p)^(v - Nout)*(1 - 0.1*p)^(Nout - 1)*(1 - 0.1*p)
    }
  }
}
cumsum.p<- array(0,c(Vnum,Nout.num,hitp))
for(i in 1:hitp){
  cumsum.p[,,i]<- apply(A[,,i],2,cumsum)      # ヒットを打つ確率pのとき、回ってくるバッター数の加算確率。
}
cut.off<- matrix(0,Nout.num,hitp)             # 加算確率がある程度超えたら終了とする。この時の最小打者数。
for(p in 1:hitp){
    for(Nout in 1:Nout.num){
      cut.off[Nout,p]<- min(which(cumsum.p[,Nout,p]>0.99))
    }
}
persp(cut.off,col=2,xlab="Num.batter",ylab="Hit probability",zlab="Cut off",theta=70,phi=10)
library(rgl)
plot3d(row(cut.off),col(cut.off),cut.off,xlab="Num.batter",ylab="Hit probability",zlab="Cut off")

何点取るのはこの確率、とバシッと出したいので、NK手法を考えてみたい。これでは、漸化式を用いて1イニングあたりのそれぞれの得点の確率を出している。が、
・バッターみんな打率同じ
・1イニングあたりの得点なので、xイニングした時の総得点が謎(打者がみんな同じなので、xイニングでk点取る確率はがんばった らどうにかなる。けど今はがんばらない)。
・正規化していないので和が1でない。
ということがあるっぽい。で、漸化式をどれだけ繰り返してランナー配列的なものを用意すればいいかを、こんなことを思い出しつつ網羅的にやろうと思えば

こんな図が描ける。
上は確率0.9999まで加算。
下は確率0.99まで加算。
 
自分で何を書いたか分からなくなる自信がある。

 cut.off
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
  [1,]    3    3    4    6    7   10   13   21   44
  [2,]    4    5    7    8   11   14   20   31   64
  [3,]    5    7    9   11   14   18   25   39   81
  [4,]    7    9   11   13   17   22   30   47   97
  [5,]    8   10   12   15   19   25   35   55  113
  [6,]    9   12   14   18   22   29   40   62  127
  [7,]   11   13   16   20   25   32   44   69  142

例えば、cut.off[6,3]は、アウトカウント6、ヒット確率0.3のときを考えている。
ここの値は14となっているが、これは
1人でチェンジ(これは確率0だ)
2人でチェンジ(これは(ry
.
.
.
6人でチェンジの確率
.
.
.
14人でチェンジの確率
を足し合わせると、0.99を超える、という意味。