casio-calculator/distribution.py

290 lines
9.3 KiB
Python

import math
def bnd(x, n, p):
"""
Computes the binomial distribution.
:param x: Number of successes.
:param n: Number of trials.
:param p: Probability of success.
:return: Returns the probability of getting x successes in n trials.
"""
return math.comb(n, x) * p ** x * (1 - p) ** (n - x)
def bnd_mean(n, p):
"""
Computes the mean of the binomial distribution.
:param n: Number of trials.
:param p: Probability of success.
:return: Returns the mean of the binomial distribution.
"""
return n * p
def bnd_var(n, p):
"""
Computes the variance of the binomial distribution.
:param n: Number of trials.
:param p: Probability of success.
:return: Returns the variance of the binomial distribution.
"""
return n * p * (1 - p)
def bnd_std(n, p):
"""
Computes the standard deviation of the binomial distribution.
:param n: Number of trials.
:param p: Probability of success.
:return: Returns the standard deviation of the binomial distribution.
"""
return bnd_var(n, p) ** 0.5
def bnd_upto(x, n, p):
"""
Computes the cumulative probability of getting upto x successes in n trials.
:param x: Number of successes.
:param n: Number of trials.
:param p: Probability of success.
:return: Returns the cumulative probability of getting upto x successes in n trials.
"""
return sum(bnd(i, n, p) for i in range(x + 1))
def bnd_from(x, n, p):
"""
Computes the cumulative probability of getting from x successes in n trials.
:param x: Number of successes.
:param n: Number of trials.
:param p: Probability of success.
:return: Returns the cumulative probability of getting from x successes in n trials.
"""
return 1 - bnd_upto(x - 1, n, p)
def gd(x, p, q=None):
"""
Computes the geometric distribution.
:param x: Number of trials until the first success.
:param p: Probability of success.
:param q: Probability of failure.
:return: Returns the probability of getting the first success on the xth trial.
"""
if q is None:
q = 1 - p
return q ** (x - 1) * p
def gd_mean(p):
"""
Computes the mean of the geometric distribution.
:param p: Probability of success.
:return: Returns the mean of the geometric distribution.
"""
return 1 / p
def gd_var(p):
"""
Computes the variance of the geometric distribution.
:param p: Probability of success.
:return: Returns the variance of the geometric distribution.
"""
return (1 - p) / p ** 2
def gd_std(p):
"""
Computes the standard deviation of the geometric distribution.
:param p: Probability of success.
:return: Returns the standard deviation of the geometric distribution.
"""
return gd_var(p) ** 0.5
def gd_upto(x, p, q=None):
"""
Computes the cumulative probability of getting upto x trials until the first success.
:param x: Number of trials until the first success.
:param p: Probability of success.
:param q: Probability of failure.
:return: Returns the cumulative probability of getting upto x trials until the first success.
"""
if q is not None:
return sum(gd(i, p, q) for i in range(1, x + 1))
return sum(gd(i, p) for i in range(1, x + 1))
def gd_from(x, p, q=None):
"""
Computes the cumulative probability of getting from x trials until the first success.
:param x: Number of trials until the first success.
:param p: Probability of success.
:param q: Probability of failure.
:return: Returns the cumulative probability of getting from x trials until the first success.
"""
if q is not None:
return 1 - gd_upto(x - 1, p, q)
return 1 - gd_upto(x - 1, p)
def hgd(x, N, n, k):
"""
Computes the hyper geometric distribution.
:param x: Number of successes in the sample.
:param N: Number of items in the population.
:param n: Number of draws.
:param k: Number of successes in the population.
:return: Returns the probability of getting x successes in n draws from a population of size N with k successes.
"""
return (math.comb(k, x) * math.comb(N - k, n - x)) / math.comb(N, n)
def hgd_mean(N, n, k):
"""
Computes the mean of the hyper geometric distribution.
:param N: Number of items in the population.
:param n: Number of draws.
:param k: Number of successes in the population.
:return: Returns the mean of the hyper geometric distribution.
"""
return n * (k / N)
def hgd_var(N, n, k):
"""
Computes the variance of the hyper geometric distribution.
:param N: Number of items in the population.
:param n: Number of draws.
:param k: Number of successes in the population.
:return: Returns the variance of the hyper geometric distribution.
"""
return (n * k * (N - k) * (N - n)) / (N ** 2 * (N - 1))
def hgd_std(N, n, k):
"""
Computes the standard deviation of the hyper geometric distribution.
:param N: Number of items in the population.
:param n: Number of draws.
:param k: Number of successes in the population.
:return: Returns the standard deviation of the hyper geometric distribution.
"""
return hgd_var(N, n, k) ** 0.5
def hgd_upto(x, N, n, k):
"""
Computes the cumulative probability of getting upto x successes in n draws from a population of size N with k successes.
:param x: Number of successes in the sample.
:param N: Number of items in the population.
:param n: Number of draws.
:param k: Number of successes in the population.
:return: Returns the cumulative probability of getting upto x successes in n draws from a population of size N with k successes.
"""
return sum(hgd(i, N, n, k) for i in range(x + 1))
def hgd_from(x, N, n, k):
"""
Computes the cumulative probability of getting from x successes in n draws from a population of size N with k successes.
:param x: Number of successes in the sample.
:param N: Number of items in the population.
:param n: Number of draws.
:param k: Number of successes in the population.
:return: Returns the cumulative probability of getting from x successes in n draws from a population of size N with k successes.
"""
return 1 - hgd_upto(x - 1, N, n, k)
def pd(x, l):
"""
Computes the poisson distribution.
:param x: Number of occurrences.
:param l: Average number of occurrences.
:return: Returns the probability of getting x occurrences.
"""
return (l ** x * math.e ** -l) / math.factorial(x)
def pd_mean(l):
"""
Computes the mean of the poisson distribution.
:param l: Average number of occurrences.
:return: Returns the mean of the poisson distribution.
"""
return l
def pd_var(l):
"""
Computes the variance of the poisson distribution.
:param l: Average number of occurrences.
:return: Returns the variance of the poisson distribution.
"""
return l
def pd_std(l):
"""
Computes the standard deviation of the poisson distribution.
:param l: Average number of occurrences.
:return: Returns the standard deviation of the poisson distribution.
"""
return l ** 0.5
def pd_upto(x, l):
"""
Computes the cumulative probability of getting upto x occurrences.
:param x: Number of occurrences.
:param l: Average number of occurrences.
:return: Returns the cumulative probability of getting upto x occurrences.
"""
return sum(pd(i, l) for i in range(x + 1))
def pd_from(x, l):
"""
Computes the cumulative probability of getting from x occurrences.
:param x: Number of occurrences.
:param l: Average number of occurrences.
:return: Returns the cumulative probability of getting from x occurrences.
"""
return 1 - pd_upto(x - 1, l)
def man():
"""
Prints the manual for the module.
Formatted this way to fit in memory on the calculator.
"""
print("This module contains functions for computing the total probability of events.")
print("The functions are:")
print("bnd(x, n, p) - The binomial distribution")
print("bnd_mean(n, p) - The mean of the binomial distribution")
print("bnd_var(n, p) - The variance of the binomial distribution")
print("bnd_std(n, p) - The standard deviation of the binomial distribution")
print("bnd_upto(x, n, p) - The cumulative probability of getting upto x successes in n trials")
print("bnd_from(x, n, p) - The cumulative probability of getting from x successes in n trials")
print("gd(x, p, q) - The geometric distribution")
print("gd_mean(p) - The mean of the geometric distribution")
print("gd_var(p) - The variance of the geometric distribution")
print("gd_std(p) - The standard deviation of the geometric distribution")
print("gd_upto(x, p, q) - The cumulative probability of getting upto x trials until the first success")
print("gd_from(x, p, q) - The cumulative probability of getting from x trials until the first success")
print("hgd(x, N, n, k) - The hyper geometric distribution")
print("hgd_mean(N, n, k) - The mean of the hyper geometric distribution")
print("hgd_var(N, n, k) - The variance of the hyper geometric distribution")
print("hgd_std(N, n, k) - The standard deviation of the hyper geometric distribution")
print("hgd_upto(x, N, n, k) - The cumulative probability of getting upto x successes in n draws from a population of size N with k successes")
print("hgd_from(x, N, n, k) - The cumulative probability of getting from x successes in n draws from a population of size N with k successes")
print("pd(x, l) - The poisson distribution")
print("pd_mean(l) - The mean of the poisson distribution")
print("pd_var(l) - The variance of the poisson distribution")
print("pd_std(l) - The standard deviation of the poisson distribution")
print("pd_upto(x, l) - The cumulative probability of getting upto x occurrences")
print("pd_from(x, l) - The cumulative probability of getting from x occurrences")