deem 发表于 2017-8-20 19:13
我看错了,不一致
试了一段时间,两个问题:1、仔细检查后,我的似然函数写错了
,2、目标函数里面用了for循环,貌似用for循环会大大降低运算速度,但是对于garch模型来说,如何写成非循环的形式呢?
- ##generate a time series based on garch(1,1) model##
- h0<-0
- sigma0<-1
- ht<-h0
- et<-sigma0
- a<-0.1
- b<-0.85
- for(i in 2:10100){
- ht[i]<-1+a*ht[i-1]+b*et[i-1]^2
- et[i]<-rnorm(1,0,ht[i]^0.5)
- }
- rt<-et[-1:-100]
- plot(rt,type="l")
- library(fGarch)
- m1<-garchFit(~1+garch(1,1),data=rt,trace=F)
- lf<-function(pa){
- c<-pa[1]
- mu<-pa[2]
- a<-pa[3]
- b<-pa[4]
- ht<-0##we can adjust this paramater##
- N<-length(rt)-1
- for(i in 2:length(rt)){
- ht[i]<-mu+b*(rt[i-1]-c)^2+a*ht[i-1]
- }
- l<--0.5*N*log(2*pi) - 0.5*sum(log(ht[-1])) - sum(0.5*(rt[-1] -c)^2/ht[-1])
- result<-l
- return(result)
- }
- library(maxLik)
- A<-matrix(c(0,1,0,0,0,0,-1,-1),ncol=4,byrow=T)
- B<-matrix(c(0,1),ncol=1)
- est<-maxLik(lf,start=c(0,0.2,0,0.8),constraints = list(ineqA=A,ineqB=B))
- est
复制代码