如何解决R:具有可变预测范围的 Arima() 每日预测系列 (forecast())
我在每日时间序列 x_0 到 x_n 上估计了一个 ARIMA 模型(实际上是一个模型列表)。给定估计的模型,我“简单地”想生成一个向量(无需重新估计)Y_(n+1),j 到 y_m,j,其中每个元素 y_i,j(n+1:m 中的 i)是进程 j 天前的期望(j 不是常数),条件是 x_(i-1),x_(i-2),...
我遇到的问题是forecast()。也就是说,我不知道如何将更新的 x 值传递给测试中每一行的预测(),在每一行中,我实际上是在创建一个新的预测对象。过去几天我查看了 Stack 的所有内容,但没有找到解决方案。如果能解决我的问题,我也愿意接受 Python 的建议。
在某些情况下,如果有帮助,我每天都会预测我的变量(VIX 指数),在由其 VVIX 期货合约到期时间定义的时间段内(随着系列中的合约到期,它会减少和跳跃,并且分别由期限较长的合约取代。)
如果您需要代码或其他示例,我很乐意提供,但这个概念很容易理解,所以希望有人比我更了解这个库的限制。非常感谢任何帮助/建议!
注意:我知道我可能需要自己计算期望值,但我很快就要召开研究会议,想知道是否可以使用 predict() 来完成此任务,谢谢!
~胭脂红
编辑:这是要复制的代码。在 Arima() 对象存储在“模型”中后,我需要创建(在本例中)一个包含 50 个条目的向量,其中每个条目是时间 T(n_step先)。欢迎任何建议!!
x <- rnorm(100)+1
train_test <- list(train=x[1:50],test=x[51:100])
n_step <- ceiling(runif(n=50,min=1,max=20))
model <- Arima(train_test[[1]],order=c(1,1),method="ML")
解决方法
我编写了一个程序来执行本文中询问的预测。代码非常适合我的研究,但我做了一个简化的例子,在这里分享一下。请注意,arima 模型对象中的系数索引不是常数。我只是将所有模型系数对齐到一个 nx7 矩阵(我最多使用 3 个 ar、ma 项和截距),并逐行循环。希望它可以帮助某人,因为它肯定会帮助我!欢迎任何关于修改或改进的建议!
-胭脂红
library(forecast)
train <- vix$Close[1:1000] ;test <- vix$Close[1001:2000]
fit <- Arima(train,order=c(2,2));coefs <- as.numeric(fit$coef)
xreg <- train;eps <- fit$residuals
n_step <- rep(10:3,125);nth_step_fc <- numeric()
for(i in 1:length(test)){
n_step_fc <- numeric(n_step[i])
xreg_temp <- xreg;eps_temp <- eps
for(j in 1:n_step[i]){
n_step_fc[j] <- coefs[1]*(xreg_temp[length(xreg_temp)]-coefs[5])+ # ar1
coefs[2]*(xreg_temp[length(xreg_temp)-1]-coefs[5])+ # ar2
coefs[3]*(eps_temp[length(eps_temp)]+ # ma1
coefs[4]*eps_temp[length(eps_temp)-1]+ # ma2
coefs[5] # intercept
eps_temp <- append(eps,0) # mean est (not point)
xreg_temp <- append(xreg,n_step_fc[j])
}
nth_step_fc[i] <- n_step_fc[j]
eps_i <- n_step_fc[1]-test[i]
eps <- append(eps,eps_i)
xreg <- append(xreg,test[i])
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。