我尝试使用 Doornik & Ooms 在 2002 年解释的方法在德国股票指数 (dax) 中找到附加的和创新的异常值:
步骤 1 估计基线 GARCH 模型以获得对数似然 (lb) 和残差
步骤 2 找到 t = s 处的最大(绝对值)标准化残差。如果平均值为 (t = s),方差为 dt-1,则使用虚拟 dt=1 估计扩展 GARCH 模型。这给出了添加参数和对数相似度 (lm) 的估计值。
步骤 3 如果 2(lm-lb) < C 则终止:没有进一步的异常值存在 C=5.66+1.88log(T)。T 是观察次数。
数据是从 2014 年 6 月 2 日到 2016 年 1 月 1 日的 DAX (Deutscher Aktienindex),我是通过 Datastream 获得的,因为当时 pdfetch 无法正常工作。我的问题是如何将虚拟变量实现到扩展的 GARCH 模型中。
到目前为止我的代码:
# Preparation:
library("rugarch")
library("tseries")
library("xts")
dax <-read.csv2("~/Bachelorarbeit/Daten/DAXINDX_Time_Series_010114_010116_final.csv", stringsAsFactors=FALSE)
dax_xts<-xts(dax, order.by=as.Date.character(dax$Date, format="%Y-%m-%d")) #Convert into xts-format
dax_xts$Date=NULL #Remove "Date"-Column
storage.mode(dax_xts)<- "numeric"
colnames(dax_xts)<-c("Dax") #Rename Column-Names
dax.logs.prep<-diff(log(dax$Index), lag=1)
dax.date<-dax$Date[-1]
dax.logs<-data.frame(dax.date,dax.logs.prep)
dax_ret<-xts(dax.logs, order.by=as.Date.character(dax.logs$Date, format="%Y-%m-%d")) #Convert into xts-format
dax_ret$Date=NULL #Remove "Date"-Column
storage.mode(dax_ret)<- "numeric"
colnames(dax_ret)<-c("Index Returns") #Rename Column-Names
# Step 1: Estimate baseline GARCH model to obtain log-likelihood and residuals
dax_mod<-garch(dax_ret, order = c(1,1))
l.b<-dax_mod$n.likeli
dax_mod.res<-data.frame(dax.date, dax_mod$residuals)
# Step 2: Find largest absolute standardized residual
max(abs(dax_mod.res$dax_mod.residuals/sd(dax_mod.res$dax_mod.residuals, na.rm = TRUE)), na.rm = TRUE)
specgarch <- ugarchspec(variance.model=list(model="sGARCH", external.regressors= dummy), mean.model=list(external.regressor=dummy), distribution="norm")
garchfit <- ugarchfit(data=dax_ret, spec=specgarch)