总结在 R 或 Python 中赢得最后 N 场比赛的 X 场的所有方式

Sum all ways to win X of last N games in R or Python

我一直在 Excel 中手动执行此操作,但想要一种缩放它的方法,我认为 R 或 Python 是我最好的选择。也就是说,我不知道从哪里开始。这是 Excel 中 table 的示例:

PROB_WIN 和 PROB_LOSE 是球队在该场比赛中获胜或失败的概率。 T_WINZERO 列是球队在前三场比赛中获胜的概率 none,T_WINONE 是他们在前三场比赛中获胜的概率,依此类推。例如,[中的第五行=26=] 就是 .493 * .466 * .484(等于 .111)。可以想象,一旦他们变成了几乎无数的获胜方式,例如,一支球队在过去 15 场比赛中有 7 场获胜(准确地说是 6,435 种方式),那么这将是多么困难。

我想做的是能够使用这些新概率为球队的最后 N 场比赛自动创建列(例如,最后 3 场中的 0 场、最后 3 场中的 1 场、最后 3 场中的 2 场、最后 3 场中的 3 场3 如上所示,但对于任意数量的游戏)使用列 PROB_WIN 和 PROB_LOSE 来这样做。

在 Excel 中,我将最近 N 场比赛中 X 场获胜的所有方式的所有概率相加,然后将公式向下拖动,以便我在 R 或 Python.

在此先感谢您的帮助!

这是一种方法。

我没有转录你的图片,而是创建了一组相似但可重现的获胜概率(请注意,我们不需要一列失败概率,因为这些只是获胜概率的补充)

set.seed(2)

df <- data.frame(GAME = 1:10, PROB_WIN = runif(10, 0.45, 0.55))

df
#>    GAME  PROB_WIN
#> 1     1 0.4684882
#> 2     2 0.5202374
#> 3     3 0.5073326
#> 4     4 0.4668052
#> 5     5 0.5443839
#> 6     6 0.5443475
#> 7     7 0.4629159
#> 8     8 0.5333449
#> 9     9 0.4968019
#> 10   10 0.5049984

我们可以编写一个函数,它采用获胜概率向量和 returns n 获胜的概率,同时考虑所有可能的游戏顺序,如下所示:

won_n_games <- function(probs, n_wins) {
  
  wins <- asplit(combn(length(probs), n_wins), 2)
  losses <- lapply(wins, function(x) setdiff(seq_along(probs), x))
  sum(unlist(Map(function(wins, losses) {
    prod(probs[wins]) * prod(1 - probs[losses])
    },
      wins = wins, losses = losses)))
}

我们可以在另一个函数中使用它,该函数将创建一列赢得最后 n 场比赛的给定数量的概率,如下所示:

make_column <- function(probs, n, wins) {
  
  result <- rep(NA_real_, length(probs))
  for(i in (n + 1):length(probs)) {
    result[i] <- won_n_games(probs[(i - n):(i - 1)], wins)
  }
  result
}

因此,要在您的数据框中创建列,我们可以这样做:

df$WIN_0_3 <- make_column(df$PROB_WIN, n = 3, wins = 0)
df$WIN_1_3 <- make_column(df$PROB_WIN, n = 3, wins = 1)
df$WIN_2_3 <- make_column(df$PROB_WIN, n = 3, wins = 2)
df$WIN_3_3 <- make_column(df$PROB_WIN, n = 3, wins = 3)

导致

df
#>    GAME  PROB_WIN   WIN_0_3   WIN_1_3   WIN_2_3   WIN_3_3
#> 1     1 0.4684882        NA        NA        NA        NA
#> 2     2 0.5202374        NA        NA        NA        NA
#> 3     3 0.5073326        NA        NA        NA        NA
#> 4     4 0.4668052 0.1256299 0.3763316 0.3743888 0.1236497
#> 5     5 0.5443839 0.1260277 0.3767748 0.3739920 0.1232055
#> 6     6 0.5443475 0.1196847 0.3710328 0.3803585 0.1289240
#> 7     7 0.4629159 0.1106926 0.3614084 0.3895687 0.1383303
#> 8     8 0.5333449 0.1115001 0.3625303 0.3887919 0.1371777
#> 9     9 0.4968019 0.1142016 0.3653846 0.3860178 0.1343960
#> 10   10 0.5049984 0.1261181 0.3773585 0.3738661 0.1226573

reprex package (v2.0.1)

于 2022-03-19 创建