probabilistic_model.distributions.gaussian
==========================================

.. py:module:: probabilistic_model.distributions.gaussian


Classes
-------

.. autoapisummary::

   probabilistic_model.distributions.gaussian.GaussianDistribution
   probabilistic_model.distributions.gaussian.TruncatedGaussianDistribution


Module Contents
---------------

.. py:class:: GaussianDistribution(variable: probabilistic_model.distributions.distributions.Continuous, location: float, scale: float)

   Bases: :py:obj:`probabilistic_model.distributions.distributions.ContinuousDistribution`


   Class for Gaussian distributions.


   .. py:attribute:: location
      :type:  float

      The mean of the Gaussian distribution.



   .. py:attribute:: scale
      :type:  float

      The standard deviation of the Gaussian distribution.



   .. py:attribute:: variable


   .. py:property:: univariate_support
      :type: probabilistic_model.distributions.distributions.Interval


      :return: The univariate support of the distribution. This is not an Event.



   .. py:method:: log_likelihood(x: probabilistic_model.distributions.distributions.np.array) -> probabilistic_model.distributions.distributions.np.array

      Calculate the log-likelihood of an event.

      Check the documentation of `likelihood` for more information.

      :param events: The full evidence event with shape (#events, #variables)
      :return: The log-likelihood of the event with shape (#events).



   .. py:method:: cdf(x: probabilistic_model.distributions.distributions.np.array) -> probabilistic_model.distributions.distributions.np.array

      Calculate the cumulative distribution function at x.
      :param x: The data
      :return: The cumulative distribution function at x



   .. py:method:: univariate_log_mode() -> probabilistic_model.distributions.distributions.Tuple[probabilistic_model.distributions.distributions.AbstractCompositeSet, float]

      :return: The univariate mode of the distribution and its log-likelihood. The mode is not an Event.



   .. py:method:: sample(amount: int) -> probabilistic_model.distributions.distributions.np.array

      Sample from the model.

      :param amount: The number of samples to draw.
      :return: The samples.



   .. py:method:: ppf(value)


   .. py:method:: raw_moment(order: int) -> float

      Helper method to calculate the raw moment of a Gaussian distribution.

      The raw moment is given by:

      .. math::

          E(X^n) = \sum_{j=0}^{\lfloor \frac{n}{2}\rfloor}\binom{n}{2j}\dfrac{\mu^{n-2j}\sigma^{2j}(2j)!}{j!2^j}.





   .. py:method:: moment(order: probabilistic_model.distributions.distributions.OrderType, center: probabilistic_model.distributions.distributions.CenterType) -> probabilistic_model.distributions.distributions.MomentType

      Calculate the moment of the distribution using Alessandro's (made up) Equation:

      .. math::

          E(X-center)^i = \sum_{i=0}^{order} \binom{order}{i} E[X^i] * (- center)^{(order-i)}



   .. py:method:: log_conditional_from_simple_interval(interval: probabilistic_model.distributions.distributions.SimpleInterval) -> probabilistic_model.distributions.distributions.Tuple[probabilistic_model.distributions.distributions.Optional[TruncatedGaussianDistribution], float]

      Calculate the truncated distribution given a simple interval.

      :param interval: The simple interval
      :return: The truncated distribution and the log-probability of the interval.



   .. py:method:: __eq__(other: probabilistic_model.distributions.distributions.Self)


   .. py:property:: representation

      The symbol used to represent this distribution.



   .. py:method:: __repr__()


   .. py:method:: __copy__()


   .. py:method:: __deepcopy__(memo=None)


   .. py:method:: to_json() -> probabilistic_model.distributions.distributions.Dict[str, probabilistic_model.distributions.distributions.Any]


   .. py:method:: _from_json(data: probabilistic_model.distributions.distributions.Dict[str, probabilistic_model.distributions.distributions.Any]) -> probabilistic_model.distributions.distributions.Self
      :classmethod:


      Create a variable from a json dict.
      This method is called from the from_json method after the correct subclass is determined and should be
      overwritten by the respective subclass.

      :param data: The json dict
      :return: The deserialized object



   .. py:property:: abbreviated_symbol
      :type: str



   .. py:method:: translate(translation: probabilistic_model.distributions.distributions.VariableMap[probabilistic_model.distributions.distributions.Variable, float])

      Translate the model in-place.
      Translation is done by adding the translation to the variable location influencing values.
      The translation can be viewed as what happens
      when you shift the numeric variables of the model by a constant vector.

      :param translation: The variable value pairs to translate the model by.



.. py:class:: TruncatedGaussianDistribution(variable: probabilistic_model.distributions.distributions.Continuous, interval: probabilistic_model.distributions.distributions.SimpleInterval, location: float, scale: float)

   Bases: :py:obj:`probabilistic_model.distributions.distributions.ContinuousDistributionWithFiniteSupport`, :py:obj:`GaussianDistribution`


   Class for Truncated Gaussian distributions.


   .. py:attribute:: interval

      The interval of the distribution.



   .. py:property:: normalizing_constant
      :type: float


      Helper method to calculate

      .. math::

      Z = {\mathbf{\Phi}\left ( \frac{self.interval.upper-\mu}{\sigma} \right )-\mathbf{\Phi}
      \left( \frac{self.interval.lower-\mu}{\sigma} \right )}




   .. py:property:: cdf_of_lower


   .. py:method:: log_likelihood_without_bounds_check(x: probabilistic_model.distributions.distributions.np.array) -> probabilistic_model.distributions.distributions.np.array

      Evaluate the logarithmic likelihood function at `x` without checking the inclusion into the interval.
      :param x: x where p(x) > 0
      :return: log(p(x))



   .. py:method:: cdf(x: probabilistic_model.distributions.distributions.np.array) -> probabilistic_model.distributions.distributions.np.array

      Calculate the cumulative distribution function at x.
      :param x: The data
      :return: The cumulative distribution function at x



   .. py:method:: univariate_log_mode() -> probabilistic_model.distributions.distributions.Tuple[probabilistic_model.distributions.distributions.Interval, float]

      :return: The univariate mode of the distribution and its log-likelihood. The mode is not an Event.



   .. py:method:: rejection_sample(amount: int) -> probabilistic_model.distributions.distributions.np.array

      .. note::
          This uses rejection sampling and hence is inefficient.
          The acceptance probability is self.normalizing_constant.




   .. py:method:: moment(order: probabilistic_model.distributions.distributions.OrderType, center: probabilistic_model.distributions.distributions.CenterType) -> probabilistic_model.distributions.distributions.MomentType

      Helper method to calculate the moment of a Truncated Gaussian distribution.

      .. note::
      This method follows the equation (2.8) in :cite:p:`ogasawara2022moments`.

      .. math::

          \mathbb{E} \left[ \left( X-center \right)^{order} \right]\mathds{1}_{\left[ lower , upper \right]}(x)
          = \sigma^{order} \frac{1}{\Phi(upper)-\Phi(lower)} \sum_{k=0}^{order} \binom{order}{k} I_k (-center)^{(order-k)}.

          where:

          .. math::

              I_k = \frac{2^{\frac{k}{2}}}{\sqrt{\pi}}\Gamma \left( \frac{k+1}{2} \right) \left[ sgn \left(upper\right)
               \mathds{1}\left \{ k=2 \nu \right \} + \mathds{1} \left\{k = 2\nu -1 \right\} \frac{1}{2}
                F_{\Gamma} \left( \frac{upper^2}{2},\frac{k+1}{2} \right) - sgn \left(lower\right) \mathds{1}\left \{ k=2 \nu \right \}
               + \mathds{1} \left\{k = 2\nu -1 \right\} \frac{1}{2} F_{\Gamma} \left( \frac{lower^2}{2},\frac{k+1}{2} \right) \right]

      :return: The moment of the distribution.




   .. py:method:: __eq__(other)


   .. py:property:: representation

      The symbol used to represent this distribution.



   .. py:method:: __copy__()


   .. py:method:: __deepcopy__(memo=None)


   .. py:method:: to_json() -> probabilistic_model.distributions.distributions.Dict[str, probabilistic_model.distributions.distributions.Any]


   .. py:method:: _from_json(data: probabilistic_model.distributions.distributions.Dict[str, probabilistic_model.distributions.distributions.Any]) -> probabilistic_model.distributions.distributions.Self
      :classmethod:


      Create a variable from a json dict.
      This method is called from the from_json method after the correct subclass is determined and should be
      overwritten by the respective subclass.

      :param data: The json dict
      :return: The deserialized object



   .. py:method:: transform_to_standard_normal(number: float) -> float

      Transform the number to the standard normal distribution.
      :param number: The number to transform
      :return: The transformed bound



   .. py:method:: robert_rejection_sample(amount: int) -> probabilistic_model.distributions.distributions.np.ndarray

      Use robert rejection sampling to sample from the truncated Gaussian distribution.

      :param amount: The amount of samples to generate
      :return: The samples



   .. py:method:: robert_rejection_sample_from_standard_normal_with_double_truncation(amount: int) -> probabilistic_model.distributions.distributions.np.ndarray

      Use robert rejection sampling to sample from the truncated standard normal distribution.
      Resamples as long as the amount of samples is not reached.

      :param amount: The amount of samples to generate
      :return: The samples



   .. py:method:: robert_rejection_sample_from_standard_normal_with_double_truncation_helper(amount: int) -> probabilistic_model.distributions.distributions.np.ndarray

      Use robert rejection sampling to sample from the truncated standard normal distribution.

      :param amount: The maximum number of samples to generate. The actual number of samples can be lower due to
          rejection sampling.
      :return: The samples



   .. py:method:: sample(amount: int) -> probabilistic_model.distributions.distributions.np.array

      Sample from the model.

      :param amount: The number of samples to draw.
      :return: The samples.



   .. py:method:: translate(translation: probabilistic_model.distributions.distributions.VariableMap[probabilistic_model.distributions.distributions.Variable, float])

      Translate the model in-place.
      Translation is done by adding the translation to the variable location influencing values.
      The translation can be viewed as what happens
      when you shift the numeric variables of the model by a constant vector.

      :param translation: The variable value pairs to translate the model by.



   .. py:method:: scale(scale: probabilistic_model.distributions.distributions.VariableMap[probabilistic_model.distributions.distributions.Variable, float])

      Scale the model in-place.
      Scaling is done by multiplying the variable location influencing values.
      The scaling can be viewed as what happens
      when you multiply the numeric variables of the model by a constant vector.

      :param scaling: The variable value pairs to scale the model by.



