首页 > 解决方案 > 运行模拟结果接近,但在某些区域显着偏离

问题描述

所以我正在模拟棒球队的胜利。我有一个公式可以告诉我客队和主队的赔率。看起来像这样(MLB_3 是 df 的名称)

 X2021 Away_Team Home_Team Away_Team_Odds Home_Team_Odds
1 1-Apr Blue.Jays   Yankees       46.85205       53.14795
2 3-Apr Blue.Jays   Yankees       46.85205       53.14795
3 4-Apr Blue.Jays   Yankees       46.85205       53.14795
4 5-Apr   Orioles   Yankees       33.63985       66.36015
5 6-Apr   Orioles   Yankees       33.63985       66.36015
6 7-Apr   Orioles   Yankees       33.63985       66.36015

所以我通过添加来预测获胜者

MLB_3$RN <- runif(2430,0,100)

MLB_3$Winner <- ifelse(MLB_3$RN > MLB_3$Away_Team_Odds, yes = MLB_3$Home_Team, no = MLB_3$Away_Team)

游戏总数为 2430。它们都是不同的,我相信时间表是正确的。

我想模拟 25000 次并获得每支球队的平均获胜次数

所以我跑了这个

set.seed(100)

Sims <- replicate(n = 25000, expr = sample(MLB_3$Winner, 2340)) 
Sims <- as.data.frame(Sims)

Proj <- Sims %>% 
  gather("key", "value", V1:V25000) %>% 
  group_by(value) %>% 
  summarise(Wins = round(n() / 25000,1)) %>% 
  arrange(-Wins)

它给了我想要的东西,但根据他们的分数和赔率,数据没有意义。我预计会与我最初的想法有所不同,但就赔率而言,排名第 3 的球队获得第 6 多胜,而排名第 6 的球队获得第 16 多胜。

所以我想把代码放出来看看是否有人知道我为什么会得到这些结果,或者我是否错过了代码中的某些内容。

任何帮助表示赞赏

标签: r

解决方案


您可以通过创建函数来创建模拟。

sim <- function(MLB_3) {
  MLB_3$RN <- runif(nrow(MLB_3),0,100)
  transform(MLB_3, Winner = ifelse(RN > Away_Team_Odds, Home_Team, Away_Team))
}

并使用replicate它重复n多次并执行计算。

n <- 25000
replicate(n, sim(MLB_3), simplify = FALSE) %>%
  dplyr::bind_rows(.id = 'sim_number') -> data

data

推荐阅读