2012-12-26 62 views
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表明,他們是一樣的。 我怎樣才能得到實際的預測值,而不是再次從訓練數據中預測?

回答

2

這裏您可以調用具有類屬性varest的對象的預測方法。

預測(對象,...,n.ahead = 10,CI = 0.95,dumvar = NULL)

n.ahead預報被遞歸計算爲所估計的VAR。

無需給予訓練幀進行預測。

pr2=pr1=predict(model) 
+0

這個doe沒有回答這個問題:爲什麼pr1和pr2是相同的,雖然他們肯定有一個不同的數據庫由rnorm調用產生? – Juergen

+1

@Juergen他們是相同的,因爲我們不使用生成的數據來預測。只有model.predict(模型) – agstudy

+0

如何使用生成的數據newFrame?預測樣本中的內容沒有多大意義。 – Juergen

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()",它確保您的工作是可重複的。

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) 

希望我幫助。