Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
The point at which the pdf should be evaluated.
Returns
-------
Float:
The evaluated pdf at point x.
"""
mu = input_values[0]
sigma = input_values[1]
pdf = norm(mu,sigma).pdf(x)
self.calculated_pdf = pdf
return pdf
class StudentT(ProbabilisticModel, Continuous):
def __init__(self, parameters, name='StudentT'):
"""
This class implements a probabilistic model following the Student's T-distribution.
Parameters
----------
parameters: list
Contains the probabilistic models and hyperparameters from which the model derives.
The list has two entries: from the first entry mean of the distribution and from the second entry degrees of freedom is derived.
Note that the second value of the list is strictly greater than 0.
name: string
The name that should be given to the probabilistic model in the journal file.
"""
if not isinstance(parameters, list):
import numpy as np
from numbers import Number
from abcpy.probabilisticmodels import ProbabilisticModel, Continuous, InputConnector
from gaussian_model_simple import gaussian_model
class Gaussian(ProbabilisticModel, Continuous):
def __init__(self, parameters, name='Gaussian'):
# We expect input of type parameters = [mu, sigma]
if not isinstance(parameters, list):
raise TypeError('Input of Normal model is of type list')
if len(parameters) != 2:
raise RuntimeError('Input list must be of length 2, containing [mu, sigma].')
input_connector = InputConnector.from_list(parameters)
super().__init__(input_connector, name)
def _check_input(self, input_values):
# Check whether input has correct type or format
if len(input_values) != 2:
raise ValueError('Number of parameters of Normal model must be 2.')
The evaluated pmf at point x.
"""
# If the provided point is not an integer, it is converted to one
x = int(x)
n = input_values[0]
p = input_values[1]
if(x>n):
pmf = 0
else:
pmf = comb(n,x)*pow(p,x)*pow((1-p),(n-x))
self.calculated_pmf = pmf
return pmf
class Poisson(Discrete, ProbabilisticModel):
def __init__(self, parameters, name='Poisson'):
"""This class implements a probabilistic model following a poisson distribution.
Parameters
----------
parameters: list
A list containing one entry, the mean of the distribution.
name: string
The name that should be given to the probabilistic model in the journal file.
"""
if not isinstance(parameters, list):
raise TypeError('Input for Poisson has to be of type list.')
if len(parameters)!=1:
raise ValueError('Input for Poisson has to be of length 1.')
List of input parameters, in the same order as specified in the InputConnector passed to the init function
x: float
The point at which the pmf should be evaluated.
Returns
-------
float:
The pmf evaluated at point x.
"""
probability = input_values[0]
pmf = bernoulli(probability).pmf(x)
self.calculated_pmf = pmf
return pmf
class Binomial(Discrete, ProbabilisticModel):
def __init__(self, parameters, name='Binomial'):
"""
This class implements a probabilistic model following a binomial distribution.
Parameters
----------
parameters: list
Contains the probabilistic models and hyperparameters from which the model derives. Note that the first
entry of the list, n, an integer and has to be larger than or equal to 0, while the second entry, p, has to be in the
interval [0,1].
name: string
The name that should be given to the probabilistic model in the journal file.
"""
if not isinstance(parameters, list):
x: integer
The point at which the pmf should be evaluated.
Returns
-------
Float
The evaluated pmf at point x.
"""
pmf = poisson(int(input_values[0])).pmf(x)
self.calculated_pmf = pmf
return pmf
class DiscreteUniform(Discrete, ProbabilisticModel):
def __init__(self, parameters, name='DiscreteUniform'):
"""This class implements a probabilistic model following a Discrete Uniform distribution.
Parameters
----------
parameters: list
A list containing two entries, the upper and lower bound of the range.
name: string
The name that should be given to the probabilistic model in the journal file.
"""
if not isinstance(parameters, list):
raise TypeError('Input for Discrete Uniform has to be of type list.')
if len(parameters) != 2:
raise ValueError('Input for Discrete Uniform has to be of length 2.')
"""
if not isinstance(parameters, list):
raise TypeError('Input for Multivariate StudentT has to be of type list.')
if len(parameters)<3:
raise ValueError('Input for Multivariate Student T has to be of length 3.')
if not isinstance(parameters[0], list):
raise TypeError('Input for mean of Multivariate Student T has to be of type list.')
if not isinstance(parameters[1], list):
raise TypeError('Input for covariance of Multivariate Student T has to be of type list.')
mean = parameters[0]
if isinstance(mean, list):
self._dimension = len(mean)
input_parameters = InputConnector.from_list(parameters)
elif isinstance(mean, ProbabilisticModel):
self._dimension = mean.get_output_dimension()
input_parameters = parameters
super(MultiStudentT, self).__init__(input_parameters, name)
self.visited = False
"""
Calculates the probability mass function of the model.
Parameters
----------
input_values: list
A list of numbers that are the concatenation of all parent model outputs in the order specified by the
InputConnector object that was passed during initialization.
x: float
The location at which the probability mass function should be evaluated.
"""
raise NotImplementedError
class Hyperparameter(ProbabilisticModel):
"""
This class represents all hyperparameters (i.e. fixed parameters).
"""
def __init__(self, value, name='Hyperparameter'):
"""
Parameters
----------
value: list
The values to which the hyperparameter should be set
"""
# A hyperparameter is defined by the fact that it does not have any parents
self.name = name
self._fixed_values = np.array([value])
import numpy as np
from numbers import Number
from abcpy.probabilisticmodels import ProbabilisticModel, Continuous, InputConnector
import rpy2.robjects as robjects
import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()
robjects.r('''
source('gaussian_model.R')
''')
r_simple_gaussian = robjects.globalenv['simple_gaussian']
class Gaussian(ProbabilisticModel, Continuous):
def __init__(self, parameters, name='Gaussian'):
# We expect input of type parameters = [mu, sigma]
if not isinstance(parameters, list):
raise TypeError('Input of Normal model is of type list')
if len(parameters) != 2:
raise RuntimeError('Input list must be of length 2, containing [mu, sigma].')
input_connector = InputConnector.from_list(parameters)
super().__init__(input_connector, name)
def _check_input(self, input_values):
# Check whether input has correct type or format
if len(input_values) != 2:
raise ValueError('Number of parameters of Normal model must be 2.')
from abcpy.probabilisticmodels import ProbabilisticModel, Discrete, Hyperparameter, InputConnector
import numpy as np
from scipy.special import comb
from scipy.stats import poisson, bernoulli
class Bernoulli(Discrete, ProbabilisticModel):
def __init__(self, parameters, name='Bernoulli'):
"""This class implements a probabilistic model following a bernoulli distribution.
Parameters
----------
parameters: list
A list containing one entry, the probability of the distribution.
name: string
The name that should be given to the probabilistic model in the journal file.
"""
if not isinstance(parameters, list):
raise TypeError('Input for Bernoulli has to be of type list.')
if len(parameters)!=1:
raise ValueError('Input for Bernoulli has to be of length 1.')