Source code for popsynth.aux_samplers.lognormal_aux_sampler

import numpy as np
import scipy.stats as stats

from popsynth.auxiliary_sampler import AuxiliaryParameter, AuxiliarySampler


[docs]class LogNormalAuxSampler(AuxiliarySampler): _auxiliary_sampler_name = "LogNormalAuxSampler" mu = AuxiliaryParameter(default=0) tau = AuxiliaryParameter(default=1, vmin=0) sigma = AuxiliaryParameter(default=1, vmin=0)
[docs] def __init__(self, name: str, observed: bool = True): """ A Log normal sampler, where property ~ e^N(``mu``, ``sigma``). :param name: Name of the property :type name: str :param observed: `True` if the property is observed, `False` if it is latent. Defaults to `True` :type observed: bool :param mu: Mean of the lognormal :type mu: :class:`AuxiliaryParameter` :param tau: Standard deviation of the lognormal :type tau: :class:`AuxiliaryParameter` :param sigma: Standard deviation of normal distribution from which observed values are sampled, if ``observed`` is `True` :type sigma: :class:`AuxiliaryParameter` """ super(LogNormalAuxSampler, self).__init__(name=name, observed=observed)
[docs] def true_sampler(self, size: int): self._true_values = np.exp( stats.norm.rvs(loc=self.mu, scale=self.tau, size=size))
[docs] def observation_sampler(self, size: int): if self._is_observed: self._obs_values = stats.norm.rvs(loc=self._true_values, scale=self.sigma, size=size) else: self._obs_values = self._true_values
[docs]class Log10NormalAuxSampler(AuxiliarySampler): _auxiliary_sampler_name = "Log10NormalAuxSampler" mu = AuxiliaryParameter(default=0) tau = AuxiliaryParameter(default=1, vmin=0) sigma = AuxiliaryParameter(default=1, vmin=0)
[docs] def __init__(self, name: str, observed: bool = True): """ A Log10 normal sampler, where property ~ 10^N(``mu``, ``sigma``). :param name: Name of the property :type name: str :param observed: `True` if the property is observed, `False` if it is latent. Defaults to `True` :type observed: bool :param mu: Mean of the log10normal :type mu: :class:`AuxiliaryParameter` :param tau: Standard deviation of the log10normal :type tau: :class:`AuxiliaryParameter` :param sigma: Standard deviation of normal distribution from which observed values are sampled, if ``observed`` is `True` :type sigma: :class:`AuxiliaryParameter` """ super(Log10NormalAuxSampler, self).__init__(name=name, observed=observed)
[docs] def true_sampler(self, size: int): self._true_values = np.power( 10, stats.norm.rvs(loc=self.mu, scale=self.tau, size=size))
[docs] def observation_sampler(self, size: int): if self._is_observed: self._obs_values = stats.norm.rvs(loc=self._true_values, scale=self.sigma, size=size) else: self._obs_values = self._true_values