我正在建立一个可以预测NFL比赛的模型,并希望进行整个赛季的模拟,并为每个团队产生预期的胜利和失败。
该模型的一部分基于等级,该等级每周根据团队的失败与否而变化。例如,假设比尔和乌鸦各自在星期日比赛开始时的等级为100,而乌鸦获胜后,他们的等级现在增加到120,比尔减少到80。
在运行模拟时,我想更新整个团队的排名,以便更准确地表示一个赛季的表现方式,但不确定如何在循环中包含类似内容。
我在2017赛季的比赛。
full.sim <- NULL
for(i in 1:10000){
nflpredictions$sim.homewin <- with(nflpredictions, rbinom(nrow(nflpredictions), 1, homewinpredict))
nflpredictions$winner <- with(nflpredictions, ifelse(sim.homewin, as.character(HomeTeam), as.character(AwayTeam)))
winningteams <- table(nflpredictions$winner)
projectedwins <- data.frame(Team=names(winningteams), Wins=as.numeric(winningteams))
full.sim <- rbind(full.sim, projectedwins)
}
full.sim <- aggregate(full.sim$Wins, by= list(full.sim$Team), FUN = sum)
full.sim$expectedwins <- full.sim$x / 10000
full.sim$expectedlosses <- 16 - full.sim$expectedwins
在运行2017年的模拟时,这非常有用,因为我已经拥有了整个季节的数据,但是我很难适应模型来模拟2018年。
我的第一个想法是在循环中创建另一个for循环,该循环遍历各行并更新每周的收视率,类似
full.sim <- NULL
for(i in 1:10000){
for(i in 1:nrow(nflpredictions)){
该想法是更新团队评级,然后使用我建立的GLM生成一周的获胜概率,模拟谁获胜,然后继续浏览整个数据框。唯一让我退缩的是不知道如何基于不直接位于上方的行向行添加值。那么,根据团队参加的最后一场比赛的结果,每周更新评分的最简单方法是什么?
数据帧是这样构建的,但显然是在更大范围内构建的:
nflpredictions
Week HomeTeam AwayTeam HomeRating AwayRating HomeProb AwayProb
1 BAL BUF 105 85 .60 .40
1 NE HOU 120 90 .65 .35
2 BUF LAC NA NA NA NA
2 JAX NE NA NA NA NA
我希望我已经解释得足够好了……非常感谢任何输入,谢谢!