滚动回归预测,DM测试,CW测试

时间:2018-12-03 14:38:48

标签: r time-series forecasting currency-exchange-rates

我有一个线性模型,其中汇率作为因变量,其他7个自变量(例如通货膨胀,利率等)。我有1993年1季度至2011年4季度的季度数据。 我想创建一个窗口大小为60(来自1993Q1-2007Q4)的滚动窗口回归(具有上述模型),并使用估计的回归来预测其余样本。另外,我想将此模型与随机游走模型进行比较(汇率遵循R.W.)。最后,我想执行dm.test和clarkwest测试(不运行)。我的代码正确吗?

X = embed(data)
X = as.data.frame(X)

install.packages("foreach")
library(foreach)
w_size=60
n_windows = nrow(X) - 60 #until 2007Q4
forecasts = foreach(i=1:n_windows, .combine = rbind) %do%{
    # = Select data for the window (in and out-of-sample) = #
  X_in = X[i:(w_size + i - 1), ] # = change to X[1:(w_size + i - 1), ] for expanding window
  X_out = X[w_size + i, ]

  # = Regression Model = #
  m1 = lm(V1 ~ V2+V3+V4+V5+V6+V7+V8, data = X_in)
  f1 = predict(m1, X_out)

  # = Random Walk = #
  f2 = tail(X_in$V1, 1)

  return(c(f1, f2))
}
 e1 = tail(X[ ,"V1"], nrow(forecasts)) - forecasts[ ,1]
 e2 = tail(X[ ,"V1"], nrow(forecasts)) - forecasts[ ,2]
library(tseries)     
library(forecast)
dm.test(e1,e2, "l") #p-value is more than 5% for all the cases( two.sided, greater, less)
clarkwest(e1,e2)

1 个答案:

答案 0 :(得分:0)

似乎不再支持clarkwest()函数。我最近写了我自己的函数:CW请注意,我使用的是标准错误,但并未进行Newey-West校正。

要调查循环,可以尝试:

i=1
X_in = X[i:(w_size + i - 1), ] # = change to X[1:(w_size + i - 1), ] for expanding window
X_out = X[w_size + i, ]

# = Regression Model = #
m1 = lm(V1 ~ V2+V3+V4+V5+V6+V7+V8, data = X_in)
f1 = predict(m1, X_out)

# = Random Walk = #
f2 = tail(X_in$V1, 1)

在这里您可以看到i = 1时循环创建的构图