我想在分层时间序列中使用xreg = Fourier(ts,k,f)作为回归器。
我可以让回归器为单个系列工作。
我有一个分层的时间序列hts,它由与第一个相似的序列组成(相同的时间步长)。
hts参考:https://robjhyndman.com/publications/hierarchical-tourism/
使用相同的回归器,我从hts得到的预报有误。有什么问题吗?
train_ts:整个hts,格式为visnights。
top_ts:只是顶级时间序列
完成单个系列后,使用xreg和newxreg可以使top_ts有效。
KK <- 12
REG= fourier(top_ts,KK,52)
model <- auto.arima(top_ts, xreg=fourier(top_ts, K=KK))
fcstResult <- forecast(model, h=1, xreg= REG, newxreg=REG)
作品
当我对htnight的预测类似于隔夜时,train_ts,
train_ts <- window(vis_ts, c(2,1), end= c(3, 52))
fcstResult <- forecast(train_ts, h=1, fmethod="arima", method = "bu")
作品
当我在hts上使用相同的回归XREG时,它会出错:
fcstResult <- forecast(
train_ts, h = 1, method = "bu", fmethod = "arima", xreg=REG, newxreg=REG)
OR
fcstResult <- forecast(
train_ts, h = 1, method = "bu", fmethod = "arima", xreg=REG, newxreg=REG, lambda=0)
Error in model.frame.default(formula = x ~ xregg, drop.unused.levels = TRUE) :
variable lengths differ (found for 'xregg')
(我将所有列都设为非零并添加了一个小的随机噪声,所以这不是问题)
答案 0 :(得分:1)
在您的第一个代码块中,newxreg
参数被忽略,h
参数也被忽略。 REG
的值被视为将来时间段的必需回归变量。如果您的训练数据的长度等于52的倍数,那么由于傅立叶项的周期性,这恰好是正确的,但是最好像这样明确:
library(hts)
vis_ts <- hts(fpp2::visnights, characters = c(3, 5))
train_ts <- window(vis_ts, end=c(2010,4))
test_ts <- window(vis_ts, start=c(2011,1))
train_top <- aggts(train_ts, level=0)
test_top <- aggts(test_ts, level=0)
train_reg <- fourier(train_top, K=2)
test_reg <- fourier(test_top, K=2)
model <- auto.arima(train_top, xreg=train_reg)
fcstResult <- forecast(model, xreg=test_reg)
使用分层方法时,需要根据训练和测试时间同时传递xreg
和newxreg
参数。在此函数中,检查newxreg
的行以确保它们与h
的值匹配。这会导致错误。
以下代码将起作用
fcast_hts <- forecast(train_ts, method='bu', fmethod='arima',
xreg=train_reg, newxreg=test_reg)