[R] integrate

Thomas Lumley tlumley at u.washington.edu
Fri Jun 23 17:13:34 CEST 2006


On Fri, 23 Jun 2006, Rogério Rosa da Silva wrote:

> Dear All,
>
> My doubt about how to integrate a simple kernel density estimation goes on.
>
> I have seen the recent posts on integrate density estimation, which seem
> similar to my question. However, I haven't found a solution.
>
> I have made two simple kernel density estimation by:
>
>    kde.1 <-density(x, bw=sd(x), kernel="gaussian")$y     # x<- c(2,3,5,12)
>    kde.2 <-density(y, bw=sd(y), kernel="gaussian")$y     # y<- c(4,2,4,11)
>
> Now I would like to integrate the difference in the estimated density
> values, i.e.:
>
>    diff.kde <- abs (kde.1- kde.2)
>
> How can I integrate diff.kde over -Inf to Inf ?

Well, the answer is zero.

Computationally this is a bit tricky.  You can turn the density estimates 
into functions with approxfun()
x<-rexp(100)
kde<-density(x)
  f<-approxfun(kde$x,kde$y,rule=2)
integrate(f,-1,10)
1.000936 with absolute error < 3.3e-05

But if you want to integrate over -Inf to Inf you need the function to 
specify the values outside the range of the data.  The only value that 
will work over the range -Inf to Inf is zero
> f<-approxfun(kde$x,kde$y,yleft=0,yright=0)
> integrate(f,-1,10)
1.00072 with absolute error < 1.5e-05
> integrate(f,-Inf,Inf)
1.000811 with absolute error < 2.3e-05


 	-thomas


More information about the R-help mailing list