truncatedNormalCdf function

double truncatedNormalCdf(
  1. num x,
  2. num xMin,
  3. num xMax,
  4. num meanOfParent,
  5. num stdDevOfParent
)

Truncated normal cumulative probability density function

  • min: left limit.
  • max: right limit satisfying min < max.
  • meanOfParent: Mean of the parent normal distribution.
  • stdDevOfParent: Standard deviation of the parent normal distribution.
  • truncatedNormalPdf(x) > 0 for x in (xMin, xMax) and zero elsewhere.

Throws an error of type ErrorOfType<InvalidFunctionParameter> if xMin >= xMax.

Implementation

double truncatedNormalCdf(
  num x,
  num xMin,
  num xMax,
  num meanOfParent,
  num stdDevOfParent,
) {
  if (xMin >= xMax) {
    throw ErrorOfType<InvalidFunctionParameter>(
      message: 'Error in truncatedNormalCdf($x, $xMin, $xMax, '
          '$meanOfParent, $stdDevOfParent)',
      invalidState: 'min: $xMin >= max: $xMax',
      expectedState: 'xMmin < xMmax',
    );
  }
  final invStdDev = 1.0 / stdDevOfParent;
  final alpha = (xMin - meanOfParent) * invStdDev;
  final beta = (xMax - meanOfParent) * invStdDev;
  if (x <= xMin) return 0.0;
  if (x >= xMax) return 1.0;

  return (stdNormalCdf((x - meanOfParent) * invStdDev) - stdNormalCdf(alpha)) /
      (stdNormalCdf(beta) - stdNormalCdf(alpha) + epsilon);
}