rugarch包与R语言中的garch族模型

来源: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

原文地址:https://www.cnblogs.com/lantingg/p/8640595.html

时间: 2024-08-28 13:36:38

rugarch包与R语言中的garch族模型的相关文章

R语言中apply函数

前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言本身来实现的,而向量操作是基于底层的C语言函数实现的,从性能上来看,就会有比较明显的差距了.那么如何使用C的函数来实现向量计算呢,就是要用到apply的家族函数,包括apply, sapply, tapply, mapply, lapply, rapply, vapply, eapply等. 目录

R语言中 fitted()和predict()的区别

fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何.fit<-lm(weight~height,data=women)fitted(fit) predict(fit,newdata=data.frame(height=90))##将90代入看结果如何这是R in action中的例子 R语言中 fitted()和predict()的区别,布布扣,bubuko.com R语言中 fi

R 语言中 data table 的相关,内存高效的 增量式 data frame

面对的是这样一个问题,不断读入一行一行数据,append到data frame上,如果用dataframe,  rbind() ,可以发现数据大的时候效率明显变低. 原因是 每次bind 都是一次重新整个数据集的重新拷贝 这个链接有人测试了各种方案,似乎给出了最优方案 http://stackoverflow.com/questions/11486369/growing-a-data-frame-in-a-memory-efficient-manner library(data.table) d

数据的标准化与中心化以及R语言中的scale详解(转)

1.数据的中心化 所谓数据的中心化是指数据集中的各项数据减去数据集的均值.例如有数据集1, 2, 3, 6, 3,其均值为3,那么中心化之后的数据集为1-3,2-3,3-3,6-3,3-3,即:-2,-1,0,3,0 2.数据的标准化所谓数据的标准化是指中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差.例如有数据集1, 2, 3, 6, 3,其均值为3,其标准差为1.87,那么标准化之后的数据集为(1-3)/1.87,(2-3)/1.87,(3-3)

R语言中的read.table()

参考资料:http://www.cnblogs.com/xianghang123/archive/2012/06/06/2538274.html read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"

卡尔曼滤波器:用R语言中的KFAS建模时间序列

于时间序列预测,ARIMA等传统模型通常是一种流行的选择.虽然这些模型可以证明具有高度的准确性,但它们有一个主要缺点 - 它们通常不会解释“冲击”或时间序列的突然变化.让我们看看我们如何使用称为卡尔曼滤波器的模型来潜在地缓解这个问题. 时间序列  我们以货币市场为例.货币对可能会有整体上升趋势,然后在抛售期间大幅下跌.传统的时间序列模型不一定能够立即解决这个问题,并且在考虑到趋势的突然变化之前可能需要几个时期. 因此,我们希望使用一个确实能够解释这种冲击的时间序列模型.让我们来看一个称为卡尔曼滤

R语言中aggregate函数

前言 这个函数的功能比较强大,它首先将数据进行分组(按行),然后对每一组数据进行函数统计,最后把结果组合成一个比较nice的表格返回.根据数据对象不同它有三种用法,分别应用于数据框(data.frame).公式(formula)和时间序列(ts): aggregate(x, by, FUN, ..., simplify = TRUE) aggregate(formula, data, FUN, ..., subset, na.action = na.omit) aggregate(x, nfre

R语言中的Theil-Sen回归分析

原文链接:http://tecdat.cn/?p=10080  Theil-Sen估计器是一种在社会科学中不常用 的简单线性回归估计器  .三个步骤: 在数据中所有点之间绘制一条线 计算每条线的斜率 中位数斜率是 回归斜率 用这种方法计算斜率非常可靠.当误差呈正态分布且没有异常值时,斜率与OLS非常相似. 有几种获取截距的方法.如果 关心回归中的截距,那么知道 软件在做什么是很合理的. 当我对异常值和异方差性有担忧时,请在上方针对Theil-Sen进行简单线性回归的评论 . 我进行了一次 模拟,

R语言中else if 常见错误

if (0.1>RATE=>0){wthistory=0} else if(0.3>RATE=>0.1){wthistory=5} else if(0.5>RATE=>0.3){wthistory=10} else if(0.7>RATE=>0.5){wthistory=15} else if(0.9>RATE=>0.7){wthistory=15} else{wthistory=30} R语言中支持 else if 的判断,但是上面的写法是错误