queso-0.53.0
Protected Attributes | List of all members
QUESO::BayesianJointPdf< V, M > Class Template Reference

A class for handling Bayesian joint PDFs. More...

#include <BayesianJointPdf.h>

Inheritance diagram for QUESO::BayesianJointPdf< V, M >:
Inheritance graph
[legend]
Collaboration diagram for QUESO::BayesianJointPdf< V, M >:
Collaboration graph
[legend]

Public Member Functions

Constructor/Destructor methods
 BayesianJointPdf (const char *prefix, const BaseJointPdf< V, M > &priorDensity, const BaseScalarFunction< V, M > &likelihoodFunction, double likelihoodExponent, const VectorSet< V, M > &intersectionDomain)
 Default constructor. More...
 
 ~BayesianJointPdf ()
 Destructor. More...
 
Math methods
double actualValue (const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
 Actual value of the PDF (scalar function). More...
 
double lnValue (const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
 Computes the logarithm of the value of the function. More...
 
double computeLogOfNormalizationFactor (unsigned int numSamples, bool updateFactorInternally) const
 TODO: Computes the logarithm of the normalization factor. More...
 
void setNormalizationStyle (unsigned int value) const
 Sets a value to be used in the normalization style of the prior density PDF (ie, protected attribute m_priorDensity). More...
 
double lastComputedLogPrior () const
 Returns the logarithm of the last computed Prior value. Access to protected attribute m_lastComputedLogPrior. More...
 
double lastComputedLogLikelihood () const
 Returns the logarithm of the last computed likelihood value. Access to protected attribute m_lastComputedLogLikelihood. More...
 
- Public Member Functions inherited from QUESO::BaseJointPdf< V, M >
 BaseJointPdf (const char *prefix, const VectorSet< V, M > &domainSet)
 Default constructor. More...
 
virtual ~BaseJointPdf ()
 Destructor. More...
 
void setLogOfNormalizationFactor (double value) const
 Sets a logarithmic value to be used in the normalization factor (stored in the protected attribute m_normalizationStyle.) More...
 
- Public Member Functions inherited from QUESO::BaseScalarFunction< V, M >
 BaseScalarFunction (const char *prefix, const VectorSet< V, M > &domainSet)
 Default constructor. More...
 
virtual ~BaseScalarFunction ()
 Destructor. More...
 
const VectorSet< V, M > & domainSet () const
 Access to the protected attribute m_domainSet: domain set of the scalar function. More...
 

Protected Attributes

const BaseJointPdf< V, M > & m_priorDensity
 
const BaseScalarFunction< V, M > & m_likelihoodFunction
 
double m_likelihoodExponent
 
double m_lastComputedLogPrior
 
double m_lastComputedLogLikelihood
 
m_tmpVector1
 
m_tmpVector2
 
M * m_tmpMatrix
 
- Protected Attributes inherited from QUESO::BaseJointPdf< V, M >
unsigned int m_normalizationStyle
 
double m_logOfNormalizationFactor
 
- Protected Attributes inherited from QUESO::BaseScalarFunction< V, M >
const BaseEnvironmentm_env
 
std::string m_prefix
 
const VectorSet< V, M > & m_domainSet
 Domain set of the scalar function. More...
 

Additional Inherited Members

- Protected Member Functions inherited from QUESO::BaseJointPdf< V, M >
double commonComputeLogOfNormalizationFactor (unsigned int numSamples, bool updateFactorInternally) const
 Common method (to the derived classes) to compute the logarithm of the normalization factor. More...
 

Detailed Description

template<class V = GslVector, class M = GslMatrix>
class QUESO::BayesianJointPdf< V, M >

A class for handling Bayesian joint PDFs.

This class allows the mathematical definition of a Bayesian Joint PDF.

Definition at line 49 of file BayesianJointPdf.h.

Constructor & Destructor Documentation

template<class V, class M>
QUESO::BayesianJointPdf< V, M >::BayesianJointPdf ( const char *  prefix,
const BaseJointPdf< V, M > &  priorDensity,
const BaseScalarFunction< V, M > &  likelihoodFunction,
double  likelihoodExponent,
const VectorSet< V, M > &  intersectionDomain 
)

Default constructor.

Instantiates an object of this class given a prefix and a scalar function. The domain of the scalar function is assigned to the protected attribute m_domainSet, and the scalar fiction is also itself copied to the protected attribute m_scalarFunction.

Definition at line 33 of file BayesianJointPdf.C.

39  :
40  BaseJointPdf<V,M>(((std::string)(prefix)+"bay").c_str(),intersectionDomain),
41  m_priorDensity (priorDensity),
42  m_likelihoodFunction (likelihoodFunction),
43  m_likelihoodExponent (likelihoodExponent),
46  m_tmpVector1 (m_domainSet.vectorSpace().zeroVector()),
47  m_tmpVector2 (m_domainSet.vectorSpace().zeroVector()),
48  m_tmpMatrix (m_domainSet.vectorSpace().newMatrix())
49 {
50 }
const VectorSet< V, M > & m_domainSet
Domain set of the scalar function.
const BaseJointPdf< V, M > & m_priorDensity
const BaseScalarFunction< V, M > & m_likelihoodFunction
template<class V , class M >
QUESO::BayesianJointPdf< V, M >::~BayesianJointPdf ( )

Destructor.

Definition at line 53 of file BayesianJointPdf.C.

54 {
55  delete m_tmpMatrix;
56 }

Member Function Documentation

template<class V, class M>
double QUESO::BayesianJointPdf< V, M >::actualValue ( const V &  domainVector,
const V *  domainDirection,
V *  gradVector,
M *  hessianMatrix,
V *  hessianEffect 
) const
virtual

Actual value of the PDF (scalar function).

If the exponent of the likelihood function (likelihoodExponent) is zero, i.e. the likelihood is constant and unitary, then the actual value is the value of the prior PDF; otherwise, the actual value is scaled (multiplied) by a power of the value of the likelihood function.

Implements QUESO::BaseJointPdf< V, M >.

Definition at line 82 of file BayesianJointPdf.C.

References queso_require_equal_to_msg, and queso_require_msg.

88 {
89  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
90  *m_env.subDisplayFile() << "Entering BayesianJointPdf<V,M>::actualValue()"
91  << ": domainVector = " << domainVector
92  << std::endl;
93  }
94 
95  queso_require_equal_to_msg(domainVector.sizeLocal(), this->m_domainSet.vectorSpace().dimLocal(), "invalid input");
96 
97  V* gradVLike = NULL;
98  if (gradVector) gradVLike = &m_tmpVector1;
99 
100  M* hessianMLike = NULL;
101  if (hessianMatrix) hessianMLike = m_tmpMatrix;
102 
103  V* hessianELike = NULL;
104  if (hessianEffect) hessianELike = &m_tmpVector2;
105 
106  double value1 = m_priorDensity.actualValue (domainVector,domainDirection,gradVector,hessianMatrix,hessianEffect);
107  double value2 = 1.;
108  if (m_likelihoodExponent != 0.) {
109  value2 = m_likelihoodFunction.actualValue(domainVector,domainDirection,gradVLike ,hessianMLike ,hessianELike );
110  }
111 
112  queso_require_msg(!(gradVector || hessianMatrix || hessianEffect), "incomplete code for gradVector, hessianMatrix and hessianEffect calculations");
113 
114  double returnValue = value1;
115  if (m_likelihoodExponent == 0.) {
116  // Do nothing
117  }
118  else if (m_likelihoodExponent == 1.) {
119  returnValue *= value2;
120  }
121  else {
122  returnValue *= pow(value2,m_likelihoodExponent);
123  }
124  returnValue *= exp(m_logOfNormalizationFactor); // [PDF-02] ???
125 
126  m_lastComputedLogPrior = log(value1);
128 
129  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
130  *m_env.subDisplayFile() << "Leaving BayesianJointPdf<V,M>::actualValue()"
131  << ": domainVector = " << domainVector
132  << ", returnValue = " << returnValue
133  << std::endl;
134  }
135 
136  return returnValue;
137 }
unsigned int displayVerbosity() const
Definition: Environment.C:396
double m_logOfNormalizationFactor
Definition: JointPdf.h:100
const VectorSet< V, M > & m_domainSet
Domain set of the scalar function.
const BaseJointPdf< V, M > & m_priorDensity
const BaseScalarFunction< V, M > & m_likelihoodFunction
#define queso_require_equal_to_msg(expr1, expr2, msg)
Definition: asserts.h:85
const BaseEnvironment & m_env
#define queso_require_msg(asserted, msg)
Definition: asserts.h:69
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
Definition: Environment.C:274
template<class V , class M >
double QUESO::BayesianJointPdf< V, M >::computeLogOfNormalizationFactor ( unsigned int  numSamples,
bool  updateFactorInternally 
) const
virtual

