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