[R] Alternatives to integrate?

. . xkziloj at gmail.com
Sun Sep 18 17:40:43 CEST 2011


Hello all,

Returning to this question, I would like to ask for help on how to
integrate the PMF of a discrete distribution - Michael's guess about
the most immediate problem (Sep 01, 2011; 2:44pm).

I was thinking in two ways to do this: First is numerically integrate
the function but sampling it only at integer values. For this, I've
used the rectangle method of integration:

leftrect <- function(f, from, to, n, ...) {
	h <- (to - from) / n
	sum <- 0
	d <- list(...)
	for(i in seq(from, to-h, h)) {
		dots <- c(list(i), d)
		sum <- sum + do.call(f, dots)
	}
	return(h * sum)
}

Second option in my mind is to, find and replace the discrete function
by a continuous version, but I've no idea how to do this.

First option don't gave results as good. May another method ... ? Is
it possible to specify the sampling points in "Integrate"?

Any comments are welcome.

Thanks in advanve.


On Wed, Sep 7, 2011 at 4:47 AM, Berend Hasselman <bhh at xs4all.nl> wrote:
>
> . wrote:
>>
>> Hi, continuing the improvements...
>>
>> I've prepared a new code:
>>
>> ddae <- function(individuals, frac, sad, samp="pois", trunc=0, ...) {
>>   dots <- list(...)
>>   Compound <- function(individuals, frac, n.species, sad, samp, dots) {
>>     print(c("Size:", length(individuals), "Compound individuals:",
>> individuals, "End."))
>>     RegDist <- function(n.species, sad, dots) {  # "RegDist" may be
>> Exponential, Gamma, etc.
>>       dcom <- paste("d", as.name(sad), sep="")
>>       dots <- as.list(c(n.species, dots))
>>       ans <- do.call(dcom, dots)
>>       return(ans)
>>     }
>>     SampDist <- function(individuals, frac, n.species, samp) {  #
>> "SampDist" may be Poisson or Negative Binomial
>>       dcom <- paste("d", samp, sep="")
>>       lambda <- frac * n.species
>>       dots <- as.list(c(individuals, lambda))
>>       ans <- do.call(dcom, dots)
>>       return(ans)
>>     }
>>     ans <- RegDist(n.species, sad, dots) * SampDist(individuals, frac,
>> n.species, samp)
>>     return(ans)
>>   }
>>   IntegrateScheme <- function(Compound, individuals, frac, sad, samp,
>> dots) {
>>     print(c("Size:", length(individuals), "Integrate individuals:",
>> individuals))
>>     ans <- integrate(Compound, 0, 2000, individuals, frac, sad, samp,
>> dots)$value
>>     return(ans)
>>   }
>>   ans <- IntegrateScheme(Compound, individuals, frac, sad, samp, dots)
>>   return(ans)
>> }
>>
>> ddae(2, 0.05, "exp")
>>
>> Now I can't understand what happen to "individuals", why is it
>> changing in value and size? I've tried to "traceback()" and "debug()",
>> but I was not smart enough to understand what is going on.
>>
>> Could you, please, give some more help?
>>
>
> >From the help for integrate argument f :
>
> an R function taking a numeric first argument and returning a numeric vector
> of the same length. .....
>
> Function Compound is passed to integrate. First argument is "individuals"
> and integrate is integrating over individuals. That is why it is changing in
> value and size: integrate is only doing what you asked it do.
>
> The code is too uncommented and convoluted to supply further comments.
> You really should simplify this
>
> Berend
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Alternatives-to-integrate-tp3783624p3795491.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.
>



More information about the R-help mailing list