Isis 3 Programmer Reference
MaximumLikelihoodWFunctions.h
1#ifndef MaximumLikelihoodWFunctions_h
2#define MaximumLikelihoodWFunctions_h
3
10/* SPDX-License-Identifier: CC0-1.0 */
11
12#include <QString>
13
14namespace Isis {
50 public:
54 // Each model has an accompannying private method that converts from a
55 // resiuduals to a weight scaler.
56 enum Model {
57
66
74
85
94 Chen
95 };
96 static QString modelToString(Model model);
97 static MaximumLikelihoodWFunctions::Model stringToModel(QString modelName);
98
100 MaximumLikelihoodWFunctions(Model modelSelection);
101 MaximumLikelihoodWFunctions(Model modelSelection, double tweakingConstant);
105
106 void setModel(Model modelSelection); // uses default tweaking constant
108
109 void setModel(Model modelSelection, double tweakingConstant);
111
112 Model model() const;
113 double tweakingConstant() const;
114
115 // the W functions provide an additional weighting factor W which is used
116 // to 're-weight' each observation dynamically during an adjustment, the
117 // scalar functions provide access to various flavors of this scalar (as
118 // a function of the residual divided by the residuals sigma)
119
120 double sqrtWeightScaler(double residualZScore); //it is often convient to use square roots of
121 //weights when building normals, this function
122 // provides the scaler for the square root of
123 // the weight directly
124 double tweakingConstantQuantile(); // returns which quantile of the residuals is recommended to
125 // use as the tweaking constant, this varies as a function of
126 // the model being employed
127
128 QString weightedResidualCutoff();
129
130 QDataStream &write(QDataStream &stream) const;
131 QDataStream &read(QDataStream &stream);
132
133 private:
134 double weightScaler(double residualZScore); // This directly provides the scaler for the weight
135 // (instead of the radical weight), thus it provides
136 // sqrtWeightScaler^2
137 double huber(double residualZScore);
138 double huberModified(double residualZScore);
139 double welsch(double residualZScore);
140 double chen(double residualZScore);
141
151 };
152 // operators to read/write to/from binary data
153 QDataStream &operator<<(QDataStream &stream, const MaximumLikelihoodWFunctions &mlwf);
154 QDataStream &operator>>(QDataStream &stream, MaximumLikelihoodWFunctions &mlwf);
155
156 QDataStream &operator<<(QDataStream &stream, const MaximumLikelihoodWFunctions::Model &modelEnum);
157 QDataStream &operator>>(QDataStream &stream, MaximumLikelihoodWFunctions::Model &modelEnum);
158
159};// end namespace Isis
160
161#endif
Class provides maximum likelihood estimation functions for robust parameter estimation,...
MaximumLikelihoodWFunctions()
Sets up a maximumlikelihood estimation function with Huber model and default tweaking constant.
Model m_model
The enumerated value for the maximum likelihood estimation model to be used.
static QString modelToString(Model model)
Static method to return a string represtentation for a given MaximumLikelihoodWFunctions::Model enum.
void setModel(Model modelSelection)
Allows the maximum likelihood model to be changed together and the default tweaking constant to be se...
Model model() const
Accessor method to return the MaximumLikelihoodWFunctions::Model enumeration.
QString weightedResidualCutoff()
Method to return a string represtentation of the weighted residual cutoff (if it exists) for the Maxi...
double huber(double residualZScore)
Huber maximum likelihood estimation function evaluation.
double welsch(double residualZScore)
Modified Huber maximum likelihood estimation function evaluation.
Model
The supported maximum likelihood estimation models.
@ Welsch
The Welsch method aggresively discounts measures with large resiudals.
@ Chen
The Chen method was found in "Robust Regression with Projection Based M-estimators" Chen,...
@ HuberModified
A modification to Huber's method propsed by William J.J.
@ Huber
According to Zhang (Parameter Estimation: A Tutorial with application to conic fitting) "[Huber's] es...
double huberModified(double residualZScore)
Modified Huber maximum likelihood estimation function evaluation.
double tweakingConstantQuantile()
Suggest a quantile of the probility distribution of the residuals to use as the tweaking constants ba...
double m_tweakingConstant
The tweaking constant for the maximum likelihood models.
void setTweakingConstantDefault()
Sets default tweaking constants based on the maximum likelihood estimation model being used.
double sqrtWeightScaler(double residualZScore)
This provides the scaler to the sqrt of the weight, which is very useful for building normal equation...
double weightScaler(double residualZScore)
This provides the scalar for the weight (not the scaler for the square root of the weight,...
double chen(double residualZScore)
Modified Huber maximum likelihood estimation function evaluation.
void setTweakingConstant(double tweakingConstant)
Allows the tweaking constant to be changed without changing the maximum likelihood function.
double tweakingConstant() const
Returns the current tweaking constant.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
std::istream & operator>>(std::istream &is, CSVReader &csv)
Input read operator for input stream sources.
QDebug operator<<(QDebug debug, const Hillshade &hillshade)
Print this class out to a QDebug object.