Skip to content

Commit f082175

Browse files
committed
set a minial epsilon proba values for probability of intervals for real model: Gaussian and Weibull #3
1 parent 915b53a commit f082175

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

MixtComp/src/lib/Mixture/Simple/Gaussian/GaussianLikelihood.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ Real GaussianLikelihood::lnObservedProbability(int i, int k) const {
7171
Real supCdf = normal_.cdf(supBound,
7272
mean,
7373
sd);
74-
logProba = std::log(supCdf - infCdf);
74+
75+
Real proba = supCdf - infCdf;
76+
if(proba < epsilonProba)
77+
proba = epsilonProba;
78+
79+
logProba = std::log(proba);
7580
}
7681
break;
7782

@@ -80,6 +85,10 @@ Real GaussianLikelihood::lnObservedProbability(int i, int k) const {
8085
Real supCdf = normal_.cdf(supBound,
8186
mean,
8287
sd);
88+
89+
if(supCdf < epsilonProba)
90+
supCdf = epsilonProba;
91+
8392
logProba = std::log(supCdf);
8493
}
8594
break;
@@ -89,7 +98,11 @@ Real GaussianLikelihood::lnObservedProbability(int i, int k) const {
8998
Real infCdf = normal_.cdf(infBound,
9099
mean,
91100
sd);
92-
logProba = std::log(1. - infCdf);
101+
Real proba = 1. - infCdf;
102+
if(proba < epsilonProba)
103+
proba = epsilonProba;
104+
105+
logProba = std::log(proba);
93106
}
94107
break;
95108

MixtComp/src/lib/Mixture/Simple/Weibull/WeibullLikelihood.cpp

+11-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ Real WeibullLikelihood::lnObservedProbability(Index i, Index k) const {
5858
case missingRUIntervals_: {
5959
Real infBound = augData_.misData_(i).second[0];
6060
Real infCdf = weibull_.cdf(infBound, kParam, lambda);
61-
logProba = std::log(1.0 - infCdf);
61+
Real proba = 1. - infCdf;
62+
if(proba < epsilonProba)
63+
proba = epsilonProba;
64+
65+
logProba = std::log(proba);
6266
}
6367
break;
6468

@@ -67,7 +71,12 @@ Real WeibullLikelihood::lnObservedProbability(Index i, Index k) const {
6771
Real supBound = augData_.misData_(i).second[1];
6872
Real infCdf = weibull_.cdf(infBound, kParam, lambda);
6973
Real supCdf = weibull_.cdf(supBound, kParam, lambda);
70-
logProba = std::log(supCdf - infCdf);
74+
75+
Real proba = supCdf - infCdf;
76+
if(proba < epsilonProba)
77+
proba = epsilonProba;
78+
79+
logProba = std::log(proba);
7180
}
7281
break;
7382

MixtComp/src/lib/Various/Constants.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const Real epsilon = 1.e-8;
4343
const std::string epsilonStr = "1.e-8";
4444
const Real logEpsilon = std::log(epsilon);
4545

46+
const Real epsilonProba = std::numeric_limits<Real>::epsilon();
47+
4648
const int minModality = 1;
4749
const int minIndex = 1;
4850
const Real pi = boost::math::constants::pi<Real>();

MixtComp/src/lib/Various/Constants.h

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ extern const int nbSamplingAttempts; // number of sampling attempts, when not en
4040
extern const Real epsilon; // very small value of real to check for near zero values
4141
extern const std::string epsilonStr; // previous value, in scientific notation
4242
extern const Real logEpsilon; // log of very small value
43+
extern const Real epsilonProba; // very small value of real to check for near zero values for probabilities
44+
4345

4446
extern const int minModality; // minimal modality for categorical models (for example, 0-based or 1-based numbering)
4547
extern const int minIndex;

0 commit comments

Comments
 (0)