fpp3包中VAR模型预测图facets参数失效的解决办法
解决VAR预测结果autoplot分面失效问题
问题原因
你的tsibble是宽格式(每个棋手作为单独列),而fpp3的autoplot()函数在处理宽格式预测结果时,facets=TRUE参数无法识别分组维度——分面功能需要数据是长格式(包含一个分组key列,比如id,对应单个数值列value)。
解决步骤
- 将原始宽格式tsibble转换为长格式,保留
date作为索引,新增id作为分组key; - 保持VAR建模使用宽格式数据(VAR模型要求多变量以列的形式存在);
- 将预测结果转换为长格式,与长格式原始数据匹配;
- 使用转换后的长格式数据调用
autoplot(),此时facets=TRUE即可生效。
完整修正代码
library(tidyverse) library(fpp3) library(tsibble) # 1. 数据集处理 chess.data <- read.csv("https://raw.githubusercontent.com/rhozon/datasets/master/fidedfv3.csv", head = TRUE, sep = ",") %>% mutate( Period = as.Date(Period), Name = as.factor(Name) ) %>% select(Name, Period, RTNG) %>% set_names(c("id", "date", "value")) %>% as_tibble() # 2. 转换为宽格式tsibble(用于VAR建模) chess.data_wide <- chess.data %>% pivot_wider(names_from = id, values_from = value) %>% mutate(date = yearmonth(date)) %>% drop_na() %>% as_tsibble(index = date) # 3. 转换为长格式tsibble(用于绘图) chess.data_long <- chess.data_wide %>% pivot_longer(cols = c(bu, liem, cheparinov), names_to = "id", values_to = "value") %>% as_tsibble(index = date, key = id) # 4. VAR建模与预测 VAR.MR3 <- chess.data_wide %>% model(VAR = VAR(vars(bu, liem, cheparinov), ic = "bic")) %>% forecast(h = "21 months") # 5. 快速转换预测结果为长格式并绘图 VAR.MR3 %>% gather() %>% filter_index("2021-01-01"~.) %>% autoplot(chess.data_long, level = 95, facets = TRUE) + ylab("等级分")
内容的提问来源于stack exchange,提问作者Rodrigo H. Ozon
相关产品推荐
相关产品推荐

