我已经将ARIMA(1,1,1)-GARCH(1,1)模型拟合到几年中以一分钟为间隔采样的澳元/美元汇率记录价格的时间序列,估计模型的上百万个数据点。该数据集可在此处获得。为了清楚起见,这是一个ARMA-GARCH模型,由于对原木价格进行一阶整合,因此适合对原木进行回报。原始的AUD / USD时间序列如下所示:
然后,我尝试根据拟合模型模拟时间序列,从而得到以下结果:
我既期望也希望模拟的时间序列与原始时间序列不同,但是我并不期望会有如此大的差异。从本质上讲,我希望模拟的序列的行为或大致看起来像原始序列。
这是我用来估计模型和模拟序列的R代码:
library(rugarch)
rows <- nrow(data)
data <- (log(data[2:rows,])-log(data[1:(rows-1),]))
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(1, 1), include.mean = TRUE), distribution.model = "std")
fit <- ugarchfit(spec = spec, data = data, solver = "hybrid")
sim <- ugarchsim(fit, n.sim = rows)
prices <- exp(diffinv(fitted(sim)))
plot(seq(1, nrow(prices), 1), prices, type="l")
这是估计的输出:
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model : ARFIMA(1,0,1)
Distribution : std
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.000000 0.000000 -1.755016 0.079257
ar1 -0.009243 0.035624 -0.259456 0.795283
ma1 -0.010114 0.036277 -0.278786 0.780409
omega 0.000000 0.000000 0.011062 0.991174
alpha1 0.050000 0.000045 1099.877416 0.000000
beta1 0.900000 0.000207 4341.655345 0.000000
shape 4.000000 0.003722 1074.724738 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000000 0.000002 -0.048475 0.961338
ar1 -0.009243 0.493738 -0.018720 0.985064
ma1 -0.010114 0.498011 -0.020308 0.983798
omega 0.000000 0.000010 0.000004 0.999997
alpha1 0.050000 0.159015 0.314436 0.753190
beta1 0.900000 0.456020 1.973598 0.048427
shape 4.000000 2.460678 1.625568 0.104042
LogLikelihood : 16340000
非常感谢您提供有关如何改进建模和仿真的指南,或者对我可能犯的错误有任何见解。似乎在我的模拟尝试中并未将模型残差用作噪声项,尽管我不确定如何将其合并。
感谢您的建议,@ SavedByJESUS。我已经更新了我的帖子,以包括我使用过的R库,并阐明了我的数据格式。
—
杰夫
模拟数据与原始系列不同的主要原因是,拟合模型ARMA(1,1,1)GARCH(1,1)不是适合您数据的模型。您应该首先改进模型,然后进行后续模拟,然后再模拟原始数据。
—
SavedByJESUS '19
ugarchspec()
和ugarchsim()
功能所在的软件包)。每当您在此处提出问题时,请确保您的代码具有可复制性,它将“帮助人们帮助您”。