you*_*his 7 statistics arguments r
我有两个问题.(注:问题的第一部分已在下面的评论中得到解决)
首先,我试图根据Rob Hyndman的本教程确定VAR预测的平均绝对误差,并收到以下错误消息:
Error in `-.default`(fcast[['mean']], dxnext) :
non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)
我相信我已设法将其追踪到VAR的输出,这是非数字的,并且似乎导致了问题.
有解决方法吗?
其次,这段代码需要为双向和多变量模型的工作,因此我怀疑我是否应该使用的长度dx为n作为教程提出,或一个变量的长度,因为这是代表长度给定时限.问题在于dx给定预测长度(在这种情况下为12)的循环中的长度和如何处理.任何输入将不胜感激.
下面是包含示例数据和所需包的代码,因此可以复制错误.
require("forecast")
require("vars")
x <- rnorm(70)
y <- rnorm(70)
dx <- cbind(x,y)
dx <- as.ts(dx)
# Forecast Accuracy
k <- 58 # data length less forecast horison (as minimum)
n <- length(dx)
mae <- matrix(NA, n-k, 12)
st <- tsp(dx)[1]+(k-2)/12
for (i in 1:(n-k)) {
dxshort <- window(dx, end=st+i/12)
dxnext <- window(dx, start=st + (i+1)/12, end=st+(i+12)/12)
fit <- VAR(dxshort, p = 2)
fcast <- forecast(fit, h = 12)
mae[i,1:length(dxnext)] <- abs(fcast[['mean']] - dxnext)
}
plot(1:12, colMeans(mae,na.rm = TRUE), type = "1", Col = 2, xlab = "horizon", ylab = "MAE")
Run Code Online (Sandbox Code Playgroud)
编辑
以下代码似乎可以解决上述问题,但我仍然遇到有关如何处理输出的问题.
我的直觉是它只记录循环的最后一次迭代,并且该迭代的预测范围延伸到未来(超出可用数据的范围).
正如我在上面提供的链接中部分解释的那样,代码尝试基于蓝色数据运行模型(参见下面的示例图片)并预测红色数据集,记录每个预测范围的平均误差,将其存储在数据框中最后取所有迭代的平均误差.
library(forecast)
library(vars)
library(plyr)
x <- rnorm(70)
y <- rnorm(70)
dx <- cbind(x,y)
dx <- as.ts(dx)
# Forecast Accuracy
j = 12 #Forecast horizon
k = nrow(dx)-j #length of minimum training set
prediction <- data.frame()
actual <- data.frame()
for (i in j) {
trainingset <- window(dx, end = k+i-1)
testset <- window(dx, start = k-j+i+1, end = k+j)
fit <- VAR(trainingset, p = 3)
fcast <- forecast(fit, h = j)
fcastmean <- do.call('cbind', fcast[['mean']])
fcastmean <- as.data.frame(fcastmean)
prediction <- rbind(fcastmean)
actual <- rbind(as.data.frame(testset[,1]))
}
# add predictions and actual values
result <- cbind(prediction[,1], actual)
names(result) <- c("Predicted", "Actual")
result$Difference <- abs(result$Actual - result$Predicted)
Run Code Online (Sandbox Code Playgroud)