使用寓言包,预测风扇不会在实际行的末尾开始

问题描述

我已使用R中的fable包构建了以下的扇形图。我想知道是否有人对我的预测扇形的起源点不是来自实际线(起点的外部点)提出了建议距离实际线还远吗?是建模错误还是我无法避免的数据问题?

这是我的数据集的可复制内容

structure(list(Date = structure(c(12418,12509,12600,12692,12784,12874,12965,13057,13149,13239,13330,13422,13514,13604,13695,13787,13879,13970,14061,14153,14245,14335,14426,14518,14610,14700,14791,14883,14975,15065,15156,15248,15340,15431,15522,15614,15706,15796,15887,15979,16071,16161,16252,16344,16436,16526,16617,16709,16801,16892,16983,17075,17167,17257,17348,17440,17532,17622,17713,17805),fiscal_start = 1,class = c("yearquarter","vctrs_vctr"
)),Index = c(99.9820253708305,100.194245830908,100.464139353185,100.509664967831,100.0275008635,100.372695892486,100.468066533557,100.576244163805,100.623717628381,100.780442246863,100.65264776914,100.69366042058,100.909079987983,101.018619794549,100.959015810121,101.04835942569,100.681089538573,100.663660573108,100.522268447626,100.22783149065,99.4643787364223,99.4331456182866,99.5626187912313,100.039081681562,100.418818090577,100.4652077117,100.544938523663,100.643407515773,100.44741458842,100.502455228311,100.695097023592,100.716907300461,100.555884307168,100.503742436422,100.432566888692,100.553320081068,100.32442656222,100.456727368091,100.350509427919,100.677833560057,100.362403841025,100.827860652847,100.499496900756,100.418652455482,100.234221207155,100.25208930362,100.159571677823,100.229735300634,100.369332695161,100.169972399177,100.17207717391,100.35130514679,99.9317959389533,99.8704136030018,100.052802025981,100.176345514426,100.355049154025,100.544145324359,100.549886876118,100.5559420697)),row.names = c(NA,-60L),key = structure(list(
    .rows = structure(list(1:60),ptype = integer(0),class = c("vctrs_list_of","vctrs_vctr","list"))),-1L),class = c("tbl_df","tbl","data.frame")),index = structure("Date",ordered = TRUE),index2 = "Date",interval = structure(list(
    year = 0,quarter = 1,month = 0,week = 0,day = 0,hour = 0,minute = 0,second = 0,millisecond = 0,microsecond = 0,nanosecond = 0,unit = 0),.regular = TRUE,class = c("interval","vctrs_rcrd","vctrs_vctr")),class = c("tbl_ts","tbl_df","data.frame"))

和我的代码


fit <- afsi %>%
  model(arima = ARIMA(log(Index)))

p <- fit %>%
  forecast(h="2 year") %>%
  autoplot(bind_rows(afsi %>% slice(tail(row_number(),12)),select(slice(.,1),Date,Index = .mean)),level=seq(10,90,by=10),show_gap = TRUE) +
  geom_line(aes(Date,Index),col = '#75002B',size=1.2) +
  theme_bw() +
  labs(y='Log (AFSI)',title = 'Fanchart - Aggregate Financial Stability Index',subtitle = '8 period forecast (2019Q1-2020Q4)') 

  

p$layers[[1]]$aes_params$fill <- "#75002B"

p + theme(legend.position = 'none')

enter image description here

编辑:我正在寻找一种解决方案,使不确定性演变的外部带(预测扇)在开始时更窄,并且随着时间的推移逐渐散开,类似于我附加的英格兰银行图下面

enter image description here

解决方法

show_gap的{​​{1}}选项要求通过autoplot(<fable>)提供历史数据。

autoplot(<fable>,<tsibble>,show_gap = FALSE)

reprex package(v0.3.0)于2020-09-23创建

如果需要制作更自定义的图形,建议不要使用library(fable) library(dplyr) library(ggplot2) fit <- afsi %>% model(arima = ARIMA(log(Index))) fit %>% forecast(h="2 year") %>% autoplot(tail(afsi,12),level=seq(10,90,by=10),show_gap = FALSE) + theme_bw() + labs(y='Log (AFSI)',title = 'Fanchart - Aggregate Financial Stability Index',subtitle = '8 period forecast (2019Q1-2020Q4)') + theme(legend.position = 'none') 并使用ggplot2编写自己的图形。

要将图形形式的预测与数据结合起来,可以在寓言中添加另一行,这是对数据的最后观察:

autoplot()

reprex package(v0.3.0)于2020-09-23创建

从那里,您可以使用{ggdist}包来可视化分布,并使用fc <- fit %>% forecast(h = "2 years") fc_no_gap <- afsi %>% tail(1) %>% # Match structure of fable to combine with mutate(.model = "arima",Index = distributional::dist_degenerate(Index),.mean = mean(Index)) %>% as_fable(distribution = Index,response = "Index") %>% bind_rows(fc) #> Warning: The dimnames of the fable's distribution are missing and have been set #> to match the response variables. 添加历史数据。