1イニングあたりの得点確率から、Ninning回に増やしたときの得点確率。
前の記事で、Resultというのが1イニングあたりの得点確率。
n項目にはn-1点を取る確率が収まっている。
1イニングで取ることのできる最高得点は決まっているので、Ninning回で取れる得点も決まる。
これをtで用意しておく。
Ninning目でx点取る確率をとか書くと
は、の項数分だけ分岐して
そのイニングは0点だった。
そのイニングは1点だった。
そのイニングは2点だった。
…
そのイニングはn-1点だった。
という感じでガチャガチャ。
library(MCMCpack) Result<- t(t(c(4/10,3/10,2/10,1/10))) Ninning<- 3 t<- rep(0,(length(Result)-1)*Ninning+1) t[c(1:length(Result))]<- Result SM<- mapply(seq,0:((length(Result)-1)*(Ninning-1)),(length(Result)-1):((length(Result)-1)*Ninning)) for(i in 1:(Ninning-1)){ w<- Result%*%t t<- rep(0,(length(Result)-1)*Ninning+1) for(p in 0:max(SM)){ t[p+1]<- sum(w[which(SM==p)]) } } t # 欲しいもの。 sum(t) # 1であることを確認。 cumsum(t) # 0.9999くらいまででいいかな? plot(t,type="s") # あまりにも小さいものが多かったら、t[which(cumsum(t)<0.99999)]とか。
これですんばらすぃと思ったのが、mapply。
mapply(seq,0:3,3:6) [,1] [,2] [,3] [,4] [1,] 0 1 2 3 [2,] 1 2 3 4 [3,] 2 3 4 5 [4,] 3 4 5 6
例えば上のResultを使うと
Result%*%t(Result) 前の回 前の回 前の回 前の回 0点 1点 2点 3点 [,1] [,2] [,3] [,4] 次0点→[1,] 0.16 0.12 0.08 0.04 次1点→[2,] 0.12 0.09 0.06 0.03 次2点→[3,] 0.08 0.06 0.04 0.02 次3点→[4,] 0.04 0.03 0.02 0.01
上のmapplyの値が、前のイニングの得点から次にどう推移したかを表している。
mapply上で一致する値同士をガチャガチャ足し合わせるとよさげ。