我的问题涉及通过将mae
与fcastmean
进行比较,将下面的testData
矩阵与平均误差相加。
运行for循环时,会出现以下错误消息:
Error in mae[i,1:length(testIndexes)] <- (fcastmean - testData):
replacement has length zero
除此之外,还有一些有用的小问题,但我觉得需要整理但不确定如何。即将testData
和trainData
转换为类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)
。
如何解决这个问题?