LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Protected Member Functions | List of all members
lsst::meas::modelfit::Prior Class Referenceabstract

Base class for Bayesian priors. More...

#include <Prior.h>

Inheritance diagram for lsst::meas::modelfit::Prior:
lsst::meas::modelfit::MixturePrior lsst::meas::modelfit::SemiEmpiricalPrior lsst::meas::modelfit::SoftenedLinearPrior

Public Member Functions

std::string const & getTag () const
 
virtual Scalar evaluate (ndarray::Array< Scalar const, 1, 1 > const &nonlinear, ndarray::Array< Scalar const, 1, 1 > const &amplitudes) const =0
 Evaluate the prior at the given point in nonlinear and amplitude space. More...
 
virtual void evaluateDerivatives (ndarray::Array< Scalar const, 1, 1 > const &nonlinear, ndarray::Array< Scalar const, 1, 1 > const &amplitudes, ndarray::Array< Scalar, 1, 1 > const &nonlinearGradient, ndarray::Array< Scalar, 1, 1 > const &amplitudeGradient, ndarray::Array< Scalar, 2, 1 > const &nonlinearHessian, ndarray::Array< Scalar, 2, 1 > const &amplitudeHessian, ndarray::Array< Scalar, 2, 1 > const &crossHessian) const =0
 Evaluate the derivatives of the prior at the given point in nonlinear and amplitude space. More...
 
virtual Scalar marginalize (Vector const &gradient, Matrix const &hessian, ndarray::Array< Scalar const, 1, 1 > const &nonlinear) const =0
 Return the -log amplitude integral of the prior*likelihood product. More...
 
virtual Scalar maximize (Vector const &gradient, Matrix const &hessian, ndarray::Array< Scalar const, 1, 1 > const &nonlinear, ndarray::Array< Scalar, 1, 1 > const &amplitudes) const =0
 Compute the amplitude vector that maximizes the prior x likelihood product. More...
 
virtual void drawAmplitudes (Vector const &gradient, Matrix const &hessian, ndarray::Array< Scalar const, 1, 1 > const &nonlinear, afw::math::Random &rng, ndarray::Array< Scalar, 2, 1 > const &amplitudes, ndarray::Array< Scalar, 1, 1 > const &weights, bool multiplyWeights=false) const =0
 Draw a set of Monte Carlo amplitude vectors. More...
 
virtual ~Prior ()
 
 Prior (const Prior &)=delete
 
Prioroperator= (const Prior &)=delete
 
 Prior (Prior &&)=delete
 
Prioroperator= (Prior &&)=delete
 

Protected Member Functions

 Prior (std::string const &tag="")
 

Detailed Description

Base class for Bayesian priors.

Definition at line 36 of file Prior.h.

Constructor & Destructor Documentation

◆ ~Prior()

virtual lsst::meas::modelfit::Prior::~Prior ( )
inlinevirtual

Definition at line 161 of file Prior.h.

161 {}

◆ Prior() [1/3]

lsst::meas::modelfit::Prior::Prior ( const Prior )
delete

◆ Prior() [2/3]

lsst::meas::modelfit::Prior::Prior ( Prior &&  )
delete

◆ Prior() [3/3]

lsst::meas::modelfit::Prior::Prior ( std::string const &  tag = "")
inlineexplicitprotected

Definition at line 173 of file Prior.h.

173 : _tag(tag) {}

Member Function Documentation

◆ drawAmplitudes()

virtual void lsst::meas::modelfit::Prior::drawAmplitudes ( Vector const &  gradient,
Matrix const &  hessian,
ndarray::Array< Scalar const, 1, 1 > const &  nonlinear,
afw::math::Random rng,
ndarray::Array< Scalar, 2, 1 > const &  amplitudes,
ndarray::Array< Scalar, 1, 1 > const &  weights,
bool  multiplyWeights = false 
) const
pure virtual

Draw a set of Monte Carlo amplitude vectors.

This provides a Monte Carlo approach to extracting the conditional amplitude distribution that is integrated by the marginalize() method.

Parameters
[in]gradientGradient of the -log likelihood in \(\alpha\) at fixed \(\theta\).
[in]hessianSecond derivatives of of the -log likelihood in \(\alpha\) at fixed \(\theta\).
[in]nonlinearThe nonlinear parameters \(\theta\) at which we are evaluating the conditional distribution \(P(\alpha|\theta)\).
[in,out]rngRandom number generator.
[out]amplitudesThe Monte Carlo sample of amplitude parameters \(\alpha\). The number of rows sets the number of samples, while the number of columns must match the dimensionality of \(\alpha\).
[out]weightsThe weights of the Monte Carlo samples; should asymptotically average to one.
[in]multiplyWeightsIf true, multiply weight vector instead of overwriting it.

Implemented in lsst::meas::modelfit::SoftenedLinearPrior, lsst::meas::modelfit::SemiEmpiricalPrior, and lsst::meas::modelfit::MixturePrior.

◆ evaluate()

virtual Scalar lsst::meas::modelfit::Prior::evaluate ( ndarray::Array< Scalar const, 1, 1 > const &  nonlinear,
ndarray::Array< Scalar const, 1, 1 > const &  amplitudes 
) const
pure virtual

Evaluate the prior at the given point in nonlinear and amplitude space.

Parameters
[in]nonlinearVector of nonlinear parameters
[in]amplitudesVector of linear parameters

