Leaving aside some other issues that this whole email chain has opened up,

I'd guess that your most immediate problem is that you are trying to
numerically integrate the PMF of a discrete distribution but you are
treating it as a continuous distribution. If you took the time to properly
debug (as you were instructed yesterday) you'd probably find that whenever
you call dpois(x, lambda) for x not an integer you get a warning message.

Specifically, check this out

> integrate(dpois,0,Inf,1)
9.429158e-13 with absolute error < 1.7e-12

> n = 0:1000; sum(dpois(n,1))
1

I could be entirely off base here, but I'm guessing that many of your
problems derive from this.



On another basis, please, please read this:
http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html
or this
http://had.co.nz/stat405/resources/r-style-guide.html

And, perhaps most importantly, don't rely on the black magic of values
moving in and out of functions (lexical scoping). Seriously, just don't do
it.

If you have helper functions that need values, actively pass them: you will
save yourself hours of trouble when (not if) you debug your functions. I'm
looking, for example, at g() in the first big block of code you provided.
Call it g(a,n) and spend the extra 4 keystrokes to pass the values. It makes
everyone happier.

Michael

On Thu, Sep 1, 2011 at 12:37 PM, . . <xkzi...@gmail.com> wrote:

> So, please excuse me Michael, you are completely sure. I will try
> describe I am trying to do, please let me know if I can provide more
> info.
>
> The idea is provide to "func" two probability density functions(PDFs)
> and obtain another PDF that is a compound of them. In a final analysis
> this characterize an abundance distribution for me. The two PDFs are
> provided through "f" and "g" and there is some manipulation here
> because I need flexibility to easily change this two funcions.
>
> In the code provided, "f" is the Exponential distribution and "g" is
> the Poisson distribution. For this case, I have the analytical
> solution, below. This way I can check the result. But I am also
> considering other combinations of  "f" and "g" that have difficult, or
> even does not have analitical solution. This is the reason why I am
> trying to develop "func".
>
> func2 <- function(y, frac, rate, trunc=0, log=FALSE) {
>    is.wholenumber <- function(x, tol = .Machine$double.eps^0.5)
>        abs(x - round(x)) < tol
>    if(FALSE %in% sapply(y,is.wholenumber))
>        print("y must be integer because dpoix is a discrete PDF.")
>    else {
>        f <- function(y){
>            b <- y*log(frac)
>            m <- log(rate)
>            n <- (y+1)*log(rate+frac)
>            if(log)b+m-n else exp(b+m-n)
>        }
>        f(y)/(1-f(trunc))
>    }
> }
> > func2(200,0.05,0.001)
> [1] 0.000381062
>
> In theory, the interval of integration is 0 to Inf, but for some tests
> I did, go up to 2000 may still provide reasonable results.
>
> Also, as it seems, I am still writing my first functions in R and
> suggestions are welcome, please.
>
> Again, appologies for my previous mistake. It was not my intention to
> blame about "integrate".
>
> On Thu, Sep 1, 2011 at 11:49 AM, R. Michael Weylandt
> <michael.weyla...@gmail.com> wrote:
> > I'm going to try to put this nicely:
> >
> > What you provided is not a problem with integrate. Instead, you provided
> a
> > rather unintelligible and badly-written piece of code that (miraculously)
> > seems to work, though it's not well documented so I have no idea if
> 1.3e-21
> > is what you want to get.
> >
> > Let's try this again: per your original request, what is the problem with
> > integrate?
> >
> > If instead you feel there's something wrong with your code, might I
> suggest
> > you just say that and ask for help, rather than passing the blame onto a
> > perfectly useful base function.
> >
> > Oh, and since you asked that I propose something: comment your code.
> >
> > Michael
> >
> > On Thu, Sep 1, 2011 at 10:33 AM, . . <xkzi...@gmail.com> wrote:
> >>
> >> Hi Michael,
> >>
> >> This is the problem:
> >>
> >> func <- Vectorize(function(x, a, sad, samp="pois", trunc=0, ...) {
> >>  result <- function(x) {
> >>    f1 <- function(n) {
> >>                        f <- function() {
> >>        dcom <- paste("d", sad, sep="")
> >>        dots <- c(as.name("n"), list(...))
> >>        do.call(dcom, dots)
> >>                        }
> >>      g <- function() {
> >>        dcom <- paste("d", samp, sep="")
> >>        lambda <- a * n
> >>        dots <- c(as.name("x"), as.name("lambda"))
> >>        do.call(dcom, dots)
> >>      }
> >>      f() * g()
> >>    }
> >>    integrate(f1,0,2000)$value
> >> #     adaptIntegrate(f1,0,2000)$integral
> >>
> >> #     n <- 0:2000
> >> #     trapz(n,f1(n))
> >>
> >> #     area(f1, 0, 2000, limit=10000, eps=1e-100)
> >>  }
> >>  return(result(x) / (1 - result(trunc)))
> >> }, "x")
> >> func(200, 0.05, "exp", rate=0.001)
> >>
> >> If you could propose something I will be gratefull.
> >>
> >> Thanks in advance.
> >>
> >> On Thu, Sep 1, 2011 at 10:55 AM, R. Michael Weylandt
> >> <michael.weyla...@gmail.com> wrote:
> >> > Mr ". .",
> >> >
> >> > MASS::area comes to mind but it may be more helpful if you could say
> >> > what
> >> > you are looking for / why integrate is not appropriate it is for
> >> > whatever
> >> > you are doing.
> >> >
> >> > Strictly speaking, I suppose there are all sorts of "alternatives" to
> >> > integrate() if you are willing to be really creative and build
> something
> >> > from scratch: diff(), cumsum(), lm(), hist(), t(), c(), ....
> >> >
> >> > Michael Weylandt
> >> >
> >> > On Thu, Sep 1, 2011 at 9:53 AM, B77S <bps0...@auburn.edu> wrote:
> >> >>
> >> >> package "caTools"
> >> >> see ?trapz
> >> >>
> >> >>
> >> >> . wrote:
> >> >> >
> >> >> > Hi all,
> >> >> >
> >> >> > is there any alternative to the function integrate?
> >> >> >
> >> >> > Any comments are welcome.
> >> >> >
> >> >> > Thanks in advance.
> >> >> >
> >> >> > ______________________________________________
> >> >> > R-help@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.
> >> >> >
> >> >>
> >> >> --
> >> >> View this message in context:
> >> >>
> >> >>
> http://r.789695.n4.nabble.com/Alternatives-to-integrate-tp3783624p3783645.html
> >> >> Sent from the R help mailing list archive at Nabble.com.
> >> >>
> >> >> ______________________________________________
> >> >> R-help@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.
> >> >
> >> >
> >
> >
>

        [[alternative HTML version deleted]]

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

Reply via email to