TODO: Computes the logarithm of the normalization factor.

Todo:
: implement me!

Implements QUESO::BaseJointPdf< V, M >.

Definition at line 260 of file BayesianJointPdf.C.

References queso_error_msg.

261 {
262  double value = 0.;
263 
264  double volume = m_domainSet.volume();
265  if (((boost::math::isnan)(volume)) ||
266  (volume == -INFINITY ) ||
267  (volume == INFINITY ) ||
268  (volume <= 0. )) {
269  // Do nothing
270  }
271  else {
272  queso_error_msg("incomplete code for computeLogOfNormalizationFactor()");
273  }
274 
275  return value;
276 }
const VectorSet< V, M > & m_domainSet
Domain set of the scalar function.
#define queso_error_msg(msg)
Definition: asserts.h:47
template<class V , class M >
double QUESO::BayesianJointPdf< V, M >::lastComputedLogLikelihood ( ) const

Returns the logarithm of the last computed likelihood value. Access to protected attribute m_lastComputedLogLikelihood.

Definition at line 75 of file BayesianJointPdf.C.

76 {
78 }
template<class V , class M >
double QUESO::BayesianJointPdf< V, M >::lastComputedLogPrior ( ) const

Returns the logarithm of the last computed Prior value. Access to protected attribute m_lastComputedLogPrior.

