stats12
2012-Oct-20 16:23 UTC
[R] Error in integrate(integrand, 0, Inf) : non-finite function value
Dear R users, When I run the code below, I get the error "Error in integrate(integrand, 0, Inf) : non-finite function value". The code works if the function returns only "sum(integ)". However, I want to add "cmh" to it. When I add "cmh" I get that error. I can't figure out why this is happening because my integrate function has nothing to do with "cmh". I tried to integrate from 0 to 1000, and still same error. Any suggestion is greatly appreciated. Thank you in advance! 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:2)) 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 cmhn<-as.vector(cmh) lik<-sum(cmhn+integ) -lik } initial<-c(1) t<-nlm(ll,initial) out[k]<-t$estimate } est<-as.vector(out) -- View this message in context: http://r.789695.n4.nabble.com/Error-in-integrate-integrand-0-Inf-non-finite-function-value-tp4646868.html Sent from the R help mailing list archive at Nabble.com.
David Winsemius
2012-Oct-20 20:21 UTC
[R] Error in integrate(integrand, 0, Inf) : non-finite function value
On Oct 20, 2012, at 9:23 AM, stats12 wrote:> Dear R users, > > When I run the code below, I get the error "Error in integrate(integrand, 0, > Inf) : non-finite function value". The code works if the function returns > only "sum(integ)".But you never showed us the working code.> However, I want to add "cmh" to it. When I add "cmh" I > get that error. I can't figure out why this is happening because my > integrate function has nothing to do with "cmh". I tried to integrate from > 0 to 1000, and still same error. Any suggestion is greatly appreciated. > Thank you in advance! > > > > 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:2)) > > for (k in 1:2){ > ll<-function(p){ > cmh<-delta[,k]*(h[,k]*log(0.5))+p*log(gamma(1+1/p))This inner loop appears to define a function 10 times, but does nothing else:> 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]) > } # end of s-loop> ------------------ > integ<-integrate(integrand,0,Inf)$value > cmhn<-as.vector(cmh) > lik<-sum(cmhn+integ) > -lik > } # end of ll()-function > initial<-c(1) > t<-nlm(ll,initial) > out[k]<-t$estimate > } # end of k-loop > est<-as.vector(out)Your uncommented code seems to have problems with organization, but since you never really described your overall strategy or goal was, it's hard to know. -- David Winsemius, MD Alameda, CA, USA
stats12
2012-Oct-21 03:01 UTC
[R] Error in integrate(integrand, 0, Inf) : non-finite function value
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) -- View this message in context: http://r.789695.n4.nabble.com/Error-in-integrate-integrand-0-Inf-non-finite-function-value-tp4646868p4646896.html Sent from the R help mailing list archive at Nabble.com.
Jeff Newmiller
2012-Oct-21 06:01 UTC
[R] Error in integrate(integrand, 0, Inf) : non-finite function value
That is an intrinsic part of nonlinear optimization. Choose your starting point wisely. --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity. stats12 <skarmv at gmail.com> 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) > > > > > > > > >-- >View this message in context: >http://r.789695.n4.nabble.com/Error-in-integrate-integrand-0-Inf-non-finite-function-value-tp4646868p4646896.html >Sent from the R help mailing list archive at Nabble.com. > >______________________________________________ >R-help at r-project.org mailing list >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide >http://www.R-project.org/posting-guide.html >and provide commented, minimal, self-contained, reproducible code.
Berend Hasselman
2012-Oct-21 06:36 UTC
[R] 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