Source code for uravu.utils

"""
A few additional utility functions to improve the usability of :py:mod:`uravu`.
"""

# Copyright (c) Andrew R. McCluskey
# Distributed under the terms of the MIT License
# author: Andrew R. McCluskey


import numpy as np
from scipy.stats import pearsonr


[docs]def straight_line(abscissa, gradient, intercept): """ A one dimensional straight line function. Args: abscissa (:py:attr:`array_like`): The abscissa data. gradient (:py:attr:`float`): The slope of the line. intercept (:py:attr:`float`): The y-intercept of the line. Returns: :py:attr:`array_like`: The resulting ordinate. """ return gradient * abscissa + intercept
[docs]def bayes_factor(model_1, model_2): """ Use the `Bayes factor`_ to compare two models. Using Table from `Kass and Raftery`_ to compare. Args: model_1 (:py:class:`uncertainties.core.Variable` or :py:attr:`float`): ln evidence for model 1. model_2 (:py:class:`uncertainties.core.Variable` or :py:attr:`float`): ln evidence for model 2. Return: :py:class:`uncertainties.core.Variable` or :py:attr:`float`: 2ln(B), where B is the Bayes Factor between the two models. .. _Bayes factor: https://en.wikipedia.org/wiki/Bayes_factor .. _Kass and Raftery: https://www.colorado.edu/amath/sites/default/files/attached-files/kassraftery95.pdf """ return 2 * (model_1 - model_2)
[docs]def correlation_matrix(relationship): """ Evaluate the `Pearsons correlation coefficient`_ matrix for the variables in a given relationship. Args: relationship (:py:class:`uravu.relationship.Relationship`): The relationship to determine the correlation matrix for. Returns: :py:attr:`array_like`: The correlation matrix for the relationships variables. .. _Pearsons correlation coefficient: https://en.wikipedia.org/wiki/Pearson_correlation_coefficient """ n = len(relationship.variables) matrix = np.zeros((n, n)) subset = np.random.randint(0, relationship.variables[0].size, size=400) for i in range(n): samples_i = relationship.variables[i].samples[subset] for j in range(i, n): samples_j = relationship.variables[j].samples[subset] matrix[i, j] = pearsonr(samples_i, samples_j)[0] matrix[j, i] = pearsonr(samples_j, samples_i)[0] return matrix
[docs]def latex(distribution): """ Get some LaTeX math-type code that describes the mean and confidence intervals of the distribution. Args: distribution (:py:class:`uravu.distribution.Distribution`): The distribution to return LaTeX for. Returns: (:py:attr:`str`): A LaTeX formatted string for the mean and confidence intervals of the distribution. """ mean = distribution.n con_int = distribution.con_int([2.5, 97.5]) if distribution.normal: return f'${mean:.3e}' + r'\pm' + f'{{{con_int[1] - mean:.3e}}}$' else: return (f'${mean:.3e}^{{+{con_int[1] - mean:.3e}}}' f'_{{-{mean - con_int[0]:.3e}}}$')