【问题标题】:fable from distribution to confidence interval从分布到置信区间的寓言
【发布时间】:2019-07-20 12:33:46
【问题描述】:

我设法使用寓言进行预测,然后得到结果

我能否就如何将此分布更改为 80% 95% 置信区间提供一些指导?谢谢!

你可以使用这里的示例代码来获取分布

result <–USAccDeaths %>% as_tsibble %>% 
  model(arima = ARIMA(log(value) ~ pdq(0,1,1) + PDQ(0,1,1)))%>%
  forecast(h=12)

【问题讨论】:

    标签: r time-series tidyverse


    【解决方案1】:

    hilo() 函数允许您从预测分布中提取置信区间。它可以用于分布向量,也可以用于寓言本身。

    library(tidyverse)
    library(fable)
    result <- as_tsibble(USAccDeaths) %>%
      model(arima = ARIMA(log(value) ~ pdq(0,1,1) + PDQ(0,1,1)))%>%
      forecast(h=12)
    
    result %>% 
      mutate(`80%` = hilo(value, 80))
    #> # A fable: 12 x 5 [1M]
    #> # Key:     .model [1]
    #>    .model    index             value  .mean                    `80%`
    #>    <chr>     <mth>            <dist>  <dbl>                   <hilo>
    #>  1 arima  1979 Jan   t(N(9, 0.0014))  8290. [ 7899.082,  8689.169]80
    #>  2 arima  1979 Feb t(N(8.9, 0.0018))  7453. [ 7055.860,  7859.100]80
    #>  3 arima  1979 Mar   t(N(9, 0.0022))  8276. [ 7789.719,  8774.054]80
    #>  4 arima  1979 Apr t(N(9.1, 0.0025))  8584. [ 8036.304,  9144.752]80
    #>  5 arima  1979 May t(N(9.2, 0.0029))  9499. [ 8849.860, 10166.302]80
    #>  6 arima  1979 Jun t(N(9.2, 0.0033))  9900. [ 9180.375, 10639.833]80
    #>  7 arima  1979 Jul t(N(9.3, 0.0037)) 10988. [10145.473, 11857.038]80
    #>  8 arima  1979 Aug t(N(9.2, 0.0041)) 10132. [ 9315.840, 10974.140]80
    #>  9 arima  1979 Sep t(N(9.1, 0.0045))  9138. [ 8368.585,  9933.124]80
    #> 10 arima  1979 Oct t(N(9.1, 0.0049))  9391. [ 8567.874, 10243.615]80
    #> 11 arima  1979 Nov t(N(9.1, 0.0052))  8863. [ 8056.754,  9699.824]80
    #> 12 arima  1979 Dec t(N(9.1, 0.0056))  9356. [ 8474.732, 10271.739]80
    
    result %>% 
      hilo(level = c(80, 95))
    #> # A tsibble: 12 x 6 [1M]
    #> # Key:       .model [1]
    #>    .model    index             value  .mean                    `80%`
    #>    <chr>     <mth>            <dist>  <dbl>                   <hilo>
    #>  1 arima  1979 Jan   t(N(9, 0.0014))  8290. [ 7899.082,  8689.169]80
    #>  2 arima  1979 Feb t(N(8.9, 0.0018))  7453. [ 7055.860,  7859.100]80
    #>  3 arima  1979 Mar   t(N(9, 0.0022))  8276. [ 7789.719,  8774.054]80
    #>  4 arima  1979 Apr t(N(9.1, 0.0025))  8584. [ 8036.304,  9144.752]80
    #>  5 arima  1979 May t(N(9.2, 0.0029))  9499. [ 8849.860, 10166.302]80
    #>  6 arima  1979 Jun t(N(9.2, 0.0033))  9900. [ 9180.375, 10639.833]80
    #>  7 arima  1979 Jul t(N(9.3, 0.0037)) 10988. [10145.473, 11857.038]80
    #>  8 arima  1979 Aug t(N(9.2, 0.0041)) 10132. [ 9315.840, 10974.140]80
    #>  9 arima  1979 Sep t(N(9.1, 0.0045))  9138. [ 8368.585,  9933.124]80
    #> 10 arima  1979 Oct t(N(9.1, 0.0049))  9391. [ 8567.874, 10243.615]80
    #> 11 arima  1979 Nov t(N(9.1, 0.0052))  8863. [ 8056.754,  9699.824]80
    #> 12 arima  1979 Dec t(N(9.1, 0.0056))  9356. [ 8474.732, 10271.739]80
    #> # … with 1 more variable: `95%` <hilo>
    

    要从&lt;hilo&gt; 对象中提取数值,您可以使用unpack_hilo() 函数。

    result %>% 
      hilo(level = c(80, 95)) %>% 
      unpack_hilo("80%")
    #> # A tsibble: 12 x 7 [1M]
    #> # Key:       .model [1]
    #>    .model    index             value  .mean `80%_lower` `80%_upper`
    #>    <chr>     <mth>            <dist>  <dbl>       <dbl>       <dbl>
    #>  1 arima  1979 Jan   t(N(9, 0.0014))  8290.       7899.       8689.
    #>  2 arima  1979 Feb t(N(8.9, 0.0018))  7453.       7056.       7859.
    #>  3 arima  1979 Mar   t(N(9, 0.0022))  8276.       7790.       8774.
    #>  4 arima  1979 Apr t(N(9.1, 0.0025))  8584.       8036.       9145.
    #>  5 arima  1979 May t(N(9.2, 0.0029))  9499.       8850.      10166.
    #>  6 arima  1979 Jun t(N(9.2, 0.0033))  9900.       9180.      10640.
    #>  7 arima  1979 Jul t(N(9.3, 0.0037)) 10988.      10145.      11857.
    #>  8 arima  1979 Aug t(N(9.2, 0.0041)) 10132.       9316.      10974.
    #>  9 arima  1979 Sep t(N(9.1, 0.0045))  9138.       8369.       9933.
    #> 10 arima  1979 Oct t(N(9.1, 0.0049))  9391.       8568.      10244.
    #> 11 arima  1979 Nov t(N(9.1, 0.0052))  8863.       8057.       9700.
    #> 12 arima  1979 Dec t(N(9.1, 0.0056))  9356.       8475.      10272.
    #> # … with 1 more variable: `95%` <hilo>
    

    reprex package (v0.3.0) 于 2020 年 4 月 8 日创建

    【讨论】:

    • 嗨米切尔,感谢您的意见。正在尝试第二种方式。但仍然。我怎样才能从 框架中得到两个数字 7899.082 和 8689.169?我需要使用这两个数字来画线或将结果分两列推送到数据库中。谢谢!
    • 能够使用 summary(level=80) 来获取 对象。但无法以数据框格式获取数字。创建一个函数。 (unpack_hilo % unnest() %>% t() %>% 矩阵(nrow = 3) %>% t() %>% as.data.frame() %>% rename(lwr = V1, upr = V2, level = V3) } ; 使用 t_p % summary(level=85) %>% as_tibble() %>% select('85%') %>% unpack_hilo () ) 能够获取信息,但它们是“列表”格式,无法将它们更改为数据框,无法将其保存在 csv 中
    • 这很好用,谢谢!我以前使用 mutate(lower_95 = map_dbl(95%, ~.[[1]]), upper_95 = map_dbl(95%,~.[[2]]) 来获得下限和上限,并且随着最近的包更新,此代码不再有效。(也许它从来没有打算)
    • 现在获取上限值和下限值更加容易,您可以使用$ 提取lowerupperlevel(带有代码补全提示)。例如,fbl$hilo$upper 将从fblhilo 列绑定upper
    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2011-05-28
    • 2015-10-07
    • 2017-08-16
    • 1970-01-01
    • 2012-05-14
    • 2016-04-02
    相关资源
    最近更新 更多