1. 程式人生 > >rugarch包與R語言中的garch族模型

rugarch包與R語言中的garch族模型

-m c函數 hcl null station fpm IT dual list

來源:http://www.dataguru.cn/article-794-1.html

rugarch包是R中用來擬合和檢驗garch模型的一個包。該包最早在http://rgarch.r-forge.r-project.org上發布,現已發布到CRAN上。簡單而言,該包主要包括四個功能:

  • 擬合garch族模型
  • garch族模型診斷
  • garch族模型預測
  • 模擬garch序列
  • 擬合序列分布

下面分別說一下。

一、擬合garch族模型

擬合garch族模型分三個步驟:
(1)通過ugarchspec函數設定模型形式
(2)通過ugarchfit函數擬合模型

設定模型形式

一個典型的garch(p,q)模型如下:

技術分享圖片 

技術分享圖片

技術分享圖片

該模型由三個部分構成,均值方程對應式(1),分布假設對應(2),方差方程對應式(3),對三個部分進行適當的變形後可以形成egarch模型,egarch-ged模型,egarch-t模型,Igarch模型,garch-m模型和Qgarch模型等。因此,設定模型形式就是分別設定均值方程、方差方程和分布。

rugarch包的優越之處正在於這裏。ugarchspec函數的參數也被分解為為三個主要部分,分別是variance.model,對應式(3),mean.model,對應式(1),distribution.model對應式(2)中的$\epsilon$。用戶通過對三個部分的參數的分別設定從而構造出自己想用的模型。

舉個例子:

variance.model = list(model = "sGARCH", garchOrder = c(1, 1),submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),

表示擬合的方差模型為sGARCH,方差模型的自回歸階數是(1,1),方差模型中未引入外生變量。

mean.model = list(armaOrder = c(1, 1), include.mean = TRUE, archm = FALSE, archpow = 1, arfima = FALSE, external.regressors = NULL, archex = FALSE)

表示均值方程為arma(1,1)模型,方程自變量中包含均值,未引入外生變量。

distribution.model = "norm"

表示模型分布假設為正態分布。
將三個部分裝入ugarchspec的參數中就可以完成一個sgarch(1,1)-norm模型的模型設定。

myspec=ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), mean.model = list(armaOrder = c(1, 1), include.mean = TRUE, archm = FALSE, archpow = 1, arfima = FALSE, external.regressors = NULL, archex = FALSE), distribution.model = "norm")

擬合模型

擬合模型的函數是ugarchfit。ugarchfit的參數如下:

ugarchfit(spec, data, out.sample = 0, solver = "solnp", solver.control = list(),fit.control = list(stationarity = 1, fixed.se = 0, scale = 0), ...)

其中,spec為ugarchspec函數的結果,data為數據對象。solver為優化算法。solver.control設定優化參數,fit.control設定擬合參數。
接上面的例子:

myfit=ugarchfit(myspec,data=sp500ret,solver="solnp")

到這裏一個garch模型就完成了。

查看結果

鍵入下列代碼查看模型的擬合結果:

技術分享圖片

提取模型結果

rugarch包中模型結果的提取要依靠as.data.frame函數。比如提取模型的擬合值

as.data.frame(myfit,which="fitted")

提取殘差序列:

as.data.frame(myfit,which=" residuals")

提取方差序列:

as.data.frame(myfit,which="sigma")

當然,也可以同時查看所有:

as.data.frame(myfit,which=all)

或者

as.data.frame(myfit)

兩個語句等價。

二、模型診斷

通過plot(myfit)可以對模型結果進行圖形診斷:

> plot(myfit)
Make a plot selection (or 0 to exit):
1: Series with 2 Conditional SD Superimposed
2: Series with 2.5% VaR Limits (with unconditional mean)
3: Conditional SD
4: ACF of Observations
5: ACF of Squared Observations
6: ACF of Absolute Observations
7: Cross Correlation
8: Empirical Density of Standardized Residuals
9: QQ-Plot of Standardized Residuals10: ACF of Standardized Residuals11: ACF of Squared Standardized Residuals12: News-Impact CurveSelection: 1

三、模型預測

如果模型通過檢驗,可以用ugarchforcast函數對未來進行預測:

技術分享圖片

可以用fpm或者plot來查看模型的預測結果。比如:

> plot(fore)
Make a plot selection (or 0 to exit):
1: Time Series Prediction (unconditional)
2: Time Series Prediction (rolling)
3: Conditional SD PredictionSelection: 1

rugarch包與R語言中的garch族模型