用R中的直方图评估预测概率

时间:2017-11-13 18:02:05

标签: r ggplot2 histogram

我有一个包含欧洲足球比赛的数据框,他们的全职结果和主场胜利结果的隐含概率(使用博彩公司赔率)。 看起来如下:

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值的实际获胜次数(所以我可以比较观察到的与预期的) 这是我到目前为止的图表

enter image description here

我只是不确定如何。是考虑在homeprob的每个可能值中运行循环,并在FTR == "H"添加计数?

顺便说一下 - 如果您认为有更好的方法来比较观察到的和预期的,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你有一些不同的选择来比较家庭获胜概率和&#34; H&#34; (我猜测是实际的或预测的胜利)。根据评论中的建议,您可以将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()

enter image description here

我认为最好使用赢率来比较预期值和观察值:

homeprob

enter image description here

您也可以在没有分发的情况下绘制win_rateggplot(df_plot2, aes(x = probcut, y = win_rate)) + geom_col()

file_sd_config

enter image description here

希望这或多或少是你想要的。