R语言FactorAnalytics包specFfm中GARCH收益标准化的疑问
关于FactorAnalytics包specFfm函数GARCH模块的滞后项问题
首先明确基础GARCH(1,1)的核心公式:
σₜ² = ω + α·εₜ₋₁² + β·σₜ₋₁²
其中ω代表长期平均方差,εₜ₋₁²是上一期的残差平方项,σₜ₋₁²是上一期的条件方差。
对照你给出的代码片段:
for ( i in 1: NROW(dataDT)) set(dataDT,i, "sigmaGarch", ifelse(dataDT$idx[i] == 1, (1 - alpha - beta) * dataDT$sdReturns[i]^2 + alpha * dataDT$ts[i], (1 - alpha - beta) * dataDT$sdReturns[i]^2 + alpha * dataDT$ts[i] + beta * dataDT$sigmaGarch[i-1]))
从GARCH(1,1)的定义来看,这里的dataDT$ts[i]确实应该滞后一期,也就是替换为dataDT$ts[i-1],原因如下:
- GARCH模型的条件方差依赖的是上一期的残差平方,而非当期残差,这样才能用历史信息预测当前条件方差;
- 代码中当前逻辑用了当期
ts[i],违背了GARCH模型“用滞后项建模条件异方差”的核心逻辑,会导致模型估计出现偏差; - 唯一例外是第一个观测值(
idx[i]==1),此时没有滞后项,可能需要用初始值替代,但如果ts[i]是当期残差,这里的初始条件设置也不符合常规GARCH的初始化方式(通常用样本方差或第一期残差平方作为初始条件)。
需要注意的是,首先要确认dataDT$ts的定义——如果它本身已经是滞后一期的残差平方,那当前代码没问题;但如果ts存储的是当期残差平方,就必须调整为ts[i-1]才能符合GARCH(1,1)的规范。
内容的提问来源于stack exchange,提问作者FSalimi
相关产品推荐
相关产品推荐

