[R] density at particular values

Bill.Venables at csiro.au Bill.Venables at csiro.au
Sun Nov 21 08:24:22 CET 2010


It's actually not too difficult to write the density function itself as returning a function rather than a list of x and y values.  Here is a no frills (well, few frills) version:

### cut here ###
densityfun <- local({
  normd <- function(value, bw) {
    force(value); force(bw)
    function(z) dnorm(z, mean = value, sd = bw)
  }
  function(x, bw = bw.nrd0, adjust = 1) {
    bandw <- bw(x) * adjust
    flist <- lapply(x, normd, bw = bandw)
    function(z)
        if(length(z) <= 1)
            mean(sapply(flist, function(fun) fun(z)))
        else rowMeans(sapply(flist, function(fun) fun(z)))
  }
})
### cut here ###

To test it:

########
library(MASS)
x <- faithful$eruptions
dx <- density(x, n = 500)
plot(dx)
dfun <- densityfun(x)
sx <- sample(dx$x, 25)
points(sx, dfun(sx), pch = 4)
curve(dfun, add = TRUE, col = "blue", n = 500)
########

This idea could be extneded to provide essentially the same features as density() itself.  The details are left as an exercise...  If anyone ever needs to integrate a kernel density estimate, (and for now I can't see why they would, but if), then this would provide a way to do it with integrate().

Bill Venables.


-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of David Winsemius
Sent: Sunday, 21 November 2010 3:21 PM
To: Shant Ch
Cc: r-help at r-project.org
Subject: Re: [R] density at particular values


On Nov 20, 2010, at 9:34 PM, Shant Ch wrote:

> David, I did look at ?density many times. I think I didn't explain  
> what I have to find.
>
> Suppose I have a data.
> x<- c(rnorm(40,5,3),rcauchy(30,0,4),rexp(30,6))
>
> Suppose I don't have information about the mixture, I have been  
> given only the data.
>
> density(x) will give the 6 number summary of the data, given as x  
> and also the 6 number summary of the density of density given as y.

I am not sure what the number six (6) represents in the two palces it  
occurs:

 > str(density(x))
List of 7
  $ x        : num [1:512] -59.2 -59 -58.8 -58.5 -58.3 ...
  $ y        : num [1:512] 3.30e-05 5.27e-05 8.19e-05 1.24e-04  
1.82e-04 ...
  $ bw       : num 1.37
  $ n        : int 100
  $ call     : language density.default(x = x)
  $ data.name: chr "x"
  $ has.na   : logi FALSE
  - attr(*, "class")= chr "density"

Perhaps you want to look at:

?approxfun

It would let you interpolate at points that are not part of the set  
density(x)$x

__
David.


>
> I want to find the density of the given data at x=1. I basically  
> want the value of y(=density) for x=1 i.e. kernel density at x=1.
>
> Shant
>
>
>
>
>
>
>
>
>
>
>
> From: David Winsemius <dwinsemius at comcast.net>
> To: Shant Ch <sha1one at yahoo.com>
> Cc: r-help at r-project.org
> Sent: Sat, November 20, 2010 8:54:32 PM
> Subject: Re: [R] density at particular values
>
>
> On Nov 20, 2010, at 8:07 PM, Shant Ch wrote:
>
> > Hello everyone!
> >
> > I want to use density function of R to compute the density at  
> x(=0, say). But it
> > is giving me the 5-number summary and mean of the data and  
> densities at that
> > point.
> > I just want the densities at different values specified by me. Can  
> anyone let me
> > know how can I find that?
>
> Here's what you should have done (even before posting):
>
> ?density
> <Read the help page to see the structure of what density() returns.>
> "Value
> x  the n coordinates of the points where the density is estimated.
>
> y  the estimated density values. These will be non-negative, but can  
> be zero."
>
> Realize that the "specified by me" part is either going to be  
> modified to "pick an existing estimate near my specification" or  
> that you will need to approximate the value. So what is the actual  
> problem (and the actual data setup) ?
>
> --David.
>
>
> >
> > For example
> >
> >
> > Thanks in advance for your help.
> >
> >
> > Shant
> >
> >
> >
> >
> >     [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
>
> David Winsemius, MD
> West Hartford, CT
>
>
>

David Winsemius, MD
West Hartford, CT

______________________________________________
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