填充矩阵时出错

时间:2016-03-01 09:41:12

标签: r for-loop matrix time-series

我的问题涉及通过将maefcastmean进行比较,将下面的testData矩阵与平均误差相加。

运行for循环时,会出现以下错误消息:

Error in mae[i,1:length(testIndexes)] <- (fcastmean - testData):
  replacement has length zero

除此之外,还有一些有用的小问题,但我觉得需要整理但不确定如何。即将testDatatrainData转换为类mts的对象。

这当然是次要问题。

library("forecast")
library("vars")

#Create dataset for test purposes
d <- rnorm(70)
x <- rnorm(70)

dx <- cbind(d,x)
Data <- as.ts(dx)

k  <- 10 #Number of folds

mae <- matrix(NA,length(d)/k,k) #Create mae matrix

#Randomly shuffle the data
Data<-Data[sample(nrow(Data)),]

#Create k equally size folds
folds <- cut(seq(1,nrow(Data)),breaks=k,labels=FALSE)

#Perform k fold cross validation
for(i in 1:k){
  #Segement data by fold
  testIndexes <- which(folds==i,arr.ind=TRUE)
  testData <- Data[testIndexes, ]
  testData <- as.ts(testData)
  trainData <- Data[-testIndexes, ]
  trainData <- as.ts(trainData)

  #Use the test and train data partitions
  fit2 <- VAR(trainData, p = 2)                       
  fcast <- forecast(fit2, h = length(testIndexes))
  fcastmean <- do.call('cbind', fcast[['mean']])
  mae[i,1:length(testIndexes)] <- (fcastmean - testData)
}

任何建议都将不胜感激

修改

我通过应用以下解决方案部分解决了我的上述问题:

y <- length(d)/k

m1 <- matrix(NA, y, y)
m2 <- matrix(NA, y, y)

并在for循环中:

m1[i,1:length(testIndexes)] <- (testData[,1]) 
m2[i,1:length(testIndexes)] <- (fcastmean[,1]) 

接着是

mae <- m2-m1

循环之后。

但是,在创建矩阵时,代码只填充k个行数,而不是`length(testIndexes)指定的数字。

为什么会这样?

修改2

看起来原因是它只打印i次迭代,与k相同。但是,矩阵中的行数需要反映完整的预测范围,即。 length(testIndexes)

如何解决这个问题?

0 个答案:

没有答案