我正在尝试预测资产时间序列的波动性。在预测波动性时,我在不同的来源中遇到了两种不同的方法,我不明白,您何时使用
log()
数据以及何时使用 diff(log())
数据?
我创建了阈值 Garch 模型来使用
diff log()
数据,但似乎很难评估其结果。当使用 log()
时,它的预测似乎与时间序列初始价格变化图非常接近。
为了检查 time_series 的平稳性,我还对未触及的时间序列数据使用了 ADF 测试,然后
diff(log(time series data))
。我继续使用diff(log())
'ed数据
这是我用于编写规范、拟合和预测波动性的代码:
spec.tgarch11 <- ugarchspec(
variance.model = list(model = "fGARCH",
submodel = "TGARCH",
garchOrder = c(1,1)
),
mean.model = list(armaOrder=c(1,0))
)
tGarchModel11 <- ugarchfit(spec.tgarch11, data=dl_data)
tGarchModel11
vol_tgarch11 <- ts(tGarchModel11@fit$sigma^2,end = c(2024,1), frequency = 12)
plot(vol_tgarch11)
acf(residuals(tGarchModel11, standardize = TRUE))
acf(residuals(tGarchModel11, standardize = TRUE)^2)
forec <- ugarchforecast(tGarchModel11, data = dl_data, n.ahead = 12)
forec
plot(forec, which=1)
其中
dl_data
是 diff(log(time_series))
。
模型图输出是这样的:
TLDR:在使用 GARCH 预测波动性时,我是否使用微分对数或对数化时间序列数据?
您应该使用
diff(log())
,因为这会给您带来对数回报。
假设您从原始价格时间序列开始。
> TATASTEEL
TATASTEEL
2016-01-04 259.00
2016-01-05 272.95
2016-01-06 268.75
2016-01-07 251.00
2016-01-08 254.55
2016-01-11 252.90
2016-01-12 245.55
2016-01-13 246.40
2016-01-14 239.45
2016-01-15 229.50
计算简单回报。
> (TATASTEEL - lag(TATASTEEL)) / lag(TATASTEEL)
TATASTEEL
2016-01-04 NA
2016-01-05 0.053861004
2016-01-06 -0.015387434
2016-01-07 -0.066046512
2016-01-08 0.014143426
2016-01-11 -0.006482027
2016-01-12 -0.029062871
2016-01-13 0.003461617
2016-01-14 -0.028206169
2016-01-15 -0.041553560
计算对数回报。
> diff(log(TATASTEEL))
TATASTEEL
2016-01-04 NA
2016-01-05 0.052460567
2016-01-06 -0.015507049
2016-01-07 -0.068328640
2016-01-08 0.014044341
2016-01-11 -0.006503127
2016-01-12 -0.029493561
2016-01-13 0.003455639
2016-01-14 -0.028611605
2016-01-15 -0.042441597
您可以看到,这两种计算回报的方法的值相似,但并不完全相同(尽管如果价格变化很小,则非常相似)。
您可以对其中任何一个进行建模,但对数回报通常更稳定并且更接近正态分布。