Implemented in lsst::meas::modelfit::SoftenedLinearPrior, lsst::meas::modelfit::SemiEmpiricalPrior, and lsst::meas::modelfit::MixturePrior.

◆ evaluateDerivatives()

virtual void lsst::meas::modelfit::Prior::evaluateDerivatives ( ndarray::Array< Scalar const, 1, 1 > const &  nonlinear,
ndarray::Array< Scalar const, 1, 1 > const &  amplitudes,
ndarray::Array< Scalar, 1, 1 > const &  nonlinearGradient,
ndarray::Array< Scalar, 1, 1 > const &  amplitudeGradient,
ndarray::Array< Scalar, 2, 1 > const &  nonlinearHessian,
ndarray::Array< Scalar, 2, 1 > const &  amplitudeHessian,
ndarray::Array< Scalar, 2, 1 > const &  crossHessian 
) const
pure virtual

Evaluate the derivatives of the prior at the given point in nonlinear and amplitude space.

Note that while the model is linear in the amplitudes, the prior is not necessarily linear in the amplitudes, so we do care about second derivatives w.r.t. amplitudes.

Parameters
[in]nonlinearVector of nonlinear parameters
[in]amplitudesVector of linear parameters
[in]nonlinearGradientFirst derivative w.r.t. nonlinear parameters
[in]amplitudeGradientFirst derivative w.r.t. linear parameters parameters
[in]nonlinearHessianSecond derivative w.r.t. nonlinear parameters
[in]amplitudeHessianSecond derivative w.r.t. linear parameters parameters
[in]crossHessianSecond derivative cross term of d(nonlinear)d(amplitudes); shape is [nonlinearDim, amplitudeDim].

Implemented in lsst::meas::modelfit::SoftenedLinearPrior, lsst::meas::modelfit::SemiEmpiricalPrior, and lsst::meas::modelfit::MixturePrior.

◆ getTag()

std::string const& lsst::meas::modelfit::Prior::getTag ( ) const
inline

Definition at line 39 of file Prior.h.

39 { return _tag; }

◆ marginalize()

virtual Scalar lsst::meas::modelfit::Prior::marginalize ( Vector const &  gradient,
Matrix const &  hessian,
ndarray::Array< Scalar const, 1, 1 > const &  nonlinear 
) const
pure virtual

Return the -log amplitude integral of the prior*likelihood product.

If \(\alpha\) are the amplitudes, \(\theta\) are the nonlinear parameters, and \(D\) is the data, then this method represents \(P(\alpha,\theta)\) by computing

\[ -\ln\left[\int\!P(D|\alpha,\theta)\,P(\alpha,\theta)\,d\alpha\right] \]

at fixed \(\theta\). Because \(\alpha\) are linear parameters, \(P(D|\alpha,\theta)\) is Gaussian in \(\alpha\), and because \(\theta\) is fixed, it's usually convenient to think of the integral as:

\[ -ln\left[P(\theta)\int\!P(D|\alpha,\theta)\,P(\alpha|\theta)\,d\alpha\right] \]

Thus, we marginalize the likelihood in \(\alpha\) at fixed \(\theta\), and then multiply by the prior on \(\theta\).

We also assume the likelihood \(P(D|\alpha,\theta)\) is Gaussian in \(\alpha\), which is generally true because \(\alpha\) defined such that the model is linear in them, and the noise on the data is generally Gaussian. In detail, we represent the likelihood at fixed \(\theta\) as

\[ P(D|\alpha,\theta) = A e^{-g^T\alpha - \frac{1}{2}\alpha^T H \alpha} \]

The normalization \(A\) can be brought outside the integral as a constant to be added to the return value, so it is not passed as an argument to this function.

Parameters
[in]gradientGradient of the -log likelihood in \(\alpha\) at fixed \(\theta\); the vector \(g\) in the equation above.
[in]hessianSecond derivatives of of the -log likelihood in \(\alpha\) at fixed \(\theta\); the matrix \(H\) in the equation above.
[in]nonlinearThe nonlinear parameters \(\theta\).

Implemented in lsst::meas::modelfit::SoftenedLinearPrior, lsst::meas::modelfit::SemiEmpiricalPrior, and lsst::meas::modelfit::MixturePrior.

◆ maximize()

virtual Scalar lsst::meas::modelfit::Prior::maximize ( Vector const &  gradient,
Matrix const &  hessian,
ndarray::Array< Scalar const, 1, 1 > const &  nonlinear,
ndarray::Array< Scalar, 1, 1 > const &  amplitudes 
) const
pure virtual

Compute the amplitude vector that maximizes the prior x likelihood product.

Parameters
[in]gradientGradient of the -log likelihood in \(\alpha\) at fixed \(\theta\); the vector \(g\) in the equation above.
[in]hessianSecond derivatives of of the -log likelihood in \(\alpha\) at fixed \(\theta\); the matrix \(H\) in the equation above.
[in]nonlinearThe nonlinear parameters \(\theta\).
[out]amplitudesThe posterior-maximum amplitude parameters \(\alpha\).
Returns
The -log(posterior) at the computed amplitude point.

Implemented in lsst::meas::modelfit::SoftenedLinearPrior, lsst::meas::modelfit::SemiEmpiricalPrior, and lsst::meas::modelfit::MixturePrior.

◆ operator=() [1/2]

Prior& lsst::meas::modelfit::Prior::operator= ( const Prior )
delete

◆ operator=() [2/2]

Prior& lsst::meas::modelfit::Prior::operator= ( Prior &&  )
delete

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