LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
|
Represents a multidimensional Gaussian function truncated at zero. More...
#include <TruncatedGaussian.h>
Public Types | |
enum | SampleStrategy { DIRECT_WITH_REJECTION , ALIGN_AND_WEIGHT } |
Enum that describes different ways of sampling from a multidimensional TruncatedGaussian. More... | |
typedef TruncatedGaussianSampler | Sampler |
typedef TruncatedGaussianLogEvaluator | LogEvaluator |
typedef TruncatedGaussianEvaluator | Evaluator |
Public Member Functions | |
Sampler | sample (SampleStrategy strategy) const |
Create a Sampler object that uses the given strategy. | |
Sampler | sample (Scalar minRejectionEfficiency=0.1) const |
Create a Sampler object that determines the strategy to use automatically. | |
LogEvaluator | evaluateLog () const |
Create a LogEvaluator object that can be used to efficiently evaluate the -log of the function. | |
Evaluator | evaluate () const |
Create an Evaluator object that can be used to efficiently evaluate the function. | |
int | getDim () const |
Return the dimensionality of the function. | |
Vector | maximize () const |
Return the location of the maximum of the truncated Gaussian. | |
Scalar | getUntruncatedFraction () const |
Return the fraction of the Gaussian integral that was truncated by the bounds. | |
Scalar | getLogPeakAmplitude () const |
Return the -log of the peak amplitude of the untruncated function. | |
Scalar | getLogIntegral () const |
Return the -log of the integral of the truncated function. | |
~TruncatedGaussian () | |
Static Public Member Functions | |
static TruncatedGaussian | fromSeriesParameters (Scalar q0, Vector const &gradient, Matrix const &hessian) |
Create from the first and second logarithmic derivatives of the Gaussian. | |
static TruncatedGaussian | fromStandardParameters (Vector const &mean, Matrix const &covariance) |
Create from the "standard" mean and covariance parameters of the normal distribution. | |
Friends | |
class | TruncatedGaussianSampler |
class | TruncatedGaussianLogEvaluator |
Represents a multidimensional Gaussian function truncated at zero.
This is typically used to represent the posterior probability of amplitude parameters, given a flat prior; we require that the amplitudes each be positive but otherwise do not modify the Gaussian likelihood.
Currently only 1 and 2 dimensions are supported, and all dimensions must be truncated. Computing integrals is the only operation for which > 2-d is not implemented, but the integrals must be computed upon construction, so we can't support any other operations for > 2-d either.
Many operations on TruncatedGaussians are defined in -log space, as underflow/overflow problems will often occur in the non-log forms.
See Truncated Gaussian Math for implementation notes
Definition at line 59 of file TruncatedGaussian.h.
Definition at line 89 of file TruncatedGaussian.h.
Definition at line 88 of file TruncatedGaussian.h.
Definition at line 87 of file TruncatedGaussian.h.
Enum that describes different ways of sampling from a multidimensional TruncatedGaussian.
Definition at line 63 of file TruncatedGaussian.h.
lsst::meas::modelfit::TruncatedGaussian::~TruncatedGaussian | ( | ) |
|
inline |
Create an Evaluator object that can be used to efficiently evaluate the function.
Definition at line 355 of file TruncatedGaussian.h.
|
inline |
Create a LogEvaluator object that can be used to efficiently evaluate the -log of the function.
Definition at line 353 of file TruncatedGaussian.h.
|
static |
Create from the first and second logarithmic derivatives of the Gaussian.
This causes the TruncatedGaussian to model the function:
\[ f(\alpha) = 1_{\alpha \ge 0}(\alpha) \; e^{-q(0) -g^T \alpha -\frac{1}{2}\alpha^T H \alpha} = 1_{\alpha \ge 0}(\alpha) \; e^{-q(\alpha)} \]
Where \(1_{\alpha \ge 0}(\alpha)\) is the indicator function
\[ 1_{\alpha \ge 0}(\alpha) \equiv \begin{cases} 1 & \text{if $\alpha \ge 0$}\\ 0 & \text{if $\alpha \lt 0$} \end{cases} \]
Note that this implies
\[ \left.\frac{\partial q}{\partial \alpha} \right|_{\alpha=0} = g \]
\[ \left.\frac{\partial^2 q}{\partial \alpha^2} \right|_{\alpha=0} = H \]
with (for \(\alpha \ge 0\))
\[ q(\alpha) \equiv -\ln f(\alpha) \]
Note that unlike that constructed by fromStandardParameters(), in this case \(f(\alpha)\) is NOT normalized to integrate to one.
[in] | q0 | Zeroth-order term in the expansion |
[in] | gradient | Vector of first derivatives \(g\) |
[in] | hessian | Matrix of second derivatives \(H\) (symmetric) |
|
static |
Create from the "standard" mean and covariance parameters of the normal distribution.
This causes the TruncatedGaussian to model the function:
\[ f(\alpha) = \frac{1_{\alpha \ge 0}(\alpha)}{k\left|2\pi\Sigma\right|^{1/2}} e^{-\frac{1}{2}(\alpha-\mu)^T \Sigma^{-1} (\alpha-\mu)} = \frac{1_{\alpha \ge 0}(\alpha)}{k}\;\Phi(\alpha-\mu,\Sigma) \]
Where \(1_{\alpha \ge 0}(\alpha)\) is the indicator function
\[ 1_{\alpha \ge 0}(\alpha) \equiv \begin{cases} 1 & \text{if $\alpha \ge 0$}\\ 0 & \text{if $\alpha \lt 0$} \end{cases} \]
and \(k\) is the normalization constant that \(f(\alpha)\) integrates to unity:
\[ k \equiv \int_0^{\infty}\!\!\Phi(\alpha-\mu,\Sigma) d\alpha \]
Note that unlike that constructed by fromSeriesParameters(), in this case \(f(\alpha\) is normalized to integrate to one.
[in] | mean | Mean vector \(\mu\) |
[in] | covariance | Covariance matrix \(\Sigma\) (symmetric) |
int lsst::meas::modelfit::TruncatedGaussian::getDim | ( | ) | const |
Return the dimensionality of the function.
Scalar lsst::meas::modelfit::TruncatedGaussian::getLogIntegral | ( | ) | const |
Return the -log of the integral of the truncated function.
More precisely, this is simply
\[ -\ln\int_{-\infty}^{\infty} f(\alpha) d\alpha \]
In series form, this is equivalent to
\[ -\ln\int_0^{\infty} e^{-q(\alpha)} d\alpha \]
In standard parameter form it is 0 by construction.
Scalar lsst::meas::modelfit::TruncatedGaussian::getLogPeakAmplitude | ( | ) | const |
Return the -log of the peak amplitude of the untruncated function.
In series form, this is equal to \(q(\mu)\) where \(\mu=-H^{-1}g\). In standard parameter form, this is \(\frac{1}{2}\ln\left|2\pi\Sigma\right| - \ln k\).
Scalar lsst::meas::modelfit::TruncatedGaussian::getUntruncatedFraction | ( | ) | const |
Return the fraction of the Gaussian integral that was truncated by the bounds.
In series form (see fromSeriesParameters), this is
\[ \frac{\int_0^{\infty} e^{-q(\alpha)} d\alpha}{\int_{-infty}^{\infty} e^{-q(\alpha)} d\alpha} \]
while in standard parameter form it is simply the normalization \(k\) described in fromStandardParameters().
Vector lsst::meas::modelfit::TruncatedGaussian::maximize | ( | ) | const |
Return the location of the maximum of the truncated Gaussian.
This is simply the untruncated location parameter mu if all of its elements are positive; otherwise, one or more elements will be zero (and the rest may not be same as the elements of mu).
|
inline |
Create a Sampler object that uses the given strategy.
Definition at line 342 of file TruncatedGaussian.h.
|
inline |
Create a Sampler object that determines the strategy to use automatically.
If the efficiency (number of accepted samples divided by number of total samples) is would (on average) be greater than the given value, DIRECT_WITH_REJECTION is used. If not, ALIGN_AND_WEIGHT is used. Note that the sampling effeciency for DIRECT_WITH_REJECTION is exactly the same as the "untruncated fraction".
Definition at line 346 of file TruncatedGaussian.h.
|
friend |
Definition at line 233 of file TruncatedGaussian.h.
|
friend |
Definition at line 232 of file TruncatedGaussian.h.