42 #include <Bpp/Numeric/VectorTools.h> 54 DiscreteDistribution* rDist,
57 rateDistribution_(rDist)
67 throw Exception(
"AbstractDiscreteRatesAcrossSitesTreeLikelihood::getRateDistributionParameters(). Object is not initialized.");
68 return rateDistribution_->getParameters().getCommonParametersWith(getParameters());
76 throw Exception(
"AbstractDiscreteRatesAcrossSitesTreeLikelihood::getDerivableParameters(). Object is not initialized.");
77 return getBranchLengthsParameters();
85 throw Exception(
"AbstractDiscreteRatesAcrossSitesTreeLikelihood::getNonDerivableParameters(). Object is not initialized.");
86 ParameterList tmp = getSubstitutionModelParameters();
87 tmp.addParameters(getRateDistributionParameters());
95 size_t nbSites = getNumberOfSites();
96 size_t nbClasses = getNumberOfClasses();
98 for (
size_t i = 0; i < nbSites; i++)
100 l[i].resize(nbClasses);
101 for (
size_t j = 0; j < nbClasses; j++)
103 l[i][j] = getLikelihoodForASiteForARateClass(i, j);
113 size_t nbClasses = getNumberOfClasses();
115 for (
size_t i = 0; i < nbClasses; i++)
117 l += getLikelihoodForASiteForARateClassForAState(site, i, state) * rateDistribution_->getProbability(i);
126 size_t nbClasses = getNumberOfClasses();
128 for (
size_t i = 0; i < nbClasses; i++)
130 l += getLikelihoodForASiteForARateClassForAState(site, i, state) * rateDistribution_->getProbability(i);
140 size_t nbSites = getNumberOfSites();
141 size_t nbClasses = getNumberOfClasses();
143 for (
size_t i = 0; i < nbSites; i++)
145 l[i] = Vdouble(nbClasses);
146 for (
size_t j = 0; j < nbClasses; j++)
148 l[i][j] = getLogLikelihoodForASiteForARateClass(i, j);
158 size_t nbSites = getNumberOfSites();
159 size_t nbClasses = getNumberOfClasses();
160 size_t nbStates = getNumberOfStates();
161 VVVdouble l(nbSites);
162 for (
size_t i = 0; i < nbSites; i++)
164 l[i].resize(nbClasses);
165 for (
size_t j = 0; j < nbClasses; j++)
167 l[i][j].resize(nbStates);
168 for (
size_t x = 0; x < nbStates; x++)
170 l[i][j][x] = getLikelihoodForASiteForARateClassForAState(i, j, static_cast<int>(x));
181 size_t nbSites = getNumberOfSites();
182 size_t nbClasses = getNumberOfClasses();
183 size_t nbStates = getNumberOfStates();
184 VVVdouble l(nbSites);
185 for (
size_t i = 0; i < nbSites; i++)
187 l[i].resize(nbClasses);
188 for (
size_t j = 0; j < nbClasses; j++)
190 l[i][j].resize(nbStates);
191 for (
size_t x = 0; x < nbStates; x++)
193 l[i][j][x] = getLogLikelihoodForASiteForARateClassForAState(i, j, static_cast<int>(x));
204 size_t nbSites = getNumberOfSites();
205 size_t nbClasses = getNumberOfClasses();
206 VVdouble pb = getLikelihoodForEachSiteForEachRateClass();
207 Vdouble l = getLikelihoodForEachSite();
208 for (
size_t i = 0; i < nbSites; i++)
210 for (
size_t j = 0; j < nbClasses; j++)
212 pb[i][j] = pb[i][j] * rateDistribution_->getProbability(j) / l[i];
222 size_t nbSites = getNumberOfSites();
223 size_t nbClasses = getNumberOfClasses();
224 VVdouble lr = getLikelihoodForEachSiteForEachRateClass();
225 Vdouble l = getLikelihoodForEachSite();
226 Vdouble rates(nbSites, 0.);
227 for (
size_t i = 0; i < nbSites; i++)
229 for (
size_t j = 0; j < nbClasses; j++)
231 rates[i] += (lr[i][j] / l[i]) * rateDistribution_->getProbability(j) * rateDistribution_->getCategory(j);
241 size_t nbSites = getNumberOfSites();
242 VVdouble l = getLikelihoodForEachSiteForEachRateClass();
243 vector<size_t> classes(nbSites);
244 for (
size_t i = 0; i < nbSites; i++)
246 classes[i] = VectorTools::whichMax<double>(l[i]);
255 size_t nbSites = getNumberOfSites();
256 VVdouble l = getLikelihoodForEachSiteForEachRateClass();
257 Vdouble rates(nbSites);
258 for (
size_t i = 0; i < nbSites; i++)
260 rates[i] = rateDistribution_->getCategory(VectorTools::whichMax<double>(l[i]));
268 VVVdouble& likelihoodArray)
270 size_t nbSites = likelihoodArray.size();
271 size_t nbClasses = likelihoodArray[0].size();
272 size_t nbStates = likelihoodArray[0][0].size();
273 for (
size_t i = 0; i < nbSites; i++)
275 for (
size_t c = 0; c < nbClasses; c++)
277 for (
size_t s = 0; s < nbStates; s++)
279 likelihoodArray[i][c][s] = 1.;
288 const VVVdouble& likelihoodArray)
290 size_t nbSites = likelihoodArray.size();
291 size_t nbClasses = likelihoodArray[0].size();
292 size_t nbStates = likelihoodArray[0][0].size();
293 for (
size_t i = 0; i < nbSites; i++)
295 cout <<
"Site " << i <<
":" << endl;
296 for (
size_t c = 0; c < nbClasses; c++)
298 cout <<
"Rate class " << c;
299 for (
size_t s = 0; s < nbStates; s++)
301 cout <<
"\t" << likelihoodArray[i][c][s];
313 VVVdouble p3 = getTransitionProbabilitiesPerRateClass(nodeId, siteIndex);
315 Vdouble probs = rateDistribution_->getProbabilities();
316 p2.resize(getNumberOfStates());
317 for (
size_t i = 0; i < p2.size(); i++)
319 p2[i].resize(getNumberOfStates());
320 for (
size_t j = 0; j < p2.size(); j++)
322 for (
size_t k = 0; k < getNumberOfClasses(); k++)
324 p2[i][j] += p3[k][i][j] * probs[k];
Vdouble getRateWithMaxPostProbOfEachSite() const
Get the posterior rate (the one with maximum posterior probability) for each site.
double getLogLikelihoodForASiteForAState(size_t site, int state) const
Get the logarithm of the likelihood for a site and for a state.
void enableDerivatives(bool yn)
Tell if derivatives must be computed.
ParameterList getRateDistributionParameters() const
Get the parameters associated to the rate distirbution.
double getLikelihoodForASiteForAState(size_t site, int state) const
Get the likelihood for a site and for a state.
VVdouble getTransitionProbabilities(int nodeId, size_t siteIndex) const
Retrieves all Pij(t) for a particular branch, defined by the upper node and site. ...
static void displayLikelihoodArray(const VVVdouble &likelihoodArray)
Print the likelihood array to terminal (debugging tool).
VVdouble getPosteriorProbabilitiesOfEachRate() const
Get the posterior probability for each site of belonging to a particular rate class.
Vdouble getPosteriorRateOfEachSite() const
Get the posterior rate, i.e. averaged over all classes and weighted with posterior probabilities...
VVVdouble getLogLikelihoodForEachSiteForEachRateClassForEachState() const
Get the logarithm of the likelihood for each site and each rate class and each state.
std::vector< size_t > getRateClassWithMaxPostProbOfEachSite() const
Get the posterior rate class (the one with maximum posterior probability) for each site...
static void resetLikelihoodArray(VVVdouble &likelihoodArray)
Set all conditional likelihoods to 1.
ParameterList getNonDerivableParameters() const
All non derivable parameters.
VVVdouble getLikelihoodForEachSiteForEachRateClassForEachState() const
Get the likelihood for each site and each rate class and each state.
AbstractDiscreteRatesAcrossSitesTreeLikelihood(DiscreteDistribution *rDist, bool verbose=true)
VVdouble getLogLikelihoodForEachSiteForEachRateClass() const
Get the logarithm of the likelihood for each site and each rate class.
ParameterList getDerivableParameters() const
All derivable parameters.
VVdouble getLikelihoodForEachSiteForEachRateClass() const
Get the likelihood for each site and each rate class.