Перекрестная проверка с временными рядами и xreg - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь провести перекрестную проверку временных рядов, используя функцию tsCV из пакета forecast в случае, если есть xreg и функция elm пакета nnfor.

Чтобы выполнить перекрестную проверку с xreg, как писал Хиндман здесь , мы должны использовать следующую функцию (пример):

library(forecast)

fc <- 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 <- auto.arima(y, xreg=X)
  forecast(fit, xreg=newX)
}

# Test
y <- ts(rnorm(100))
x <- matrix(ts(rnorm(100)),ncol=1)

tsCV(y, fc, xreg=x)

это специальнаяслучай для auto.arima, но мы можем адаптироваться к другим моделям, как я сделал с nnetar (авторегрессионные нейронные сети)

    z1<-ts(rnorm(rnorm(100,150,20)))
    z2<-ts(rnorm(rnorm(100,150,20)))

        fc1 <- 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 <- nnetar(y,repeats=200,p=1,P=1,xreg=X)
          forecast(fit, xreg=newX)
        }
        test1<-tsCV(z1, fc1, xreg=z2,h=2)

head(test1)
Time Series:
Start = 1 
End = 6 
Frequency = 1 
         h=1        h=2
1         NA         NA
2         NA         NA
3  1.1512374  0.4210337
4 -0.4963436 -2.7574866
5 -2.0564821 -1.5121580
6 -1.5738913 -0.9921145

, и эти команды работают отлично, даже помещая xreg.В случае elm метод, похоже, не принимает xreg как ts, только как матрицу / df.Хорошо, но при попытке кода ниже у нас есть NA результат

z1<-ts(rnorm(rnorm(100,150,20)))
z2<-ts(rnorm(rnorm(100,150,20)))

fc <- 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 <- elm(y,type='lasso',reps=1,xreg=data.frame(X))
      forecast(fit, xreg=data.frame(newX))
    }
test<-tsCV(z1, fc, xreg=z2,h=2)

tail(test)

Time Series:
Start = 95 
End = 100 
Frequency = 1 
    h=1 h=2
 95  NA  NA
 96  NA  NA
 97  NA  NA
 98  NA  NA
 99  NA  NA
100  NA  NA

проблема, кажется, при использовании xreg, так как при попытке использовать tsCV elm без xreg,есть успех согласно команде

fc2 <- function(x, h){forecast(elm(x,type='lasso',reps=2), h=h)}
test2<- tsCV(z1, fc2, h=2)
tail(test2))

Time Series:
Start = 95 
End = 100 
Frequency = 1 
           h=1        h=2
 95  1.6305545 -1.3471257
 96 -1.3642895 -1.6843630
 97 -1.6701517 -1.4690025
 98 -1.4517845 -0.2956304
 99 -0.2808163         NA
100         NA         NA

. В качестве последнего примера, в случае, когда мы не выполняем перекрестную проверку, функция elm с xreg работает в этом случае

z3<-ts(rnorm(rnorm(112,150,20)))
fit <- elm(z1,type='lasso',reps=50,xreg=data.frame(z3))

Надеюсь, я был ясен и моих попыток было достаточно, чтобы проиллюстрировать проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...