Source code for binf.example.likelihood

import numpy as np

from csb.statistics.pdf.parameterized import Parameter as ScalarParameter

from binf import ArrayParameter
from binf.model.forwardmodels import AbstractForwardModel
from binf.model.errormodels import AbstractErrorModel
from binf.pdf import ParameterNotFoundError


[docs]class ForwardModel(AbstractForwardModel): def __init__(self, xses, polynomial): super(ForwardModel, self).__init__('polynomial') self.xses = xses self.polynomial = polynomial self._register_variable('coefficients', differentiable=True) self.update_var_param_types(coefficients=ArrayParameter) self._set_original_variables()
[docs] def _evaluate(self, coefficients): return self.polynomial(self.xses, coefficients)
[docs] def _evaluate_jacobi_matrix(self, coefficients): return np.vstack([self.xses ** i for i in range(len(coefficients))])
[docs] def clone(self): copy = self.__class__(self.xses, self.polynomial) self._set_parameters(copy) return copy
[docs]class GaussianErrorModel(AbstractErrorModel): def __init__(self, ys): super(GaussianErrorModel, self).__init__('error_model') self.ys = ys self._register_variable('mock_data') self._register_variable('precision') self.update_var_param_types(mock_data=ArrayParameter, precision=ScalarParameter) self._set_original_variables()
[docs] def _evaluate_log_prob(self, mock_data, precision): logZ = len(self.ys) * 0.5 * np.log(precision) return -0.5 * np.sum((mock_data - self.ys) ** 2) * precision + logZ
[docs] def _evaluate_gradient(self, mock_data, precision): return (mock_data - self.ys) * precision
[docs] def clone(self): copy = self.__class__(self.ys) copy.set_fixed_variables_from_pdf(self) return copy
[docs]def make_likelihood(xses, ys, polynomial): from binf.pdf.likelihoods import Likelihood from binf.example.likelihood import ForwardModel, GaussianErrorModel FWM = ForwardModel(xses, polynomial) EM = GaussianErrorModel(ys) L = Likelihood('points', FWM, EM) return L