源代码+论坛相似问题+补充
这是小弟做的DCC-GARCH模型程序。
1、源代码
- x=read.table("D:\\Backup\\我的文档\\研究生\\dcc-garch\\新数据\\中日收益.txt");<?xml:namespace prefix = "o" ns = "urn:schemas-microsoft-com:office:office" />
- library(ccgarch);
- library(fGarch);
- library(MASS);
- library(FinTS);
- library(tseries);
- library(vars);
- xt<-ts(x[,1:2],start=c(1,1));
- plot(xt, plot.type = "single",col=c("red","black"),lty=1:2);
- leg.names<-c("上证指数收益","日经指数收益");
- legend(locator(1),leg.names,lty=c(1,2), col=c("red","black"));
- y=xt[,1];
- z=xt[,2];
- data_outline <- function(x){
- n <- length(x)
- m <- mean(x)
- v <- var(x)
- s <- sd(x)
- me <- median(x)
- cv <- 100*s/m
- css <- sum((x-m)^2)
- uss <- sum(x^2)
- R <- max(x)-min(x)
- R1 <- quantile(x,3/4)-quantile(x,1/4)
- sm <- s/sqrt(n)
- g1 <- n/((n-1)*(n-2))*sum((x-m)^3)/s^3
- g2 <- ((n*(n+1))/((n-1)*(n-2)*(n-3))*sum((x-m)^4)/s^4- (3*(n-1)^2)/((n-2)*(n-3)))
- data.frame(N=n, Mean=m, Var=v, std_dev=s,
- Median=me, std_mean=sm, CV=cv, CSS=css, USS=uss,
- R=R, R1=R1, Skewness=g1, Kurtosis=g2, row.names=1)
- }
- data_outline(y);
- data_outline(z);
- jarque.bera.test(y);
- jarque.bera.test(z);
- c(ucv(y,length(y)),bcv(y,length(y)));
- plot(density(y,width=0.006),lty=3,ylim=c(0,80));
- hist(y,prob=T,col=0,add=T);
- a<-seq(-0.1,0.1,0.001);
- lines(a,dnorm(a,mean(y),sqrt(var(y))),lty=1);
- leg.names<-c("Kernel Density","Normal Density");
- legend(locator(1),leg.names,lty=c(3,1));
- c(ucv(z,length(z)),bcv(z,length(z)));
- plot(density(z,width=0.005),lty=3,ylim=c(0,80));
- hist(z,prob=T,col=0,add=T);
- lines(a,dnorm(a,mean(z),sqrt(var(z))),lty=1);
- leg.names<-c("Kernel Density","Normal Density");
- legend(locator(1),leg.names,lty=c(3,1));
- adf.test(y, alternative = c("stationary", "explosive"),k = trunc((length(y)-1)^(1/3)));
- adf.test(z, alternative = c("stationary", "explosive"),k = trunc((length(z)-1)^(1/3)));
- ArchTest(y,lags=3,demean=T); #最后一项是为了去掉均值。
- ArchTest(z,lags=5,demean=T);
- garch.y=garch(y,order=c(1,1));
- summary(garch.y);
- garch.z=garch(z,order=c(1,1));
- summary(garch.z);
- inia=c(4.361e-07,8.327e-07);
- iniA=diag(c(4.769e-02,1.349e-01));
- iniB=diag(c(9.460e-01,8.546e-01));
- nobs=1713;
- dcc.para<-c(0.01,0.97);
- inicor=cor(y,z);
- uncR=matrix(c(1,inicor,inicor,1),2,2);
- dcc.results <- dcc.estimation(inia, iniA, iniB, dcc.para, dvar=xt, model="diagonal");
- out<-dcc.results$out;
- DCC<-dcc.results$DCC[,2];
- ts.plot(DCC);
2、论坛相似问题
大海之子 :
ccgarch程序包给出的示例是这样子的
- Examples
- # Simulating data from the original DCC-GARCH(1,1) process
- nobs <- 1000; cut <- 1000
- a <- c(0.003, 0.005, 0.001)
- A <- diag(c(0.2,0.3,0.15))
- B <- diag(c(0.75, 0.6, 0.8))
- uncR <- matrix(c(1.0, 0.4, 0.3, 0.4, 1.0, 0.12, 0.3, 0.12, 1.0),3,3)
- dcc.para <- c(0.01,0.98)
- dcc.data <- dcc.sim(nobs, a, A, B, uncR, dcc.para, model="diagonal")
- # Estimating a DCC-GARCH(1,1) model
- dcc.results <- dcc.estimation(inia=a, iniA=A, iniB=B, ini.dcc=dcc.para,
- dvar=dcc.data$eps, model="diagonal")
里面的变量都是事先给定的,问题就在这里,相当于先假设一个DCC-GARCH,再用这些数去估计DCC-GARCH。不明白为什么?
bensonwu :
A、B等这些初始化值设定比较好的方法是:先估计各自的garch参数,将其变换组合后作为初始值。知道各种数值优化方法特性就会知道初始值的设定对优化结果影响较大,而DCC-GARCH求解的过程就是数值优化的过程。
3、补充
epoh
dccstarting value 是如此设置 dccstarting=[ones(1,dccP)*.01/dccP ones(1,dccQ)*.97/dccQ]; 也就是当dccP = 1, dccQ = 1 ini.dcc 设置为 c(0.01,0.97) |
——有谁做过DCC-GARCH模型的,请教高手。。。
本文来自: 人大经济论坛 R语言论坛 版,详细出处参考: https://bbs.pinggu.org/forum.php?mod=viewthread&tid=861027&page=3&from^^uid=3495972
——素质版主 改