波動率
rugarch:GARCH 外部回歸器
我目前正在使用 R 中很棒的 rugarch 包。但是,我嘗試測試外部回歸器功能。我實現了一個 GARCH(1,1) 過程並將其與一個 GARCH(0,1) 過程進行比較,在該過程中我將滯後平方收益添加為外部回歸量。結果應該是相同的,但不是。你們有誰知道我的錯誤在哪裡?非常感謝您的幫助。
library(rugarch) library(quantmod) getSymbols('C', from = '2000-01-01') C = adjustOHLC(C, use.Adjusted = TRUE) R_d = ROC(Cl(C), na.pad = FALSE) extReg = R_d[1:length(R_d)-1]^2 spec = ugarchspec(mean.model = list(armaOrder = c(0, 0),include.mean = FALSE), variance.model = list(model = 'sGARCH', garchOrder = c(1, 1)), distribution = 'norm') spec2 = ugarchspec(mean.model = list(armaOrder = c(0, 0),include.mean = FALSE), variance.model = list(model = 'sGARCH', garchOrder = c(0, 1),external.regressors=extReg), distribution = 'norm') fit = ugarchfit(data = R_d[2:length(R_d),1], spec = spec) fit2 = ugarchfit(data = R_d[2:length(R_d),1], spec = spec2)
擬合模型的係數為:
omega: 2.1038530309075e-06 alpha1: 0.0863073049030114 beta1: 0.912692551076183
fit2 模型的係數為:
omega: 8.17097079205033e-07 beta1: 0.999316873189476 vxreg1: 1.01005006640392e-08
我發現了錯誤。ugarchfit 函式自動為所有係數設置非負約束——這是有道理的,因為在我們的例子中 alpha 不應該是負的。但是,當將約束釋放為負值時,您會得到正確的結果。我能想到的唯一解釋是,在優化過程中,暫時出現了負係數估計。
setbounds(spec2)<-list(vxreg1=c(-1,1))