[R] Error in integrate(integrand, 0, Inf) : non-finite function value

713 views
Skip to first unread message

stats12

unread,
Oct 20, 2012, 12:23:03 PM10/20/12
to r-h...@r-project.org
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.

______________________________________________
R-h...@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.

David Winsemius

unread,
Oct 20, 2012, 4:21:52 PM10/20/12
to stats12, r-h...@r-project.org

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

unread,
Oct 20, 2012, 11:01:51 PM10/20/12
to r-h...@r-project.org
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

unread,
Oct 21, 2012, 2:01:18 AM10/21/12
to stats12, r-h...@r-project.org
That is an intrinsic part of nonlinear optimization. Choose your starting point wisely.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdne...@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.

David Winsemius

unread,
Oct 21, 2012, 2:17:26 AM10/21/12
to stats12, r-h...@r-project.org

On Oct 20, 2012, at 8:01 PM, stats12 wrote:

> Hi,
>
> Thank you for your comment. I worked on the code again and was able to make
> it work.

Does that mean you know what value is "correct" for certain cases? Is there an overall strategy that is guiding this effort? I wrote earlier:

> DW> Your uncommented code seems to have problems with organization, but since you never really described
> DW> your overall strategy or [what the] goal was, it's hard to know.

I strongly suspect that is still the case. You are mixing applicative looping strategies with functional methods and it "looks wrong" to my eyes, but I have nothing to compare it to as far as goals.
---

David Winsemius, MD
Alameda, CA, USA

Berend Hasselman

unread,
Oct 21, 2012, 2:36:28 AM10/21/12
to stats12, r-h...@r-project.org
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

stats12

unread,
Oct 21, 2012, 10:40:42 AM10/21/12
to r-h...@r-project.org
You are right. I ran the code again and got the same error again. But ran it
for the second time, it didn't return an error and I got some values. It's
my first time doing this kind of coding and I'm still learning. I agree that
my code may look unorganized and wrong. I'll work on your comments and see
if I can figure out the problem. Thanks



--
View this message in context: http://r.789695.n4.nabble.com/Error-in-integrate-integrand-0-Inf-non-finite-function-value-tp4646868p4646917.html
Sent from the R help mailing list archive at Nabble.com.

Reply all
Reply to author
Forward
0 new messages