Sam Wong
2006-Sep-08 23:34 UTC
[R] maximizing a likelihood function containing an integral
Hi, R Users; I am trying to maximize a likelihood function which contains an integral. The integral contains the unknown parameter as well. I am trying to use the following code to do the maximization: ll<-function(b.vec){ b0<-b.vec[1] b1<-b.vec[2] b2<-b.vec[3] p<-1/(1+exp(-b0-b1*z1-b2*x2)) lik1<-p^y*(1-p)^(1-y)*exp(-(z1^2+x2^2-2*rho*z1*x2)/(2*(1-rho^2))) log.lik1<-sum(log(lik1[1:n1])) log.lik2<-0 for(j in (n1+1):n){ integrand<-function(u,B0,B1,B2){ exp(-y[j]*(B0+B1*u+B2*x2[j])-(u-rho*x2[j])^2/2)/(1+exp(B0+B1*u+B2*x2[j])) } log.lik2<-log.lik2+log(integrate(integrand,lower=1,upper=Inf,B0=b0,B1=b1,B2=b2)$integral) } log.lik<-log.lik1+log.lik2 } start<-c(0,0,0) nlminb(start,ll) The error message is: Error in log(x) : Non-numeric argument to mathematical function Suggestions are welcome. Thanks Ming Ji
Ben Bolker
2006-Sep-11 13:08 UTC
[R] maximizing a likelihood function containing an integral
Sam Wong <qxsr <at> yahoo.com> writes:> > > Hi, R Users; > > I am trying to maximize a likelihood function which > contains an integral. The integral contains the > unknown parameter as well. I am trying to use the > following code to do the maximization: >[snip]> The error message is: > Error in log(x) : Non-numeric argument to mathematical > function >The only obvious (?) mistake in the code is that you refer to integrate(...)$integral -- the help page for ?integrate says that $value is the estimate of the integral, so you might be getting a NULL here. However, the code you gave us is not reproducible/self-contained -- since I don't know what z1, z2, n1, rho are, I can't run it and see if that's the only problem. cheers Ben Bolker