Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python

Je m'intéresse aux mathématiques et aux statistiques, mais quand je regarde les formules mathématiques, il y a trop de symboles pour comprendre lequel est, ou je l'oublie immédiatement, alors j'ai décidé d'écrire ce que j'ai appris dans le programme. Fait.

Cette fois, nous allons créer une classe avec les fonctions suivantes pour une distribution binomiale avec un total de n essais et une probabilité de succès de p.

Les performances ne sont pas prises en compte car elles visent à se souvenir du contenu de l'expression.

La formule à reproduire en Python cette fois

Lorsque les essais de Bernoulli (essais binaires) avec une probabilité de succès de p sont effectués n fois au total,

Une fonction pour trouver la masse de probabilité à laquelle le nombre de succès est x

f(x,n,p) = {}_n \mathrm{ C }_xp^x(1-p)^{ n-x } \quad (0 \leqq n;\ 0 \leqq x \leqq n;\ 0 \leqq p\leqq 1)\\

Une fonction pour trouver la probabilité cumulée la plus faible du nombre de succès x

P(n,x,p) = \sum_{i=0}^xf(i,n,p)

Fonction pour trouver la probabilité cumulée supérieure du nombre de succès x

P(n,x,p) = \sum_{i=x}^nf(i,n,p)

Je l'ai écrit en Python


import math
import numpy as np
import matplotlib.pyplot as plt

class ToolBox:

  def combination(total, chosen):
      return math.factorial(total) / math.factorial(chosen)/ math.factorial(total-chosen)

class BinomialDistribution:
  """
Générer un objet de distribution binomiale avec tous les essais n et probabilité de succès p.

    Attributes
    ----------
    total : int
Nombre total d'essais n.
    p_of_sccess : float
Probabilité de succès dans un essai p.
    p_of_fail : float
Probabilité d'échec dans un essai 1-p.
  """

  def __init__(self, total, p_of_success):
    """
    Parameters
    ----------
    total : int
Nombre total d'essais n.
    p_of_success : float
Probabilité de succès dans un essai p.
    """
    assert total > 0, "Condition error: 0 <= total"
    assert p_of_success >= 0 and p_of_success <= 1, "Condition error: 0 <= p_of_success <= 1"
    
    self.total = total
    self.p_of_sccess = p_of_success
    self.p_of_fail = 1 - p_of_success

  def get_probability_mass(self, success):
    """
Trouvez la masse de probabilité pour réussir x fois

    Parameters
    ----------
    success : int
Nombre de succès x.

    Returns
    -------
    probability_mass : float
Masse de probabilité de x.
    """
    assert success >= 0 and success <= self.total, "Condition error: 0 <= sccuess <= total"

    fail = self.total - success
    combination = ToolBox.combination(self.total, success)
    probability_mass = combination * (self.p_of_sccess ** success) * (self.p_of_fail) ** fail
    return probability_mass

  def get_lower_culmitive_distribution(self, success):
    """
Probabilité cumulative inférieure de x(Somme des masses de probabilité de 0 à x fois)Cherchant.

    Parameters
    ----------
    success : int
Nombre de succès x.

    Returns
    -------
    result : float
Probabilité cumulative inférieure de x.
    """
    result = 0
    for i in range (0, success + 1):
      result += binomial_distribution.get_probability_mass(i)
    return result

  def get_upper_culmitive_distribution(self, success):
    """
Probabilité cumulative supérieure de x(x ~ somme des masses de probabilité de tous les essais,)Cherchant.

    Parameters
    ----------
    success : int
Nombre de succès x.

    Returns
    -------
    result : float
Probabilité cumulative supérieure de x.
    """
    result = 0
    for i in range (success, self.total + 1):
      result += binomial_distribution.get_probability_mass(i)
    return result

  def draw_graph(self):
    """
Dessinez un graphique et enregistrez-le au format png.
    """
    x = np.arange(0, self.total + 1, 1)
    y = []
    for i in range(0, self.total + 1):
      y.append(self.get_probability_mass(i))
    plt.plot(x, y)
    plt.savefig('graph.png')

Courir


#10 essais, 0 taux de réussite.Créer un objet de distribution binomiale de 5.
binomial_distribution = BinomialDistribution(10, 0.5)

#Obtenez la masse de probabilité pour 2 succès.
print(binomial_distribution.get_probability_mass(2))

