KrisLibrary  1.0.0
BernoulliDistribution.h
1 #ifndef BERNOULLI_DISTRIBUTION_H
2 #define BERNOULLI_DISTRIBUTION_H
3 
4 #include "ProbabilityDistribution.h"
5 
6 namespace Statistics {
7 
9 {
10  BernoulliDistribution(Real _p):p(_p) {}
11  virtual void GetParameters(Vector& parameters) {
12  parameters.resize(1);
13  parameters(0)=p;
14  }
15  virtual void SetParameters(const Vector& parameters) {
16  Assert(parameters.n==1);
17  p=parameters(0);
18  }
19  virtual Real PDF(Real value) {
20  if(value==0.0) return 1-p;
21  else if(value==1.0) return p;
22  else return 0;
23  }
24  virtual Real CDF(Real value) {
25  if(value==1.0) return 1;
26  else if(value<0.0) return 0;
27  else return 1-p;
28  }
29  virtual bool IsDiscrete() { return true; }
30  virtual Real Minimum() { return 0; }
31  virtual Real Maximum() { return 1; }
32  virtual Real Mean() { return p; }
33  virtual Real Variance() { return p*(1-p); }
34  virtual Real Skewness() { return (1.0-2.0*p)/Sqrt(p*(1.0-p)); }
35  virtual Real Kurtosis() { return (1.0-6.0*p+6.0*p*p)/p*(1.0-p)); }
36  virtual Real Sample() { return RandBool(p); }
37  virtual bool CanSample() const { return true; }
38 
39  Real p;
40 };
41 
43 {
44  BernoulliMAPModel(Real prior0,Real prior1);
45  BernoulliDistribution* Estimate() { return new BernoulliDistribution(n1/(n0+n1))); }
46  virtual void MaximumLikelihood(const vector<Real>& data);
47  void AddSample(bool success) { if(success) n1 += 1.0; else n0 += 1.0; }
48 
49  Real n0,n1;
50 };
51 
52 } //namespace Statistics
53 
54 #endif
Definition: ProbabilityDistribution.h:14
Contains all definitions in the statistics directory.
Definition: BernoulliDistribution.h:6
bool RandBool()
Generates a random boolean that is true with probability 0.5.
Definition: math/random.h:47
Definition: BernoulliDistribution.h:8
Definition: BernoulliDistribution.h:42