2014-03-27 124 views
3

我一直在使用兩個包fGarch和rugarch來擬合我的匯率時間序列GARCH(1,1)模型,包括每日3980登錄回報。使用R(rugarch&fGarch包)的GARCH模型中參數估計的不同意義

fx_rates <- data.frame(read.csv("WMCOFixingsTimeSeries.csv", header=T, sep=";", stringsAsFactors=FALSE)) 
#data series 
EURUSD <- ts(diff(log(fx_rates$EURUSD), lag=1), frequency=1) 

#GARCH(1,1) 
library(timeSeries) 
library(fGarch) 
x <- EURUSD 
fit <- garchFit(~garch(1,1), data=x, cond.dist="std", trace=F, include.mean=F) 
[email protected]$matcoef 

library(rugarch) 
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)), 
       mean.model=list(armaOrder=c(0,0), include.mean=F), distribution.model="std") 
gfit <- ugarchfit(spec, x, solver="hybrid", fit.control=list(stationarity=0)) 
[email protected]$matcoef 

兩個模型顯示結果如下:

fGarch:

[email protected]$matcoef 
     Estimate Std. Error t value  Pr(>|t|) 
omega 1.372270e-07 6.206406e-08 2.211054 2.703207e-02 
alpha1 2.695012e-02 3.681467e-03 7.320484 2.471356e-13 
beta1 9.697648e-01 3.961845e-03 244.776060 0.000000e+00 
shape 8.969562e+00 1.264957e+00 7.090804 1.333378e-12 

rugarch:

[email protected]$matcoef 
      Estimate Std. Error  t value  Pr(>|t|) 
omega 1.346631e-07 3.664294e-07 0.3675008 7.132455e-01 
alpha1 2.638156e-02 2.364896e-03 11.1554837 0.000000e+00 
beta1 9.703710e-01 1.999087e-03 485.4070764 0.000000e+00 
shape 8.951322e+00 1.671404e+00 5.3555696 8.528729e-08 

我發現爲什麼估計是不相同的線程http://r.789695.n4.nabble.com/Comparison-between-rugarch-and-fGarch-td4683770.html ,但我無法弄清楚標準錯誤和那裏的巨大差異通過歐米茄的不同意義。這種差異並不是由平穩約束引起的,因爲ω仍然不明顯。有人知道估計參數(歐米伽,阿爾法,貝塔和努(形狀))的標準誤差是如何計算的?

回答

1

如果H是您的Hessian和G是你的漸變,讓C = H^-1 (G^T * G) H^-1,也就是H倒數乘以矩陣相乘G轉用G,然後用H逆結果再次相乘的結果。標準誤差係數就是其對角線條目的平方根,即sqrt(diag(C))。您可以通過fGarch:::.garchFit的代碼仔細查看:

# Standard Errors and t-Values: 
if (DEBUG) print("Standard Errors and t-Values ...") 
fit$cvar <- 
    if (robust.cvar) 
     (solve(fit$hessian) %*% (t(fit$gradient) %*% fit$gradient) %*% 
     solve(fit$hessian)) 
    else 
     - solve(fit$hessian) 
fit$se.coef = sqrt(diag(fit$cvar)) 
fit$tval = fit$coef/fit$se.coef 
fit$matcoef = cbind(fit$coef, fit$se.coef,