#Obtenez la probabilité cumulée la plus faible lorsque la probabilité de succès est de 2 fois.
print(binomial_distribution.get_lower_culmitive_distribution(2))

#Obtenez la probabilité cumulée supérieure lorsque la probabilité de succès est de 2 fois.
print(binomial_distribution.get_upper_culmitive_distribution(2))

#Tracez un graphique de cette distribution binomiale.
binomial_distribution.draw_graph()

résultat

0.0439453125 #Masse de probabilité lorsque le nombre de succès est de 2
0.0546875 #Probabilité cumulative plus faible avec 2 chances de succès
0.9892578125 #Probabilité cumulative supérieure lorsque la probabilité de succès est de 2 fois

J'ai utilisé ce site pour faire correspondre les réponses https://keisan.casio.jp/exec/system/1161228843

Le graphique est enregistré dans le même répertoire. スクリーンショット 2020-04-07 2.05.18.png

7 avril 2020 Modifications

--Correction de la «fonction de densité de probabilité (PDF)» en «fonction de masse de probabilité (PMF)». Il semble que ce dernier soit utilisé lorsque la variable stochastique x («succès» dans ce cas) est une valeur discrète. Cependant, certains sites et livres utilisent la «densité de probabilité» pour des distributions binomiales discrètes, et j'estime qu'elles ne sont pas si strictement distinguées.

Site référencé

Comment écrire MathJax https://easy-copy-mathjax.nakaken88.com/

Site qui calcule la distribution binomiale https://keisan.casio.jp/exec/system/1161228843

Fonction de densité de probabilité et fonction de masse de probabilité https://data-science.gr.jp/theory/tbs_pdf_and_pmf.html

Recommended Posts

Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python
Vérifiez la nature atrophique de la distribution de probabilité en Python
Battre la fonction de densité de probabilité de la distribution normale
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
Essayez d'obtenir la liste des fonctions du paquet Python> os
Avoir le graphique d'équation de la fonction linéaire dessiné en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Prenez la somme logique de List en Python (fonction zip)
[Python3] Réécrire l'objet code de la fonction
Le résultat de l'installation de python sur Anaconda
[Python] Essayez pydash de la version Python de lodash
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
[Python] Note: Fonction auto-conçue pour trouver la zone de distribution normale
Sortie du nombre de cœurs de processeur en Python
Dessiner un graphique d'une fonction quadratique en Python
Essai du parseur d'emacs-org orgparse pour python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Afficher le résultat du traitement de la géométrie en Python
Distribution de probabilité de niveau 2 du test statistique apprise en Python ②
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Copiez la liste en Python
Découvrez la fraction de la valeur saisie en python
Essayez Progate Free Edition [Python I]
Correction des arguments de la fonction utilisée dans map
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
[Note] À propos du rôle du trait de soulignement "_" en Python
Résolution d'équations de mouvement en Python (odeint)
Sortie sous la forme d'un tableau python
J'ai essayé d'implémenter la fonction gamma inverse en python
Essayez d'utiliser le module de collections (ChainMap) de python3
Distribution de probabilité de test statistique de niveau 2 apprise en Python
Essayez d'implémenter la méthode Monte Carlo en Python
Essayez d'utiliser l'API DropBox Core avec Python
Définir la limite supérieure du nombre de répétitions de fonctions récursives en Python
Trouver la fonction de distribution cumulative par tri (version Python)
Découvrez la bonne efficacité de calcul de la vectorisation en Python
Distribution logistique en Python
Comment obtenir le nombre de chiffres en Python
[python] Récupère la liste des classes définies dans le module
Comprenez attentivement la distribution exponentielle et dessinez en Python
le zen de Python
Tracer et comprendre la distribution normale multivariée en Python
L'histoire de FileNotFound en Python open () mode = 'w'
Remarque: Signification de spécifier uniquement * (astérisque) comme argument dans la définition de fonction de Python
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Implémenter la solution de l'algèbre de Riccati en Python
Comprendre attentivement la distribution de Poisson et dessiner en Python
Obtenir la taille (nombre d'éléments) de Union Find en Python
Ne pas être conscient du contenu des données en python
Essayez gRPC en Python
Reproduire l'exemple d'exécution du chapitre 4 de Hajipata en Python
Utilisons les données ouvertes de "Mamebus" en Python