Grenander Estimator of a Decreasing or Increasing Density
The function grenander computes the Grenander estimator
of a one-dimensional decreasing or increasing density. 
grenander(F, type=c("decreasing", "increasing"))F | 
 an   | 
type | 
 specifies whether the distribution is decreasing (the default) or increasing.  | 
The Grenander (1956) density estimator is given by the slopes of the least concave majorant (LCM) of the empirical distribution function (ECDF). It is a decreasing piecewise-constant function and can be shown to be the non-parametric maximum likelihood estimate (NPMLE) under the assumption of a decreasing density (note that the ECDF is the NPMLE without this assumption). Similarly, an increasing density function is obtained by using the greatest convex minorant (GCM) of the ECDF.
A list of class grenander with the following components:
F | 
 the empirical distribution function specified as input.  | 
x.knots | 
 x locations of the knots of the least concave majorant of the ECDF.  | 
F.knots | 
 the corresponding y locations of the least concave majorant of the ECDF.  | 
f.knots | 
 the corresponding slopes (=density).  | 
Korbinian Strimmer (http://www.strimmerlab.org).
Grenander, U. (1956). On the theory of mortality measurement, Part II. Skan. Aktuarietidskr, 39, 125–153.
# load "fdrtool" library
library("fdrtool")
# samples from random exponential variable 
z = rexp(30,1)
e = ecdf(z)
g = grenander(e)
g
# plot ecdf, concave cdf, and Grenander density estimator (on log scale)
plot(g, log="y") 
# for comparison the kernel density estimate
plot(density(z)) 
# area under the Grenander density estimator 
sum( g$f.knots[-length(g$f.knots)]*diff(g$x.knots) )Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.