有一个名为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)}
在我的情况下,使用
forecast(m,newdata=list(x=rep(NA,3),trend=251))
进行预测,但是出现了错误信息:Error in mls(x, c(3:20), 4, nealmon) : Incomplete high frequency data
。 - DatamineRfnscale
参数?我强烈建议阅读有关优化算法和非线性最小二乘问题的内容。MIDAS回归(带限制)是一个非线性模型,因此它对起始值有依赖性,不良的起始值可能会导致误导性拟合。 - mpiktasselect_and_forecast
建议的模型中添加了$opt$counts:
,然后使用相同的起始值(rep(1,3)
)自己用midas_r
估计了同样的模型,然后出现了略微不同的估计结果,但这很奇怪,因为起始值是相同的... - DatamineR$opt$counts
时,你的意思是什么?你添加到了什么地方?请注意,select_and_forecast
使用信息准则对模型滞后进行选择。这意味着样本大小会调整,以便所有候选模型都使用相同的样本进行估计。这意味着所选模型可能使用较小的样本进行估计。如果手动估计该模型,则使用完整样本。如果模型规范正确且起始值适当,则结果之间的差异应该可以忽略不计。否则,这表明存在问题。 - mpiktas