我正在尝试使用所谓的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了一个新的高频观测
我不确定我是否正确理解了你的问题,所以我将举一个例子,希望能回答你的问题。
假设您的响应变量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您的方式改变参数值的问题。不过,我强烈建议从一个简单的模型开始,以充分掌握该包的工作方式。
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |