【问题标题】:Rolling regression forecast , DM test, CW test滚动回归预测、DM检验、CW检验
【发布时间】:2018-12-03 14:38:47
【问题描述】:

我有一个以汇率作为因变量和其他 7 个自变量(例如通货膨胀、利率等)的线性模型。我有 1993Q1-2011Q4 的季度数据。 我想创建一个窗口大小为 60(从 1993 年第一季度到 2007 年第四季度)的滚动窗口回归(使用上面的模型),并使用估计的回归来预测其余样本。另外,我想将此模型与 Random Walk 模型进行比较(汇率遵循 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)

【问题讨论】:

  • 我无法理解您的要求 - 您能澄清一下您的代码的哪一部分不起作用吗?
  • 你好埃文,我的代码工作正常,直到 clarkwest(e1,e2) 命令(可能 R 不支持)。但是,对我来说更重要的是要知道我在这个命令之前的代码是否正确。我不喜欢 R,所以我要问的是,这是否是我们根据预测创建滚动回归的方式。我的代码遵循这篇文章:r-bloggers.com/…

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


【解决方案1】:

似乎不再支持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 时循环创建的组合

【讨论】:

  • 您好,您知道我的样本外预测代码是否正确(在 clarkwest() 命令之前)?你能建议我别的吗?我关注这篇文章:r-bloggers.com/…
  • 代码对我来说看起来不错。但测试它总是一个好主意。您可以详细检查某些值的结果 i。 (例如 i=1、10、30)
  • 感谢您的回复。经过一些更改后,整个样本有 75 个观测值。在此代码之后,当我键入显示“X_in”时,它显示它从观察值 15 到 74 获取值。它不应该包括前 1 到 60 个观察值,因为我想要例如用前 60 个观测值估计模型来预测观测值 61?此外,当我键入显示“X_out”时,它会显示观察值 75(最后一次观察)。
  • 我觉得没问题。看来您只是将孔环一分为二。您正在从 i 循环到 n.windows。 n.窗户应该是 75-60=15。因此,您首先设置 i=1,然后设置 i=2 等。在最后一步中,您将设置 i=15。在我的评论中查看我的编辑。
  • 我明白了。而不是用上面的代码形成随机游走模型: f2 = tail(X_in$V1, 1) 我用这个代码创建了随机游走模型: m2 = lm(V1 ~ 1, data= X_in) #random walk withdrift f2 = predict(m2, X_out) 你觉得哪个更合适?考虑一下我想将我的模型与带有漂移的随机游走模型进行比较。
猜你喜欢
  • 1970-01-01
  • 2018-09-20
  • 2019-06-26
  • 2014-04-06
  • 2018-06-14
  • 2021-05-04
  • 2017-09-09
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多