-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProbability.hpp
More file actions
115 lines (87 loc) · 3.61 KB
/
Probability.hpp
File metadata and controls
115 lines (87 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef Probability_hpp
#define Probability_hpp
#ifndef PI
# define PI 3.141592653589793
#endif
#include <vector>
class RandomVariable;
static bool availableNormalRv = false;
static double extraNormalRv = 0.0;
namespace Probability {
//make namespace "Binom", following template, implement probability mass function
// double pmf ( single double, int num trial, int num success, trials > successes );
namespace Binom {
// p: probability of success in a single trial
// numTrials: total trials n
// numSuccess: successes k, with 0 <= k <= n
double lnpmf(double p, int n, int k);
}
namespace Beta {
double pdf(double alpha, double beta, double x);
double lnPdf(double alpha, double beta, double x);
double rv(RandomVariable* rng, double a, double b);
double cdf(double alpha, double beta, double x);
double quantile(double alpha, double beta, double x);
}
namespace ChiSquare {
double pdf(double v, double x);
double lnPdf(double v, double x);
double rv(RandomVariable* rng, double v);
double cdf(double v, double x);
double quantile(double prob, double v);
}
namespace Dirichlet {
double pdf(const std::vector<double> &a, const std::vector<double> &z);
double lnPdf(const std::vector<double> &a, const std::vector<double> &z);
void rv(RandomVariable* rng, const std::vector<double> &a, std::vector<double> &z);
}
namespace Gamma {
double pdf(double alpha, double beta, double x);
double lnPdf(double alpha, double beta, double x);
double rv(RandomVariable* rng, double alpha, double beta);
double cdf(double alpha, double beta, double x);
void discretization(std::vector<double> &catRate, double a, double b, int nCats, bool median);
}
namespace Geometric {
int rv(RandomVariable* rng, double p);
}
namespace Exponential {
double pdf(double lambda, double x);
double lnPdf(double lambda, double x);
double rv(RandomVariable* rng, double lambda);
double cdf(double lambda, double x);
}
namespace Normal {
double pdf(double mu, double sigma, double x);
double lnPdf(double mu, double sigma, double x);
double rv(RandomVariable* rng) ;
double rv(RandomVariable* rng, double mu, double sigma) ;
double cdf(double mu, double sigma, double x);
double quantile(double mu, double sigma, double p);
}
namespace Uniform {
double pdf(double low, double high, double x);
double lnPdf(double low, double high, double x);
double rv(RandomVariable* rng, double low, double high);
double cdf(double low, double high, double x);
}
namespace Helper {
double beta(double a, double b);
double chebyshevEval(double x, const double *a, const int n);
double epsilon(void);
double gamma(double x);
bool isFinite(double x);
double lnFactorial(int n);
double lnBeta(double a, double b);
double lnGamma(double a);
double lnGammacor(double x);
double incompleteBeta(double a, double b, double x);
double incompleteGamma(double x, double alpha, double LnGamma_alpha);
void normalize(std::vector<double>& vec);
double pointNormal(double prob);
double rndGamma(RandomVariable* rng, double s);
double rndGamma1(RandomVariable* rng, double s);
double rndGamma2(RandomVariable* rng, double s);
}
}
#endif