我有一个包含欧洲足球比赛的数据框,他们的全职结果和主场胜利结果的隐含概率(使用博彩公司赔率)。 看起来如下:
Div Date HomeTeam AwayTeam FTR PSH PSD PSA PSCH PSCD PSCA homeprob
F2 28/07/17 Brest Chateauroux A 2.01 3.07 4.92 1.91 3.27 5.13 0.50
F2 28/07/17 Nimes Reims A 2.33 3.05 3.73 2.34 3.12 3.62 0.43
...
所以我创建了一个直方图,其中x轴为隐含概率,y轴为频率。现在我想在同一个图上绘制每个homeprob值的实际获胜次数(所以我可以比较观察到的与预期的) 这是我到目前为止的图表
我只是不确定如何。是考虑在homeprob
的每个可能值中运行循环,并在FTR == "H"
添加计数?
谢谢!
答案 0 :(得分:0)
我认为你有一些不同的选择来比较家庭获胜概率和" H" (我猜测是实际的或预测的胜利)。根据评论中的建议,您可以将dplyr
切换为存储桶,并使用homeprob
进行汇总统计。然后使用颜色获胜或简单地绘制# random normal data
randn_data <- rnorm(15000, 0.5, .05)
df <- data.frame(homeprob = randn_data)
# random uniform from 0 to 1
df$randunif <- runif(nrow(df))
# new feature is "H" if random uniform is less than homeprob
df$ftr <- ifelse(df$randunif < df$homeprob, "H", "A")
df$probcut <- cut(df$homeprob, seq(0.2, 0.8, 0.05))
vs wins。
由于有几种方法可以做到,我会给出一些选择和可重复的例子。
以下是一些类似于你的数据:
library(dplyr)
df_plot1 <- df %>%
group_by(probcut) %>%
summarise(hprob_counts = n(), wins = sum(ftr == "H"))
# wins as color
library(ggplot2)
ggplot(df_plot1, aes(x = probcut, y = hprob_counts, fill = wins)) +
geom_col() +
scale_y_sqrt()
现在你可以使用颜色来获得总胜利,虽然我认为这不是最好的选择,因为你的数据是正常的,并且频率将更高的平均值:
df_plot2 <- df %>%
group_by(probcut) %>%
summarise(hprob_counts = n(), wins = sum(ftr == "H")) %>%
mutate(win_rate = wins / hprob_counts)
ggplot(df_plot2, aes(x = probcut, y = hprob_counts, fill = win_rate)) +
geom_col() +
scale_y_sqrt()
我认为最好使用赢率来比较预期值和观察值:
homeprob
您也可以在没有分发的情况下绘制win_rate
和ggplot(df_plot2, aes(x = probcut, y = win_rate)) +
geom_col()
:
file_sd_config
希望这或多或少是你想要的。