Definition at line 68 of file BayesianJointPdf.C.

69 {
71 }
template<class V, class M>
double QUESO::BayesianJointPdf< V, M >::lnValue ( const V &  domainVector,
const V *  domainDirection,
V *  gradVector,
M *  hessianMatrix,
V *  hessianEffect 
) const
virtual

Computes the logarithm of the value of the function.

Analogously to the method actualValue(), if the exponent of the likelihood function (likelihoodExponent) is zero then the Logarithm of the value of the function is the logarithm of the value of the prior PDF; otherwise, the value is scaled (added) by a power of the value of the likelihood function.

Implements QUESO::BaseJointPdf< V, M >.

Definition at line 141 of file BayesianJointPdf.C.

147 {
148  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
149  *m_env.subDisplayFile() << "Entering BayesianJointPdf<V,M>::lnValue()"
150  << ": domainVector = " << domainVector
151  << std::endl;
152  }
153 
154  V* gradVLike = NULL;
155  if (gradVector) {
156  gradVLike = &m_tmpVector1;
157 
158  // DM: We do this because we want to be able to test whether the user
159  // actually filled gradVector, rather than passing a different
160  // instance of V to the likelihood code
161  for (unsigned int i = 0; i < m_tmpVector1.sizeLocal(); i++) {
162  m_tmpVector1[i] = (*gradVector)[i];
163  }
164  }
165 
166  M* hessianMLike = NULL;
167  if (hessianMatrix) hessianMLike = m_tmpMatrix;
168 
169  V* hessianELike = NULL;
170  if (hessianEffect) hessianELike = &m_tmpVector2;
171 
172  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
173  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
174  << ", domainVector = " << domainVector
175  << ": about to call prior()"
176  << std::endl;
177  }
178 
179  double value1 = m_priorDensity.lnValue(domainVector,domainDirection,gradVector,hessianMatrix,hessianEffect);
180 
181  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
182  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
183  << ", domainVector = " << domainVector
184  << ": lnPrior = " << value1
185  << std::endl;
186  }
187 
188  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
189  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
190  << ", domainVector = " << domainVector
191  << ": about to call likelihood()"
192  << std::endl;
193  }
194 
195  double value2 = 0.;
196  if (m_likelihoodExponent != 0.) {
197  value2 = m_likelihoodFunction.lnValue(domainVector,domainDirection,gradVLike, hessianMLike, hessianELike );
198  }
199 
200  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
201  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
202  << ", domainVector = " << domainVector
203  << ": value1 = " << value1
204  << ", value2 = " << value2
205  << std::endl;
206  if (gradVector) {
207  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
208  << ", domainVector = " << domainVector
209  << ": gradVector = " << *gradVector
210  << ", gradVLike = " << *gradVLike
211  << std::endl;
212  }
213  if (hessianMatrix) {
214  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
215  << ", domainVector = " << domainVector
216  << ": hessianMatrix = " << *hessianMatrix
217  << ", hessianMLike = " << *hessianMLike
218  << std::endl;
219  }
220  if (hessianEffect) {
221  *m_env.subDisplayFile() << "In BayesianJointPdf<V,M>::lnValue()"
222  << ", domainVector = " << domainVector
223  << ": hessianEffect = " << *hessianEffect
224  << ", hessianELike = " << *hessianELike
225  << std::endl;
226  }
227  }
228 
229  if (gradVector ) *gradVector += *gradVLike;
230  if (hessianMatrix) *hessianMatrix += *hessianMLike;
231  if (hessianEffect) *hessianEffect += *hessianELike;
232 
233  double returnValue = value1;
234  if (m_likelihoodExponent == 0.) {
235  // Do nothing
236  }
237  else if (m_likelihoodExponent == 1.) {
238  returnValue += value2;
239  }
240  else {
241  returnValue += value2*m_likelihoodExponent;
242  } // prudenci 2010/03/05
243  returnValue += m_logOfNormalizationFactor; // [PDF-02] ???
244 
245  m_lastComputedLogPrior = value1;
247 
248  if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 54)) {
249  *m_env.subDisplayFile() << "Leaving BayesianJointPdf<V,M>::lnValue()"
250  << ": domainVector = " << domainVector
251  << ", returnValue = " << returnValue
252  << std::endl;
253  }
254 
255  return returnValue;
256 }
unsigned int displayVerbosity() const
Definition: Environment.C:396
double m_logOfNormalizationFactor
Definition: JointPdf.h:100
const BaseJointPdf< V, M > & m_priorDensity
const BaseScalarFunction< V, M > & m_likelihoodFunction
const BaseEnvironment & m_env
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
Definition: Environment.C:274
template<class V , class M >
void QUESO::BayesianJointPdf< V, M >::setNormalizationStyle ( unsigned int  value) const
virtual

