R中的时间序列交叉验证:将tsCV()与tslm()一起使用-多个模型

时间:2018-12-07 20:18:32

标签: r function cross-validation forecasting

作为对:Timeseries Crossvalidation in R: using tsCV() with tslm()-Models的回应 我尝试将其与多个预测变量一起使用,我对它们进行了矩阵处理,但无法正常工作。

    fcTslm <- function(y, h, xreg)
{
if(NROW(xreg) < length(y) + h)
stop("Not enough xreg data for forecasting")
X <- head(xreg, length(y))
fit <- tslm(y ~ X)
X <- subset(xreg, start=length(y)+1, end=length(y)+h)
forecast(fit, newdata=X)
}

> pred <- ts(cbind(rnorm(length(AirPassengers)),rnorm(length(AirPassengers))), start=start(AirPassengers),
+            frequency=frequency(AirPassengers))


> tsCV(AirPassengers, fcTslm, xreg=matrix(pred,ncol=2))
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1950  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1951  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1952  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1953  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1954  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1955  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1956  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1957  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1958  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1959  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
1960  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA

我如何使其正常工作?

1 个答案:

答案 0 :(得分:0)

function(y, h, xreg)
{
  X <- xreg[1:length(y),]
  if(NROW(xreg) < length(y) + h)
    stop("Not enough xreg data for forecasting")
  newX <- xreg[length(y)+(1:h),]
  fit <- tslm(y ~ X)
  forecast(fit, newdata=newX)
}

tsCV(AirPassengers, fcTSLM, xreg=matrix(pred,ncol=1))