在R中的仿真中更新值

时间:2018-09-11 20:03:55

标签: r

我正在建立一个可以预测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

我希望我已经解释得足够好了……非常感谢任何输入,谢谢!

0 个答案:

没有答案