使用`midasr`包进行预测:包含新的高频值

时间:2014-01-14 13:32:19

标签: r time-series

我正在尝试使用所谓的MIDAS概念计算一步预测。在该概念内,根据较高频率的数据计算预测。例如,因变量y可以每年记录一次,并在独立变量x的帮助下进行解释,可以对其进行采样,例如每季度。

有一个名为midasr的软件包,它提供了许多功能。我可以使用上面提到的包中的函数select_and_forecast来计算一步预测,如下所示(使用模拟数据,这是示例的简化版本,形成用户对包midasr的指南) :

生成数据:

library(midasr)
set.seed(1001)
n <- 250
trend <- c(1:n)
x <- rnorm(4 * n)
z <- rnorm(12 * n)
fn.x <- nealmon(p = c(1, -0.5), d = 8)
y <- 2 + 0.1 * trend + mls(x, 0:7, 4) %*% fn.x + rnorm(n)

预测的计算(样本外预测范围由参数outsample控制,因此在我的示例中,我计算10个预测,从240到250)

select_and_forecast(y~trend+mls(y,1,1,"*")+mls(x,0,4),
                          from=list(x=c(4)),
                          to=list(x=rbind(c(14,19))),
                          insample=1:250,outsample=240:250,
                          weights=list(x=c("nealmon","almonp")),
                          wstart=list(nealmon=rep(1,3),almonp=rep(1,3)),
                          IC="AIC",
                          seltype="restricted",
                          ftype="recursive",
                          measures=c("MSE"),
                          fweights=c("EW","BICW")
)$forecasts[[1]]$forecast

我现在要做的是模拟高频变量的新值变为可用的情况,例如,新月已经过去,并且可以在模型中使用本月的值。我会按照以下步骤进行,但我不确定它是否正确:

select_and_forecast(y~trend+mls(y,1,1,"*")+mls(x,0,4),
                          from=list(x=c(3)),   # The only change is the reduction of the lower bound of the range of the lags of the regeressor from 4 to 3
                          to=list(x=rbind(c(14,19))),
                          insample=1:250,outsample=240:250,
                          weights=list(x=c("nealmon","almonp")),
                          wstart=list(nealmon=rep(1,3),almonp=rep(1,3)),
                          IC="AIC",
                          seltype="restricted",
                          ftype="recursive",
                          measures=c("MSE"),
                          fweights=c("EW","BICW")
)$forecasts[[1]]$forecast

理论上,一个包括通过减少时间指数对高频变量的新观察,但我不知道这种方式使用函数是否正确。

这个问题适用于熟悉该软件包的人。有人可以对此发表评论吗?

我想的公式是:

y_t=\beta_0 + \beta_1B(L^{1/m};\theta)x_{t-h+1/m}^{(m)} + \epsilon_t^{(m)}

在我的情况下使用h=1并添加1/m以包含新的高频观察

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题所以我会举一个例子,希望能回答你的问题。

假设您的响应变量y以年度频率观察,并且每季度观察预测变量x(对应于模拟数据)。假设您有兴趣使用上一年的数据预测明年y值。然后,pacakge midasr 中的模型方程如下:

y~mls(x,4:7,4)

4:7是用于预测的x滞后,而4表示x的每次观察都有y的4次观察。

midasr 使用惯例,对于低频段t=l,我们会观察到高频段m*(l-1)+1:m。因此,对于1年,我们有季度1,2,3,4,对于2年,我们有季度5,6,7,8。然后,此约定假定我们在y14 x季度y28一起观察x y1

MIDAS模型是根据滞后来制定的,从零开始。因此,如果我们想在x年解释4,3,2,1(在我们的示例中,低频率是年度频率),同一年的值0,1,2,3,即季度{{1}我们使用滞后y。如果我们的目标是在2x解释1 4,5,6,74,3,2,1,我们会使用与3对应的滞后y }。

现在假设我们处于3年,但我们尚未观察到9值,但我们已经观察到了今年第一季度9,即季度3。假设我们想要使用此信息进行预测。季度y~mls(x,3:7,4) 是今年from之后的三个高频滞后,因此模型规范现在是

{{1}}

我们也包括上一年的所有信息。

因此,如果我的例子对应于你所要求的,那么是的,包含新的高频观察只是改变{{1}}参数值的问题。但是我强烈建议从一个简单的模型开始,以完全掌握包的工作方式。