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

用R中的直方图估计预测概率,r,ggplot2,histogram,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

我有一个包含欧洲足球比赛的数据框,它们的全场比赛结果和主场获胜结果的隐含概率(使用赌注赔率)。 情况如下:

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”
时添加计数

顺便说一句,请让我知道,如果你认为有更好的方法来比较观察和预期


谢谢

关于如何比较主场获胜概率和“H”(我猜是实际获胜还是预测获胜),我想你有几种不同的选择。正如评论中所建议的,您可以将
homeprob
切割成bucket,并使用
dplyr
进行聚合统计。然后为wins使用颜色或简单地绘制
homeprob
vs wins

因为有几种方法可以做到这一点,我将给出一些选项和一个可复制的示例

以下是一些与您类似的虚构数据:

# 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))


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

我想你有一些不同的选择来比较主场获胜概率和“H”(我猜这是实际的或预测的胜利)。正如评论中所建议的,您可以将
homeprob
切割成bucket,并使用
dplyr
进行聚合统计。然后为wins使用颜色或简单地绘制
homeprob
vs wins

因为有几种方法可以做到这一点,我将给出一些选项和一个可复制的示例

以下是一些与您类似的虚构数据:

# 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))


希望这或多或少就是您想要的。

您是否考虑过使用
cut
homeprob
变量存储到离散的间隔中?然后,您可以使用dplyr命令按分组并计算主赢款,以及第三种编码,如实际赢款的颜色(尽管必须是条形图)。谢谢您的评论!我用过cut,现在我有20个小组。还使用组值向数据帧添加了一列(例如(0.414-0.449))但我不确定如何构建循环来计算每组的homewins数。尝试使用for循环但没有成功您是否考虑过使用
cut
homeprob
变量存储到离散的间隔中?然后您可以使用dplyr命令分组并计算homewins数,以及第三种编码,如a的颜色真正的胜利(尽管它必须是一个条形图)。谢谢你的评论!我使用了cut,现在我有20个组。还使用组值(例如(0.414-0.449))向数据框添加了一列但我不知道如何构建循环来计算每组的家庭获胜次数。尝试使用for循环但没有成功很高兴我能帮忙!很高兴我能帮忙!
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()
ggplot(df_plot2, aes(x = probcut, y = win_rate)) +
  geom_col()