程序如下:
psi=c("p","mu","lam1","ome1","ome2","eps1","eps2","sig1","sig2","alp1","alp2","bet1","bet2","d")
fn=function(psi)
{
n=length(y)
epsi=numeric(n)
sigm1=numeric(n)
sigm2=numeric(n)
epsi0=(p*lam1^2+(1-p)*(p*lam1/(1-p))^2+p*ome1/(1-bet1)+(1-p)*ome2/(1-bet2))/(p*(1-alp1-bet1)/(1-bet1)+(1-p)*(1-alp2-bet2)/(1-bet2))
sigm1[1]=(ome1+alp1*epsi0)/(1-bet1)
sigm2[1]=(ome2+alp2*epsi0)/(1-bet2)
for(t in 1:n)
{
sigm1[t+1]=ome1+alp1*epsi0+bet1*sigm1[t]
sigm2[t+1]=ome2+alp2*epsi0+bet2*sigm2[t]
}
for (t in 1)
{
epsi[t]=(y[1]-mu)/gamma(1)
}
for (t in 2)
{
epsi[t]=(y[2]-mu)/gamma(1)+gamma(1-d)*(y[1]-mu)/(gamma(-d)*gamma(2))
}
for(t in 3:n)
{
epsi[t]=(y[t]-mu)/gamma(1)+gamma(1-d)*(y[t-1]-mu)/(gamma(-d)*gamma(2))+gamma(2-d)*(y[t-2]-mu)/(gamma(-d)*gamma(3))
}
llk=sum(log(p*sigm1[t+1]^(-0.5)*exp(-0.5*((epsi[t]-lam1)/sigm1[t+1])^2)+(1-p)*sigm2[t+1]^(-0.5)*exp(-0.5*((epsi[t]-lam2)/sigm2[t+1])^2)+(n/2)*ln(2*pi)))
return(-llk)
}
optim(r=c(0.5,rep(0,13)),fn,method="L-BFGS-B" )
错误提示:错误于optim(r = c(0.5, rep(0, 13)), fn, method = "L-BFGS-B") :
cannot coerce type 'closure' to vector of type 'double'
mle(fn, start =list(p=0.5,mu=0,lam1=0,ome1=0,ome2=0,eps1=0,eps2=0,sig1=0,sig2=0,alp1=0,alp2=0,bet1=0,bet2=0,d=0), method = "BFGS")
错误提示:错误于mle(fn, start = list(p = 0.5, mu = 0, lam1 = 0, ome1 = 0, ome2 = 0, :
'start'里的一些带名参数不是给所提供的对数似然作为参数来用的
求帮助,求拯救,我自己看不出问题,非常感谢!