maxLik函数出错

时间:2018-05-26 21:02:27

标签: r optimization

我试图通过使用似然比检验来比较两个分布。我使用maxLik函数来获取null和替代分布的mles。我想使用BFGSR方法,因为它提供了更好的估计。

library("maxLik")

library("flexsurv")


n=20

den1=1000
mpar=3
omepar=5
spar=3


Logliknak1=function(param){
m=param[1]
o=param[2]
n*(log(2)+m*log(m)-lgamma(m)-m*log(o))+(2*m-1)*sum(log(y))-(m/o)*sum(y^(2))
}


Loglikgennak= function(param){
 s <- param[1]
 ome <- param[2]
 m<-param[3]
(n*(log(2*s)+m*log(m)-lgamma(m)-m*log(ome))+(2*m*s-1)*sum(log(y))-(m/ome)*sum(y^(2*s)))
}

LR2=rep(0,den1)
ps=0; pome=0; pm=0;

for(i in 1:den1){
repeat
{
x=rgengamma.orig(n,shape=spar,scale=(omepar/mpar),k=mpar)
y=x^0.5


ot=mean(y^2)
mt=(mean(y)*mean(y^2))/(2*(mean(y^3)-(mean(y)*mean(y^2))))

mle2 <- maxLik(logLik=Logliknak1, start = c(m=mt, o=ot),method="BFGSR")
lnull=logLik(mle2)

mm=coef(mle2)[[1]]
mo=coef(mle2)[[2]]


mle3 <- maxLik(logLik=Loglikgennak, start = c(s=1.5,ome=omepar+1,m=mpar+1),method="BFGSR")

lalt=logLik(mle3)

ps=coef(mle3)[[1]]
pome=coef(mle3)[[2]]
pm=coef(mle3)[[3]]


if (lalt>lnull && ps>1 && pome>0 && pm>0)

{break}

}

LR2[i]=2*(lalt-lnull)
print(i)
print(LR2[i])
print(pm)
print(pome)
print(ps)
}

但是我不断收到以下错误消息:

Error in if (all(y == 0)) { : missing value where TRUE/FALSE needed

我该如何解决这个问题?

0 个答案:

没有答案