-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCoinFlipModel.cpp
More file actions
55 lines (52 loc) · 1.7 KB
/
CoinFlipModel.cpp
File metadata and controls
55 lines (52 loc) · 1.7 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
#include "CoinFlipModel.hpp"
#include "ParameterDouble.hpp"
#include "Probability.hpp"
#include "Parameter.hpp"
#include "RandomVariable.hpp"
#include <iostream>
CoinFlipModel::CoinFlipModel(int numheads, int numtails): Model(), numberheads(numheads), numbertails(numtails){
bias = new ParameterDouble(1.0, this, "bias", 0, 1);
parameters.push_back(bias);
}
double CoinFlipModel::lnlikelihood(void) {
return Probability::Binom::lnpmf(bias->getValue(), numberheads+numbertails, numberheads);
}
// CoinFlipModel (int numheads, int numtails);
// double lnlikelihood (void);
double CoinFlipModel::lnpriorprobability (void){
double lnpro = 0.0;
for (Parameter* p:parameters){
lnpro+=p->lnProbability();
}
return lnpro;
}
double CoinFlipModel::update (void){
RandomVariable& rng = RandomVariable::randomVariableInstance();
UpdatedParameter = parameters [(int)(rng.uniformRv()*parameters.size())];
return UpdatedParameter -> update();
}
void CoinFlipModel::updateforacceptance (void){
UpdatedParameter->UpdateForAcceptance();
}
void CoinFlipModel::updateforrejection (void){
UpdatedParameter->UpdateForRejection();
}
void CoinFlipModel::print (void){
std::cout<<"Not Implemented";
}
std::vector <std::string> CoinFlipModel::GetParameterNames (void){
std::vector<std::string> names;
for (Parameter*p:parameters){
names.push_back(p->getName());
}
return names;
}
std::vector <double> CoinFlipModel::GetParameterString (void){
std::vector<double> value;
for (Parameter*p:parameters){
ParameterDouble* pd = dynamic_cast<ParameterDouble*>(p);
if (pd != nullptr)
value.push_back(pd->getValue());
}
return value;
}