T.vs.D <- 7 # 直接対決の残り試合数 T.vs.Rest <- 24 # 他のチームとの残り試合数 D.vs.Rest <- 28 T.won <- 65 # これまでの勝ち数 D.won <- 61 T.lost <- 44 # これまでの負け数 D.lost <- 48 avr.win <- 0.5 # 今後の平均勝率(共通.引き分けはないとする) # 各試合,この確率でランダムに勝ったり負けたりする. ################## # これから両者が T.win および D.win 試合勝ったら, # T の最終勝率は Dを上まわるか? T.over.D <- function(T.win, D.win) { T.rate = (T.won + T.win) / (T.won + T.lost + T.vs.D + T.vs.Rest) D.rate = (D.won + D.win) / (D.won + D.lost + T.vs.D + D.vs.Rest) if (T.rate > D.rate) { return (T) } else { return (F) } } prob.T.beats.D <- 0 # 最終的に T の勝率が D に勝る確率の積算 for (T.win.D in 0:T.vs.D) { # 直接対決での T の勝ち数を 0 から T.vs.D まで動かす p.T.D <- dbinom(T.win.D, T.vs.D, avr.win) # 実現確率 D.win.T <- T.vs.D - T.win.D # 対応する D の勝ち数 for (T.win.Rest in 0:T.vs.Rest) { # 他チームとの試合での T の勝ち数 for (D.win.Rest in 0:D.vs.Rest) { # 他チームとの試合での D の勝ち数 if (T.over.D(T.win.D + T.win.Rest, D.win.T + D.win.Rest) == F) { break # そんなに D に勝たれたらかないません… } else { p <- (p.T.D * # 直接対決の成績の実現確率 dbinom(T.win.Rest, T.vs.Rest, avr.win) * # T がこれだけ勝つ確率 dbinom(D.win.Rest, D.vs.Rest, avr.win)) # D がこれだけ勝つ確率 prob.T.beats.D <- prob.T.beats.D + p # 最終的に勝る確率を増やす } } } } cat("T が D に勝る確率は ", prob.T.beats.D, "\n")