1

我正在使用该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);

比较两个预测向量pr1pr2表明它们是相同的。我怎样才能得到实际的预测值,而不是再次从训练数据中得到预测?

4

3 回答 3

2

在这里,您为具有类属性的对象调用 predict 方法varest

预测(对象,...,n.ahead = 10,ci = 0.95,dumvar = NULL)

为估计的 VAR 递归计算 n.ahead 预测。

无需给训练 Frame 来预测。

  pr2=pr1=predict(model)
于 2012-12-26T09:14:16.560 回答
1

我有同样的问题(我认为),所以我编写了这个函数来计算提前 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)

希望我有所帮助。

于 2013-08-02T16:32:20.970 回答
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()",它确保您的工作是可重现的。

于 2013-06-11T06:08:08.407 回答