使用“ midasr”软件包进行预测:包含新的高频值

Dat*_*neR 6 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)
Run Code Online (Sandbox Code Playgroud)

预测的计算(样本外的预测范围由参数控制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
Run Code Online (Sandbox Code Playgroud)

我现在想模拟的情况是,高频变量的新值变得可用,因为例如已经过去了一个新的月份,并且该月的值可以在模型中使用。我将按照以下步骤进行操作,但不确定是否正确:

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
Run Code Online (Sandbox Code Playgroud)

从理论上讲,其中一种方法是通过减少时间索引来包含对高频变量的新观察结果,但我不知道以这种方式使用该函数是否正确。

这个问题是给熟悉软件包的人的。有人可以对此发表评论吗?

我认为的公式是:

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

h=1我为例,并增加1/m了一个新的高频观测

mpi*_*tas 4

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

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

y~mls(x,4:7,4)
Run Code Online (Sandbox Code Playgroud)

这些值是用于预测的4:7滞后值,表示对于 的每个观测值有 4 个观测值。x4xy

midasr包使用约定,即对于低频周期,t=l我们观察高频周期m*(l-1)+1:m。因此,对于年度,1我们有季度1,2,3,4,对于年度,2我们有季度5,6,7,8。然后,该约定假设我们y在年份和季度1一起观察,在年份和季度一起观察,等等。4xy28x

MIDAS 模型是根据滞后来制定的,滞后从零开始。因此,如果我们想用同年(即季度)的值来解释y年份1(如在我们的示例中,低频是每年的频率) ,我们使用 lags 。如果我们的目标是用atyear的值来解释atyear ,则我们使用对应于quarters的滞后。x4,3,2,10,1,2,3y2x14,5,6,74,3,2,1

现在假设我们在year 3,但是我们还没有观察到该y值,但是我们已经观察到了该年的第一季度3,即季度9。假设我们想使用这些信息进行预测。季度9比年份滞后三个高频率3,因此现在的模型规格是

y~mls(x,3:7,4)
Run Code Online (Sandbox Code Playgroud)

我们还包含了上一年的所有信息。

因此,如果我的示例符合您的要求,那么是的,包含新的高频观察结果只是按照from您的方式改变参数值的问题。不过,我强烈建议从一个简单的模型开始,以充分掌握该包的工作方式。