我正在使用vars
包并想要预测计算模型中的一些值:
# Get the model
x1 <- rnorm(15)
y1 <- x1 + rnorm(15)
trainFrame=data.frame(x1,y1);
model=VAR(trainFrame, p=3);
pr1=predict(model, trainFrame);
# Forecast values with new data
x2 <- rnorm(15)
y2 <- x2 + rnorm(15)
newFrame=data.frame(x2,y2);
pr2=predict(model, newFrame);
比较两个预测向量pr1
和pr2
表明它们是相同的。
如何获得实际预测值而不是再次获得培训数据中的预测?
答案 0 :(得分:2)
在这里,您可以为具有类属性varest
的对象调用预测方法。
预测(对象,...,n.ahead = 10,ci = 0.95,dumvar = NULL)
n.ahead预测是针对估计的VAR递归计算的。
无需提供培训框架进行预测。
pr2=pr1=predict(model)
答案 1 :(得分:0)
它们不相同的原因是rnorm函数生成两组不同的随机数据,即第1部分和第2部分中使用的数据根本不相同。
要查看:
y1 <- rnorm(15)
y1
[1] -0.05346192 0.34168852 -0.18398645 0.84534239 -0.97027620 0.39889488
[7] -0.44039372 0.03008880 0.47940826 -0.73258837 1.06715936 -0.93316881
[13] -1.38306019 -0.42179145 -0.84193860
y2 <- rnorm(15)
y2
[1] -1.5849866 1.0203186 0.6242200 -0.5064240 -0.9497568 -0.2460866
[7] -0.8262738 0.3100040 0.1352368 0.4030656 -0.7095272 -0.2856932
[13] -0.9061068 1.5968001 1.0259594
你会发现y1和y2不一样。
为确保rnorm函数生成相同的数据集,您可以使用函数"set.seed()"
,以确保您的工作可重现。
答案 2 :(得分:0)
我遇到了同样的问题(我想),所以我写了这个函数来计算n步提前预测。它虽然没有给出错误带或CI。
VAR.pred <- function(x, varest, n.ahead = 10)
{
k <- ncol(varest$y)
p <- varest$p
Atemp <- matrix(NA, k, k*p + 1)
for(i in 1:k) Atemp[i, ] <- (coef(varest)[[i]])[, 1]
Const <- as.matrix(Atemp[, ncol(Atemp)])
A <- Atemp[, -ncol(Atemp)]
fcast <- matrix(NA, n.ahead, k)
spoint <- as.matrix(x[nrow(x):(nrow(x)- p + 1), ])
for(l in 1:n.ahead)
{
ftemp <- A[, 1:k]%*%t(spoint)[, 1]
for(j in 2:p) ftemp <- ftemp + A[, (1 + k*(j-1)):(k*j)]%*%t(spoint)[, j]
ftemp <- ftemp + Const
fcast[l, ] <- t(ftemp)
spoint <- rbind(t(ftemp), spoint)[1:p, ]
}
fframe <- data.frame(fcast)
names(fframe) <- dimnames(x)[[2]]
return(fframe)
}
给予pr1
VAR.pred(x = model$y, varest = model)
给予pr2
VAR.pred(x = newFrame, varest = model)
希望我帮助过。