Error in integrate(integrand, 0, Inf) : non-finite function value
On 21-10-2012, at 05:01, stats12 wrote:
Hi,
Thank you for your comment. I worked on the code again and was able to make
it work. The only problem I am having right now is that nlm depends on the
initial value.
When the initial value is 1, I get the following estimates
0.1230414 19.6271029
when it is 2, I get the following
29.46874 20.01679
d<-matrix(c(1,1,0,0,0,0,0,0,2,1,0,0,1,1,0,1,2,2,1,0),nrow=10,ncol=2)
h<-matrix(runif(20,0,1),10)
delta<-matrix(c(2,1,0,1,0,1,0,0,2,1,0,0,1,1,1,1,0,2,1,0),nrow=10,ncol=2)
out<-vector("numeric",length(1:2))
integ<-vector("numeric",length(1:10))
for (k in 1:2){
ll<-function(p){
cmh<-delta[,k]*(h[,k]*log(0.5))+p*log(gamma(1+1/p))
for(s in 1:10){
integrand<-function(x)
x^d[s,k]*exp(-x*gamma(1+1/p))^p*p*x^(p-1)*exp(-x*h[s,k])
integ<-integrate(integrand,0,Inf)$value
return(integ)
}
lik<-sum(cmh+log(integ))
-lik
}
initial<-c(1)
t<-nlm(ll,initial)
out[k]<-t$estimate
}
est<-as.vector(out)
When I run this code (in TextMate 1.5; Mac OS X 10.6.8) I get: Error in integrate(integrand, 0, Inf) : non-finite function value RMate stopped at line 0 Calls: nlm -> <Anonymous> -> f -> integrate In addition: Warning messages: 1: In log(gamma(1 + 1/p)) : NaNs produced 2: In log(gamma(1 + 1/p)) : NaNs produced Execution halted In addition: why return(integ) in the inner loop with s? This implies an immediate return in function ll. You initialize integ as a vector. But in the inner s loop you assign a scalar to integ. The whole thing looks very muddled. Your code should be indented for clarity. Berend