Мне нужно оценить параметры ZIGP-2, используя MLE в R. Я написал функцию правдоподобия, как указано ниже:
zigp_likelihood = function(par,ClaimNb)
{ mu=par[1]
alpha=par[2]
p=par[3]
for(ObsI in 1:length(ClaimNb)){
LogLike[ObsI] = u*log(p + (1-p)*exp(-mu/(1+alpha * mu)) ) + (1-u)*( log(1-p) + ClaimNb[ObsI]*log(mu/(1+alpha*mu)) + (ClaimNb[ObsI]-1)*log((1+alpha*ClaimNb[ObsI])/factorial(ClaimNb[ObsI])) + ((-mu*(1+alpha*ClaimNb[ObsI]))/(1+alpha*mu)) ) (ClaimNb[ObsI]-1)*log((1+alpha*ClaimNb[ObsI])/factorial(ClaimNb[ObsI])) + ((-mu*(1+alpha*ClaimNb[ObsI]))/(1+alpha*mu)) )
u<-c(1,0)
if (ClaimNb<-0) {
(u<-1)
}
else if (ClaimNb>0) {
(u==0)
}
Return = sum(LogLike)
return(-Return)
}
}
optim(par=c(3,2,0.1),fn=zigp_likelihood , ClaimNb=ClaimNb)
, где ClaimNb - переменная, следующая за ZIGP-2.
И я получаю оценки как:
$ par [1] 2.517901 2.268634 1.000000
$ value [1] 7.543005e-10
$ считает функцию градиента 174 NA
$ Convergence [1] 0
$ message NULL
Было 50 или более предупреждений (используйте warnings (), чтобы увидеть первые 50 )
У меня такое ощущение, что вывод неправильный, потому что в других случаях, когда я пробовал тот же код, я получал ошибку.
Может кто-нибудь сказать, если функция вероятности код правильный? В R нет пакета для ZIGP. Предыдущий пакет ZIGP был отключен.