[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