Sets a value to be used in the normalization style of the prior density PDF (ie, protected attribute m_priorDensity).

Reimplemented from QUESO::BaseJointPdf< V, M >.

Definition at line 60 of file BayesianJointPdf.C.

61 {
62  m_priorDensity.setNormalizationStyle(value);
63  return;
64 }
const BaseJointPdf< V, M > & m_priorDensity

Member Data Documentation

template<class V = GslVector, class M = GslMatrix>
double QUESO::BayesianJointPdf< V, M >::m_lastComputedLogLikelihood
mutableprotected

Definition at line 107 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
double QUESO::BayesianJointPdf< V, M >::m_lastComputedLogPrior
mutableprotected

Definition at line 106 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
double QUESO::BayesianJointPdf< V, M >::m_likelihoodExponent
protected

Definition at line 105 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
const BaseScalarFunction<V,M>& QUESO::BayesianJointPdf< V, M >::m_likelihoodFunction
protected

Definition at line 104 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
const BaseJointPdf<V,M>& QUESO::BayesianJointPdf< V, M >::m_priorDensity
protected

Definition at line 103 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
M* QUESO::BayesianJointPdf< V, M >::m_tmpMatrix
mutableprotected

Definition at line 111 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
V QUESO::BayesianJointPdf< V, M >::m_tmpVector1
mutableprotected

Definition at line 109 of file BayesianJointPdf.h.

template<class V = GslVector, class M = GslMatrix>
V QUESO::BayesianJointPdf< V, M >::m_tmpVector2
mutableprotected

Definition at line 110 of file BayesianJointPdf.h.


The documentation for this class was generated from the following files:

Generated on Thu Jun 11 2015 13:52:35 for queso-0.53.0 by  doxygen 1.8.5