r - 如何计算 DRPS(离散秩概率分数)

标签 r probability distribution forecasting forecast

我正在复制论文 Forecasting the intermittent demand for slow-moving inventories: A modelling approach 中的评分规则
论文对评分规则的描述如下:

enter image description here

这是我的尝试

y <- rpois(n = 100, lambda = 10) # forecasted distribution
x <- 10 # actual value

drps_score <- function(x = value, y = q){
  # x = actual value (single observation); y = quantile forecasted value (vector)
  Fy = ecdf(y) # cdf function
  indicator <- ifelse(y - x > 0, 1, 0) # Heaviside
  score <- sum((indicator - Fy(y))^2)
  return(score)
}

> drps_score(x = x, y = y)
[1] 53.028
这似乎工作得很好,直到我提供如下的 0 向量:
y <- rep(x = 0, 100)
> drps_score(x = x, y = y)
[1] 0
我知道他们在本文中使用的一种方法是 0 预测,他们的结果并未显示 DRPS 为 0。这让我觉得计算是关闭的。

最佳答案

我认为这里有几个问题在起作用。
首先,我认为您没有在评分函数中计算正确的总和。该分数要求您对 y 的所有可能值(即所有正整数)而不是 y 的所有预测样本进行求和。
其次,我不认为上面的定义给出了想要的结果,当 y=x 时\hat F (y) 定义为 0 那么对于点质量为真实值的预测,你不会得到零分. (是的,我是说来源是“错误的”,或者至少有一个没有给出预期结果的定义。)这是一个重新制定的函数,我认为它可以解决这两个问题:

x <- 10 # actual value

drps_score <- function(x = value, y = q, nsum=100){
    # x = actual value (single observation); y = quantile forecasted value (vector)
    Fy = ecdf(y) # cdf function
    ysum <- 0:nsum
    indicator <- ifelse(ysum - x >= 0, 1, 0) # Heaviside
    score <- sum((indicator - Fy(ysum))^2)
    return(score)
}



> drps_score(x = x, y = rpois(n = 1000, lambda = 8))
[1] 1.248676
> drps_score(x = x, y = rpois(n = 1000, lambda = 9))
[1] 0.878183
> drps_score(x = x, y = rpois(n = 1000, lambda = 10))
[1] 0.692667
> drps_score(x = x, y = rep(10, 100))
[1] 0
> drps_score(x = x, y = rpois(n = 1000, lambda = 11))
[1] 0.883333
上面显示以真值 (lambda=10) 为中心的分布对于不是点质量的分布的得分最低。

关于r - 如何计算 DRPS(离散秩概率分数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64285194/

相关文章:

networking - 这个哈夫曼表是如何创建的?

c++ - 如果删除一个对象,究竟会发生什么? (gcc)(当双删除崩溃时?)

计算大数的生日概率

r - 将列添加到 R 摘要

r - 在ggplot中拆分y轴

matlab - 提取分布值 Matlab

numpy - 如何获得 0 和 1 之间的 sigmoid 函数以获得正确答案的概率?

ruby - 将 Ruby 与应用程序一起分发?

r - 在 Shiny App 中选择选项卡时打开 'modalDialog' 对话框

R:一起绘制箱线图和函数图