全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1305 1
2020-01-09
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



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-1-15 15:22:28
已找到问题,rCopula生成的随机序列不能直接作为标准化残差,还应该用qnorm
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群