npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
CompositeDistribution1D.hh
Go to the documentation of this file.
1 #ifndef NPSTAT_COMPOSITEDISTRIBUTION1D_HH_
2 #define NPSTAT_COMPOSITEDISTRIBUTION1D_HH_
3 
4 /*!
5 // \file CompositeDistribution1D.hh
6 //
7 // \brief Composite distributions in one dimension
8 //
9 // Author: I. Volobouev
10 //
11 // April 2010
12 */
13 
15 
16 namespace npstat {
17  /**
18  // This class represents univariate statistical distributions whose
19  // cumulative distribution functions F(x) can be built by composition
20  // of two other cumulative distribution functions: F(x) = G(H(x)).
21  // Naturally, G must correspond to a density supported on the interval
22  // [0, 1]. This density is often easier to fit (or to represent
23  // nonparametrically) than the original one in case H(x) is well chosen.
24  //
25  // The corresponding technique is known in the KDE-related literature
26  // as the "nonparametric transformations" method. See, for example,
27  // "A Comparison of Higher-Order Bias Kernel Density Estimators" by
28  // M.C. Jones and D.F. Signorini, JASA, Vol. 92, No. 439, p. 1063 (1997).
29  */
31  {
32  public:
33  /**
34  // Constructor arguments are the distributions used to build this
35  // composite. The support of pG must be the [0, 1] interval.
36  */
38  const AbsDistribution1D& pH);
39 
42 
43  inline virtual ~CompositeDistribution1D() {cleanup();}
44 
45  /** Probability density */
46  inline double density(const double x) const
47  {return pH_->density(x)*pG_->density(pH_->cdf(x));}
48 
49  /** Cumulative distribution function */
50  inline double cdf(const double x) const
51  {return pG_->cdf(pH_->cdf(x));}
52 
53  /** Exceedance (i.e., 1 - cdf) */
54  inline double exceedance(const double x) const
55  {return pG_->exceedance(pH_->cdf(x));}
56 
57  /** Quantile function */
58  inline double quantile(const double x) const
59  {return pH_->quantile(pG_->quantile(x));}
60 
61  /** "Virtual copy constructor" */
62  inline virtual CompositeDistribution1D* clone() const
63  {return new CompositeDistribution1D(*this);}
64 
65  /** Fetch the distribution with support on [0, 1] */
66  inline const AbsDistribution1D& G() const {return *pG_;}
67 
68  /** Fetch the distribution with arbitrary support */
69  inline const AbsDistribution1D& H() const {return *pH_;}
70 
71  //@{
72  /** Method needed for "geners" I/O */
73  virtual gs::ClassId classId() const {return gs::ClassId(*this);}
74  virtual bool write(std::ostream& os) const;
75  //@}
76 
77  static inline const char* classname()
78  {return "npstat::CompositeDistribution1D";}
79  static inline unsigned version() {return 1;}
80  static CompositeDistribution1D* read(
81  const gs::ClassId& id, std::istream& in);
82 
83  protected:
84  virtual bool isEqual(const AbsDistribution1D&) const;
85 
87 
88  const AbsDistribution1D* pG_;
89  const AbsDistribution1D* pH_;
90 
91  private:
92  void cleanup();
93  };
94 }
95 
96 #endif // NPSTAT_COMPOSITEDISTRIBUTION1D_HH_
Interface definition for 1-d continuous statistical distributions.
Definition: CompositeDistribution1D.hh:31
virtual bool isEqual(const AbsDistribution1D &) const
double density(const double x) const
Definition: CompositeDistribution1D.hh:46
double cdf(const double x) const
Definition: CompositeDistribution1D.hh:50
const AbsDistribution1D & G() const
Definition: CompositeDistribution1D.hh:66
const AbsDistribution1D & H() const
Definition: CompositeDistribution1D.hh:69
double exceedance(const double x) const
Definition: CompositeDistribution1D.hh:54
CompositeDistribution1D(const AbsDistribution1D &pG, const AbsDistribution1D &pH)
virtual gs::ClassId classId() const
Definition: CompositeDistribution1D.hh:73
virtual CompositeDistribution1D * clone() const
Definition: CompositeDistribution1D.hh:62
double quantile(const double x) const
Definition: CompositeDistribution1D.hh:58
Definition: AbsArrayProjector.hh:14
Definition: AbsDistribution1D.hh:31
virtual double density(double x) const =0
virtual double exceedance(double x) const =0
virtual double quantile(double x) const =0
virtual double cdf(double x) const =0