分层数据预测的带回归的 ARIMA
ARIMA with regressions for Hierarchical data forecast
我在尝试对 gts 对象使用 ARIMA 回归时遇到此错误:
Error in ...fourier(x, K, length(x) + (1:h)) :
K must be not be greater than period/2
这是一段简单的可重现代码。我应该将 k 设置为什么?我尝试了不同的值,但 none 似乎有效。
library(hts)
y3 <- ts(matrix(rnorm(300),ncol=60,nrow=5))
blnames3 <- paste0(rep(c("CA", "NY"), each = 30), # State
rep(c("AL", "LA", "CL", "ES"), each = 15), # County
rep(c("O", "O", "O", "C", "C"), 12), # Industry
rep(c("p", "q", "r", "p", "q"), 12), # Sub-industry
rep(504:507, 15)) # Product
colnames(y3) <- blnames3
gy3 <- gts(y3, characters=list(c(2,2),c(1,1,3)))
i=5
fc <- forecast(gy3, fmethod="arima", seasonal=FALSE, h=6, xreg=fourier(gy3, K=i), newxreg=fourierf(gy3, K=i, h=6))
这里有几个问题。首先,您的时间序列仅包含 5 个观测值,每个观测值太少而无法适合任何用于预测目的的模型。其次,您没有在 ts()
调用中指定数据的频率。第三,您不能将 gts 对象作为第一个参数传递给 fourier
()。
下面是一些有效的代码:
library(hts)
y3 <- ts(matrix(rnorm(3000),ncol=60), frequency=12)
blnames3 <- paste0(rep(c("CA", "NY"), each = 30), # State
rep(c("AL", "LA", "CL", "ES"), each = 15), # County
rep(c("O", "O", "O", "C", "C"), 12), # Industry
rep(c("p", "q", "r", "p", "q"), 12), # Sub-industry
rep(504:507, 15)) # Product
colnames(y3) <- blnames3
gy3 <- gts(y3, characters=list(c(2,2),c(1,1,3)))
i <- 5
fc <- forecast(gy3, fmethod="arima", seasonal=FALSE, h=6,
xreg=fourier(y3[,1], K=i), newxreg=fourierf(y3[,1], K=i, h=6))
请注意,fourier
和 fourierf
的第一个参数仅用于确定傅立叶预测变量的频率和长度。所以只使用 y3
的第一列就足够了。
我在尝试对 gts 对象使用 ARIMA 回归时遇到此错误:
Error in ...fourier(x, K, length(x) + (1:h)) : K must be not be greater than period/2
这是一段简单的可重现代码。我应该将 k 设置为什么?我尝试了不同的值,但 none 似乎有效。
library(hts)
y3 <- ts(matrix(rnorm(300),ncol=60,nrow=5))
blnames3 <- paste0(rep(c("CA", "NY"), each = 30), # State
rep(c("AL", "LA", "CL", "ES"), each = 15), # County
rep(c("O", "O", "O", "C", "C"), 12), # Industry
rep(c("p", "q", "r", "p", "q"), 12), # Sub-industry
rep(504:507, 15)) # Product
colnames(y3) <- blnames3
gy3 <- gts(y3, characters=list(c(2,2),c(1,1,3)))
i=5
fc <- forecast(gy3, fmethod="arima", seasonal=FALSE, h=6, xreg=fourier(gy3, K=i), newxreg=fourierf(gy3, K=i, h=6))
这里有几个问题。首先,您的时间序列仅包含 5 个观测值,每个观测值太少而无法适合任何用于预测目的的模型。其次,您没有在 ts()
调用中指定数据的频率。第三,您不能将 gts 对象作为第一个参数传递给 fourier
()。
下面是一些有效的代码:
library(hts)
y3 <- ts(matrix(rnorm(3000),ncol=60), frequency=12)
blnames3 <- paste0(rep(c("CA", "NY"), each = 30), # State
rep(c("AL", "LA", "CL", "ES"), each = 15), # County
rep(c("O", "O", "O", "C", "C"), 12), # Industry
rep(c("p", "q", "r", "p", "q"), 12), # Sub-industry
rep(504:507, 15)) # Product
colnames(y3) <- blnames3
gy3 <- gts(y3, characters=list(c(2,2),c(1,1,3)))
i <- 5
fc <- forecast(gy3, fmethod="arima", seasonal=FALSE, h=6,
xreg=fourier(y3[,1], K=i), newxreg=fourierf(y3[,1], K=i, h=6))
请注意,fourier
和 fourierf
的第一个参数仅用于确定傅立叶预测变量的频率和长度。所以只使用 y3
的第一列就足够了。