R基础很差,最近论文要先做一个simulation,我就生成了最简单的二元garch模型,想用QMLE去估计,跑出来的结果跟自己设定的差老远了,想了很久没想出问题在哪,还请高手指点呀感激感激
还有garch序列的方差初始值在设定的时候有什么要求吗,参数估计时的初始值要跟生成时的一致请问
#y[t]=epsilon[t]
#epsilon[t]=eta[t]*sqrt(h[t])
#h[t]=omega+alpha*epsilon[t-1]^2+beta*h[t-1]
nT<-1000; burnin=100; T=burnin+nT
epsilon<-matrix(nrow=T,ncol=2)
h<-matrix(nrow=T,ncol=2)
eta<-matrix(nrow=T,ncol=2)
y<-matrix(nrow=T,ncol=2)
#模拟二元GARCH-Copula
#step1:生成新息
library(copula)
set.seed(1)
innovation<-rCopula(n=T,normalCopula(0.5438,dim = 2))
#step2:设定模型参数
eta=innovation
omega<-matrix(c(0.8,0.5),1,2)
alpha<-matrix(c(0.4,0.2),1,2)
beta<-matrix(c(0.2,0.3),1,2)
h[1,]=c(4,4)
epsilon[1,]=eta[1,]*sqrt(h[1,])
#step3:循环生成两garch序列
for(t in 2:T){
h[t,]=omega[1,]+alpha[1,]*(epsilon[t-1,])^2+beta[1,]*h[t-1,]
epsilon[t,]=eta[t,]*sqrt(h[t,])
y[t,]=epsilon[t,]}
#step4:remove burnin period
data=y[burnin+1:nT,]
vol=h[burnin+1:nT,]
r1<-data[,1]
r2<-data[,2]
h1<-numeric(T)
h2<-numeric(T)
#QMLE估计GARCH模型参数
LL<-function(pa){
omega_1<-pa[1]
omega_2<-pa[2]
alpha_1<-pa[3]
alpha_2<-pa[4]
beta_1<-pa[5]
beta_2<-pa[6]
h1[1]<-4
h2[1]<-4
for(t in 2:T){
h1[t]=omega_1+alpha_1*(r1[t-1])^2+beta_1*h1[t-1]
h2[t]=omega_2+alpha_2*(r2[t-1])^2+beta_2*h2[t-1]
}
vol1<-h1[burnin+1:nT]
vol2<-h2[burnin+1:nT]
l<--0.5/(nT)*(sum(log(vol1))+sum(log(vol2))+sum(r1^2/vol1)+sum(r2^2/vol2))
return(l)
}
library(maxLik)
A<-matrix(c(1,0,0,0,0,0,
0,1,0,0,0,0,
0,0,1,0,0,0,
0,0,0,1,0,0,
0,0,0,0,1,0,
0,0,0,0,0,1,
0,0,-1,0,-1,0,
0,0,0,-1,0,-1),nrow=8,byrow=TRUE)
B<-matrix(c(0,0,0,0,0,0,1,1),ncol=1)
est<-maxLik(LL,start=c(0.8,0.5,0.4,0.2,0.2,0.3),constraints = list(ineqA=A,ineqB=B))
est