I am trying to add an external regressor xreg
into the hts
package, however I am getting an error regarding the number of rows (140) despite my external variable has the same number. I have checked other answers but mine is more simple:
Here is the reproducible example
library(hts)
abc <- matrix(sample(1:100, 32*140, replace=TRUE), ncol=32)
colnames(abc) <- c(
paste0("A0",1:5),
paste0("B0",1:9),"B10",
paste0("C0",1:8),
paste0("D0",1:5),
paste0("E0",1:4)
)
abc <- ts(abc, start=2019, frequency=365.25/7)
x <- hts(abc, characters = c(1,2))
data <- window(x, start = 2019.000, end = 2021.166)
test <- window(x, start = 2021.185)
x2 <- runif(n = 140, min = 1, max = 10) #External regressor with the same size
fcastsxreg <- forecast( data, h = 2, method = "comb", algorithms = "lu", fmethod = "arima", weights=, "wls", nonnegative=TRUE, xreg=x2)
accuracy(fcastsxreg, test, levels = 1)
The error message is about the mismatch between de size of abc matrix an x2 vector despite both have 140 rows
Error in model.frame.default(formula = x ~ xregg, drop.unused.levels = TRUE) :
variable lengths differ (found for 'xregg')
In addition: Warning message:
In !is.na(x) & !is.na(rowSums(xregg)) :
longer object length is not a multiple of shorter object length
Thank you
Your training data
data
has 114 observations for each series in the hierarchy. Your regressor has 140 observations. So there is a difference in length as the error states.You also need to provide both an
xreg
argument for the training period, and anewxreg
argument for the forecast period.Another small problem is that there was one observation between your training and test data which was probably unintentional.
Here is a modification of your code that works.
Created on 2022-01-26 by the reprex package (v2.0.1)