原文链接:http://tecdat.cn/?p=3385
原文出处:拓端数据部落公众号
最近我被要求撰写对于金融工夫序列的 copulas 的考察。从读取数据中取得各种模型的形容,包含一些图形和统计输入。
> oil = read.xlsx(temp,sheetName =“DATA”,dec =“,”)
而后咱们能够绘制这三个工夫序列
1 1997-01-10 2.73672 2.25465 3.3673 1.5400
2 1997-01-17 -3.40326 -6.01433 -3.8249 -4.1076
3 1997-01-24 -4.09531 -1.43076 -6.6375 -4.6166
4 1997-01-31 -0.65789 0.34873 0.7326 -1.5122
5 1997-02-07 -3.14293 -1.97765 -0.7326 -1.8798
6 1997-02-14 -5.60321 -7.84534 -7.6372 -11.0549
这个想法是在这里应用一些多变量 ARMA-GARCH 过程。这里的启发式是第一局部用于模仿工夫序列平均值的动静,第二局部用于模仿工夫序列方差的动静。
本文思考了两种模型
- 对于 ARMA 模型残差的多变量 GARCH 过程(或方差矩阵动力学模型)
- 对于 ARMA-GARCH 过程残差的多变量模型(基于 copula)
因而,这里将思考不同的序列,作为不同模型的残差取得。咱们还能够将这些残差标准化。
ARMA 模型
> fit1 = arima(x = dat \[,1\],order = c(2,0,1))> fit2 = arima(x = dat \[,2\],order = c(1,0,1))> fit3 = arima(x = dat \[,3\],order = c(1,0,1))> m < - apply(dat_arma,2,mean)> v < - apply(dat_arma,2,var)> dat\_arma\_std < - t((t(dat_arma)-m)/ sqrt(v))
ARMA-GARCH 模型
> fit1 = garchFit(formula = ~arma(2,1)+ garch(1,1),data = dat \[,1\],cond.dist =“std”)> fit2 = garchFit(formula = ~arma(1,1)+ garch(1,1),data = dat \[,2\],cond.dist =“std”)> fit3 = garchFit(formula = ~arma(1,1)+ garch(1,1),data = dat \[,3\],cond.dist =“std”)> m\_res < - apply(dat\_res,2,mean)> v\_res < - apply(dat\_res,2,var)> dat\_res\_std = cbind((dat\_res \[,1\] -m\_res \[1\])/ sqrt(v\_res \[1\]),(dat\_res \[,2\] -m\_res \[2\])/ sqrt(v\_res \[2\]),(dat\_res \[,3\] -m\_res \[3\])/ SQRT(v_res \[3\]))
多变量 GARCH 模型
能够思考的第一个模型是 协方差矩阵 的多变量 EWMA,
> ewma = EWMAvol(dat\_res\_std,lambda = 0.96)
波动性
> emwa\_series\_vol = function(i = 1){+ lines(Time,dat_arma \[,i\] + 40,col =“gray”)+ j = 1
+ if(i == 2)j = 5
+ if(i == 3)j = 9
隐含相关性
> emwa\_series\_cor = function(i = 1,j = 2){
+ if((min(i,j)== 1)&(max(i,j)== 2)){+ a = 1; B = 9; AB = 3}
+ r = ewma $ Sigma.t \[,ab\] / sqrt(ewma $ Sigma.t \[,a\] *
+ ewma $ Sigma.t \[,b\])+ plot(Time,r,type =“l”,ylim = c(0,1))+}
多变量 GARCH,即 BEKK(1,1) 模型,例如应用:
> bekk = BEKK11(dat_arma)> bekk\_series\_vol function(i = 1){+ plot(Time,$ Sigma.t \[,1\],type =“l”,+ ylab =(dat)\[i\],col =“white”,ylim = c(0,80))+ lines(Time,dat_arma \[,i\] + 40,col =“gray”)+ j = 1
+ if(i == 2)j = 5
+ if(i == 3)j = 9
> bekk\_series\_cor = function(i = 1,j = 2){+ a = 1; B = 5; AB = 2}
+ a = 1; B = 9; AB = 3}
+ a = 5; B = 9; AB = 6}
+ r = bk $ Sigma.t \[,ab\] / sqrt(bk $ Sigma.t \[,a\] *
+ bk $ Sigma.t \[,b\])
从单变量 GARCH 模型中模仿残差
第一步可能是思考残差的一些动态(联结)散布。单变量边缘散布是
边缘密度的轮廓(应用双变量核预计器取得)
也能够将 copula 密度可视化(下面有一些非参数估计,上面是参数 copula)
> copula_NP = function(i = 1,j = 2){
+ n = nrow(uv)+ s = 0.3
+ norm.cop < - normalCopula(0.5)+ norm.cop < - normalCopula(fitCopula(norm.cop,uv)@estimate)+ dc = function(x,y)dCopula(cbind(x,y),norm.cop)+ ylab = names(dat)\[j\],zlab =“copule Gaussienne”,ticktype =“detailed”,zlim = zl)+
+ t.cop < - tCopula(0.5,df = 3)+ t.cop < - tCopula(t.fit \[1\],df = t.fit \[2\])+ ylab = names(dat)\[j\],zlab =“copule de Student”,ticktype =“detailed”,zlim = zl)+}
能够思考这个 函数,
计算三个序列的的教训版本,并将其与一些参数版本进行比拟,
>
> lambda = function(C){
+ l = function(u)pcopula(C,cbind(u,u))/ u
+ v = Vectorize(l)(u)+ return(c(v,rev(v)))+}
>
> graph_lambda = function(i,j){
+ X = dat_res
+ U = rank(X \[,i\])/(nrow(X)+1)+ V = rank(X \[,j\])/(nrow(X)+1)+ normal.cop < - normalCopula(.5,dim = 2)+ t.cop < - tCopula(.5,dim = 2,df = 3)+ fit1 = fitCopula(normal.cop,cbind(U,V),method =“ml”)d(U,V),method =“ml”)+ C1 = normalCopula(fit1 @ copula @ parameters,dim = 2)+ C2 = tCopula(fit2 @ copula @ parameters \[1\],dim = 2,df = trunc(fit2 @ copula @ parameters \[2\]))+
但人们可能想晓得相关性是否随工夫稳固。
> time\_varying\_correl_2 = function(i = 1,j = 2,+ nom_arg =“Pearson”){+ uv = dat_arma \[,c(i,j)\]
nom_arg))\[1,2\]
+}
> time\_varying\_correl_2(1,2)> time\_varying\_correl_2(1,2,“spearman”)> time\_varying\_correl_2(1,2,“kendall”)
斯皮尔曼与时变排名相关系数
或肯德尔 相关系数
为了模型的相关性,思考DCC 模型(S)
> m2 = dccFit(dat\_res\_std)> m3 = dccFit(dat\_res\_std,type =“Engle”)> R2 = m2 $ rho.t
> R3 = m3 $ rho.t
要取得一些预测,应用例如
> garch11.spec = ugarchspec(mean.model = list(armaOrder = c(2,1)),variance.model = list(garchOrder = c(1,1),model =“GARCH”))> dcc.garch11.spec = dccspec(uspec = multispec(replicate(3,garch11.spec)),dccOrder = c(1,1),distribution =“mvnorm”)> dcc.fit = dccfit(dcc.garch11.spec,data = dat)> fcst = dccforecast(dcc.fit,n.ahead = 200)
最受欢迎的见解
1.HAR-RV- J 与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率
2.R 语言中基于混合数据抽样 (MIDAS) 回归的 HAR-RV 模型预测 GDP 增长回归的 HAR-RV 模型预测 GDP 增长 ”)
3.稳定率的实现:ARCH 模型与 HAR-RV 模型
4.R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测
5.GARCH(1,1),MA 以及历史模拟法的 VaR 比拟
6.R 语言多元 COPULA GARCH 模型工夫序列预测
7.R 语言基于 ARMA-GARCH 过程的 VAR 拟合和预测
8.matlab 预测 ARMA-GARCH 条件均值和方差模型
9.R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略