r - 在 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
我希望我解释得足够好......任何输入都非常感谢,谢谢!
解决方案
推荐阅读
- python - 如何获得乌龟应该移动的角度?
- python - Sublime Text 3 Python3 构建不起作用?
- apache-kafka - 在 nifi 集群优化上使用KafkaRecord
- macos - 使用 dtrace、lldb 或 gdb 查找哪个文件或代码行负责 stdout 或 stderr 中的一行输出?
- angular - 浏览器列表:caniuse-lite 已过时 - Microsoft.AspNetCore.SpaServices[0]
- flutter - 显示材质对话框,未找到材质本地化
- python - 有没有办法链接生成器表达式,以便下游条件防止评估未经检查的上游元素?
- flutter - 在 FIutter 中:登录和注册都有一个屏幕,当我在它们之间切换时,我未能使卡的高度灵活
- flutter - 如何在颤动中清除listviewbuilder中的对象?
- python - 如何在python中编写复杂的排序?