我正在尝试用不同的模型(例如AR,HAR等)来预测一些股票的波动性。现在我已经到了不知道该怎么做的地步。我的问题如下。我试图用ARFIMA (2,d,0)模型和外部回归来预测波动率。我使用的是rugarch包和arfimaroll命令。以下是ARFIMA规范的代码。
specGT<- arfimaspec(mean.model = list(armaOrder = c(2, 0),arfima=T, external.regressors = TGT))TGT是外部回归变量。它是一个1列1359行的矩阵(与我的数据集的行数相同)。这段代码可以工作(至少它没有给出任何错误)。现在我想用arfimaroll来预测波动率。以下是代码
forecastarfimaGT<-arfimaroll(specGT,lagRV_d,n.ahead=1,n.start=1014,refit.every=1,refit.window="recursive",solver="hybrid")这也不会给出错误。但是,如果我将带有外部回归变量的模型的预测结果与没有外部回归变量的相同ARFIMA模型的预测结果进行比较,结果是相同的
forecastarfimaGT==forecastarfimarealized在345个预测点中,每个点的输出都是真的。
关于预测的一些注释。递归“refit.window=”用于执行扩展窗口预测,其他参数应该无关紧要(如refit.every等)。
现在我的问题是我在这里做错了什么。有人能就我的错误给我一个提示吗?
问候
编辑:为了更清楚,这里是一个虚构的例子。首先,让我们用数据做一个时间序列
a<-abs(rnorm(600,0.1,0.1)然后生成外部回归向量并将其转换为矩阵
b<-abs(rnorm(600,1,1))
b1<-as.matrix(b,nrow=600,ncol=1)现在没有外部回归的arfima预测
spec<- arfimaspec(mean.model = list(armaOrder = c(2, 0),arfima=T))
forecastarfima<-arfimaroll(spec,a,n.ahead=1,n.start=500,refit.every=1,refit.window="recursive",solver="hybrid"
forecastarfimadf<-as.data.frame(forecastarfima)
forecastarfimarealized<-forecastarfimadf[,-c(1:5)]用极大回归法预测
specGT<- arfimaspec(mean.model = list(armaOrder = c(2, 0),arfima=T, external.regressors = b1))
forecastarfimaGT<-arfimaroll(specGT,a,n.ahead=1,n.start=500,refit.every=1,refit.window="recursive",solver="hybrid"
forecastarfimaGTdf<-as.data.frame(forecastarfimaGT)
forecastarfimarealizedGT<-forecastarfimaGTdf[,-c(1:5)]现在让我们比较一下这两个结果
forecastarfimarealized==forecastarfimarealizedGT
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[37] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[73] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE如你所见,booth向量是相同的。事情不应该是这样的。即使外部回归器没有影响,向量也不应该完全相同。我现在很困惑。我使用的方法是正确的吗?你能帮我解决我的问题吗?
发布于 2016-07-03 20:24:24
这是因为您正在查看原始系列:
cbind(forecastarfimarealized,forecastarfimarealizedGT,a[501:600])相反,尝试:
cbind(forecastarfimadf[,c(6,1)],forecastarfimaGTdf[,1])
plot.ts(cbind(forecastarfimadf[,c(6,1)],forecastarfimaGTdf[,1]),plot.type="single",col=2:4,ylab="x")
legend("top",c("realized","forecast x","forecast x+GT"),lty=1,col=2:4,bty ="n")你确定你是在模拟波动性吗?也许你必须看一下"Sigma“这个词。为什么不使用Garch和家庭呢?
https://stackoverflow.com/questions/38122410
复制相似问题