【发布时间】:2014-03-20 05:40:39
【问题描述】:
我在 R 上生成了代码,它预测了 92 支球队的足球联赛赛季的结果
mod3=glm(formula = Score ~ as.factor(Attack) + as.factor(Defence) + as.factor(Home), family = poisson, data = football)
for (i in 1:92){
for (j in 1:92){
if (i!=j){
teamHome=levels(football$Attack)[i]
teamAway=levels(football$Attack)[j]
homeScore=rpois(1,predict.glm(mod3, data.frame(Attack=teamHome,Defence=teamAway,Home="Y "),type="response"))
awayScore=rpois(1,predict.glm(mod3, data.frame(Attack=teamAway,Defence=teamHome,Home="N "),type="response"))
Result= if(homeScore>awayScore){
Result="H"
} else if(homeScore<awayScore){
Result="A"
} else if(homeScore==awayScore){
Result="D"
}
Results<-print(paste(teamHome,homeScore," ",teamAway,awayScore,Result),quote=F)
}
}
}
这会生成一个包含 8000 0r 的列表,以便匹配我想要的。
但是当我这样做时
团队主页
[1] “奥尔德肖特”
我只在我的输出中获得第一支队伍,当我这样做时
levels(teamHome)
NULL
这对我的所有变量都是一样的,因此很难将结果格式化为“联赛表”
我的代码中是否存在任何错误,这意味着我没有获得“teamHome”的完整列表,或者是否有方法可以访问它。
希望我正确解释了这个问题
谢谢
斯蒂芬
【问题讨论】:
-
确保在 Buffalo 中使用
sample(c("win", "loss"), 14, TRUE, c(0, 1)):-( -
每次循环,您都会覆盖存储在对象
teamHome、teamAway、homeScore和awayScore中的值。如果每个团队在您的模拟中互相对战,那么您可以制作一个矩阵score,并将模拟中的两条*Score行替换为score[i, j] <- rpois(1, predict.glm(mod3, data.frame(Attack=teamHome,Defence=teamAway,Home="Y "), type="response"))。我想。 -
矩阵
score应该是 92x92,在模拟之后它应该保存每个主队(行)与每个客队(列)的得分。 -
@jbaums 感谢您的回复,但我不太明白这将如何完成。你能告诉我们你将如何编辑我的代码