In Python ② erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2

Einführung

Während des Studiums statistischer Tests kommen verschiedene Wahrscheinlichkeitsverteilungen heraus, aber ich denke, es ist schwierig, ein Bild zu erhalten, wenn man nur die mathematischen Formeln betrachtet. Zeichnen Sie beim Verschieben verschiedener Parameter mit Python die Wahrscheinlichkeitsverteilung und hängen Sie das Bild an. (Der vorherige Beitrag war hier. Letztes Mal haben wir uns auf die Binomialverteilung und die Poisson-Verteilung konzentriert.)

Referenz

Zur Erläuterung der Wahrscheinlichkeitsverteilung wird auf Folgendes verwiesen.

Verschiedene Wahrscheinlichkeitsverteilungen

Dieser Artikel enthält keine detaillierten Erklärungen wie die Ableitung verschiedener mathematischer Formeln, sondern konzentriert sich darauf, die Form jeder Verteilung und die Bedeutung dieser Verteilung zu erfassen. Dieser Artikel befasst sich mit den folgenden drei Distributionen.

Geometrische Verteilung

Die Häufigkeit, mit der $ X $ bis zum ersten erfolgreichen unabhängigen Versuch (Bernouy-Versuch) mit nur zwei Konsequenzen folgt, z. B. "ob die Münze auf die Vorder- oder Rückseite geworfen wird" * * Wird als geometrische Verteilung bezeichnet. Es ist sehr ähnlich, da die Binomialverteilung der Anzahl der erfolgreichen ** $ n $ mal ** folgt. (Informationen zur Binomialverteilung finden Sie in Vorheriger Artikel.)

――Die Anzahl, bis 1 zum ersten Mal herauskommt, nachdem Sie weiter gewürfelt haben ――Die Häufigkeit, bis die Vorderseite zum ersten Mal angezeigt wird, nachdem weiterhin Münzen geworfen wurden

Folgen Sie einer geometrischen Verteilung.

Die Formel für die stochastische Massenfunktion der geometrischen Verteilung wird wie folgt ausgedrückt.


P(X = k) = p(1-p)^{k-1}

$ p $ ist die Erfolgsrate des Versuchs.

Wenn die Wahrscheinlichkeitsvariable $ X $ einer geometrischen Verteilung folgt, sind der erwartete Wert $ E (X) $ und die Varianz $ V (X) $ wie folgt.


E(X) = \frac{1}{p}


V(X) = \frac{1-p}{p^2}

Beispielsweise beträgt die erwartete Anzahl von Versuchen, bis 1 zum ersten Mal nach dem Würfeln gewürfelt wird, $ \ frac {1} {\ frac {1} {6}} = 6 $.

Zeichnen wir nun, wie sich die Form der geometrischen Verteilung ändert, wenn sich der Wert von $ p $ (Erfolgswahrscheinlichkeit) ändert.


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

def comb_(n, k):
    result = math.factorial(n) / (np.math.factorial(n - k) * np.math.factorial(k))
    return result

def geometric_dist(p, k):
    result = ((1 - p) ** (k - 1)) * p
    return result

fig = plt.figure()

def update(a):
    plt.cla()
    
    x =  np.arange(1, 50, 1)

    y = [geometric_dist(a,  i) for i in x]

    plt.bar(x, y, align="center", width=0.4, color="blue", 
                 alpha=0.5, label="binomial p= " + "{:.1f}".format(a))
    
    plt.legend()
    plt.ylim(0, 0.3)
    plt.xlim(0, 50)
    
    
ani = animation.FuncAnimation(fig,
                              update,
                              interval=1000,
                              frames = np.arange(0.1, 1, 0.1),
                              blit=True)
plt.show()
ani.save('Geometric_distribution.gif', writer='pillow') 

Geometric_distribution.gif

Hier ist die geometrische Verteilung von Ereignissen mit einer Erfolgswahrscheinlichkeit von 10 $% zu Ereignissen mit einer Erfolgswahrscheinlichkeit von 90 $%. Ich denke, Sie können intuitiv verstehen, dass die Erfolgswahrscheinlichkeit bei geringer Anzahl von Versuchen umso höher ist, je höher die Erfolgsquote ist. Es stellt sich heraus, dass es fast ein Wunder ist, $ 10 $ in Folge für ein Event mit einer Erfolgswahrscheinlichkeit von $ 90 $% zu scheitern.

Darüber hinaus hat die geometrische Verteilung die Eigenschaft, dass die Wahrscheinlichkeit, dass ein Ereignis auftritt, nicht durch das zuvor aufgetretene Ergebnis beeinflusst wird. Das Bild ist, dass nur weil die Vorderseite einer Münze $ 5 $ hintereinander erscheint, dies nicht bedeutet, dass eine hohe Wahrscheinlichkeit besteht, dass sie als nächstes erscheint. Dies nennt man ** memoryless **. (Dies bedeutet, dass frühere Informationen nicht gespeichert werden.)

Exponentialverteilung

Die Exponentialverteilung ist eine Wahrscheinlichkeitsverteilung, die die Wahrscheinlichkeit darstellt, dass das Intervall zwischen dem Auftreten von Ereignissen, die durchschnittlich $ \ lambda $ mal pro Zeiteinheit auftreten, $ x $ Zeiteinheit ** beträgt und in den folgenden Beispielen verwendet wird.

Exponentialverteilungswahrscheinlichkeitsdichtefunktion

Die Wahrscheinlichkeitsdichtefunktion der Exponentialverteilung wird wie folgt ausgedrückt.

\begin{equation}
f(x)=
    \left\{
    \begin{aligned}
          &\lambda \mathrm{e}^{-\lambda x} &(x\geq0) \\
          &0 &(x<0)\\
    \end{aligned}
    \right.
\end{equation}

Wenn die Wahrscheinlichkeitsvariable $ X $ der Exponentialverteilung folgt, sind der erwartete Wert $ E (X) $ und die Varianz $ V (X) $ wie folgt.


E(X) = \frac{1}{\lambda}


V(X) = \frac{1}{\lambda}

Das erwartete Intervall zwischen Ereignissen, die $ 5 $ pro $ 1 $ Stunde (Zeiteinheit) auftreten, beträgt beispielsweise $ \ frac {1} {5} Stunden = 12 Minuten $. Ich denke es passt irgendwie zum Gefühl.

Zeichnen wir nun, wie sich die Form der Exponentialverteilung ändert, wenn sich der Wert von $ \ lambda $ (die durchschnittliche Anzahl von Ereignissen, die pro Zeiteinheit auftreten) ändert.

Stellen wir uns das beispielsweise als eine Verteilung vor, die das Zeitintervall zwischen Kundenbesuchen darstellt, von einem Geschäft, in dem durchschnittlich 30 Kunden pro Stunde besuchen, bis zu einem Geschäft, in dem nur durchschnittlich 1 Kunde besucht wird **.

import numpy as np
import matplotlib.animation as animation
import matplotlib.pyplot as plt
from scipy.stats import expon

fig = plt.figure()

def update(a):
    plt.cla()
    
    x =  np.arange(0, 1, 0.01)

    y = [expon.pdf(i, scale = 1/a) for i in x]

    plt.plot(x, y, label="expon λ= %d" % a)
    plt.legend()
    plt.ylim(0, 35)
    plt.xlim(0, 1.0)
    
ani = animation.FuncAnimation(fig,
                              update,
                              interval=500,
                              frames = np.arange(31, 1, -1),
                              blit=True)
plt.show()
ani.save('Exponential_distribution.gif', writer='pillow') 

Exponential_distribution.gif

Können Sie sehen, dass die Form der Verteilung der geometrischen Verteilung irgendwie ähnlich ist? ** Tatsächlich ist die kontinuierliche Version der geometrischen Verteilung die Exponentialverteilung. ** (Wenn Sie die Anzahl der Versuche in der geometrischen Verteilung erhöhen und eine geeignete Grenze festlegen, die die Erfolgswahrscheinlichkeit näher an $ 0 $ bringt, wird dies zu einer Exponentialverteilung.)

Zusätzlich gibt es drei Punkte in Form der Exponentialverteilung.

Der erste Punkt lautet: "Ein Geschäft mit durchschnittlich 15 US-Dollar wird in 1 Stunde früher kommen als ein Geschäft mit durchschnittlich 5 US-Dollar." Es ist ein Bild, also denke ich, dass es leicht zu verstehen ist.

Der zweite und dritte Punkt sind ** "Wenn ein Kunde in das Geschäft kommt, ist es am wahrscheinlichsten, dass der nächste Kunde unmittelbar danach in das Geschäft kommt" **. Ich denke, es gibt einige Leute, die das Gefühl haben, dass etwas damit nicht stimmt. Tatsächlich wird es aus der ** Speicherlosigkeit ** der Indexverteilung abgeleitet, und nur weil ein Kunde für $ 1 $ ankommt, bedeutet dies nicht, dass der nächste Kunde für eine Weile nicht kommt oder dass es einfach ist, den Laden hintereinander zu besuchen. Wir gehen davon aus, dass Kundenbesuche völlig zufällig sind. Daher ist die Idee, dass ** die Wahrscheinlichkeit, dass es bald auftritt, höher ist als die Zeit, in der es für eine lange Zeit nicht auftritt **. (Diese Unwissenheit ist dieselbe wie die, die zum Zeitpunkt der geometrischen Verteilung auftrat.)

Kumulative Dichtefunktion der Exponentialverteilung

Was wir mehr über unsere täglichen Gefühle wissen möchten, ist die Wahrscheinlichkeit, dass der nächste Kunde genau 10 $ Minuten später kommt, und nicht die Wahrscheinlichkeit, dass der nächste Kunde innerhalb von ** 10 $ Minuten ** kommt. In diesem Fall muss alles hinzugefügt werden, von der Wahrscheinlichkeit, dass der nächste Kunde das Geschäft besucht, 0 $ Sekunden bis zu der Wahrscheinlichkeit, dass es 10 $ Minuten sind.

Zu diesem Zeitpunkt wird die folgende kumulative Dichtefunktion verwendet, die das Ergebnis der Integration der Wahrscheinlichkeitsdichtefunktion ist. ** Stellt die Wahrscheinlichkeit dar, dass ein Ereignis, das durchschnittlich $ \ lambda $ mal pro Zeiteinheit auftritt, innerhalb von $ x $ Zeiteinheit auftritt **.


{{\begin{eqnarray}
F(x)  &=& 1 - \mathrm{e}^{-\lambda x} \\
\end{eqnarray}}
}

Zeichnen wir nun, wie sich die Form des Diagramms der kumulativen Dichtefunktion ändert, wenn sich der Wert von $ \ lambda $ (die durchschnittliche Anzahl von Ereignissen, die pro Zeiteinheit auftreten) ändert.

Nach wie vor ** Wahrscheinlichkeit, wie viele Minuten der nächste Kunde für einen Besuch benötigt, von einem Geschäft mit durchschnittlich 30 USD pro Stunde bis zu einem Geschäft mit durchschnittlich 1 USD pro Stunde. Stellen wir uns das als eine Distribution vor, die ** darstellt.


import numpy as np
import matplotlib.animation as animation
import matplotlib.pyplot as plt
from scipy.stats import expon

fig = plt.figure()

def update(a):
    plt.cla()
    
    x =  np.arange(0, 1.2, 0.01)

    y = [expon.cdf(i, scale = 1/a) for i in x]

    plt.plot(x, y, label="expon λ= %d" % a)
    
    plt.legend()
    plt.ylim(0, 1.2)
    plt.xlim(0, 1.2)
    
ani = animation.FuncAnimation(fig,
                              update,
                              interval=500,
                              frames = np.arange(30, 1, -1),
                              blit=True)
plt.show()
ani.save('Exponential_cumulative_distribution.gif', writer='pillow') 

Exponential_cumulative_distribution.gif

Sie können sehen, dass die Verteilungskurve sanfter wird, wenn $ \ lambda $ wächst. Ich denke, es ist überzeugend, dass ein Geschäft mit durchschnittlich 30 US-Dollar pro Stunde den nächsten Kunden eher innerhalb von 10 US-Dollar hat als ein Geschäft, das nur 1 US-Dollar besucht.

Negative Binomialverteilung

Obwohl es in der zweiten Klasse des statistischen Tests selten vorkommt, hängt es eng mit den bisher behandelten Verteilungen zusammen, sodass wir uns auch mit der negativen Binomialverteilung befassen. Die Verteilung gefolgt von $ X $, der Anzahl der Versuche, die für einen erfolgreichen, unabhängigen Versuch (Bernouy-Versuch) mit nur zwei Ergebnissen erforderlich sind, wird als negative Binomialverteilung bezeichnet.


P(X = k) = {}_{k-1} C _{r-1}p^r(1-p)^{k-r}

Folgen Sie einer negativen Binomialverteilung.

Wie der Name schon sagt, ist die negative Binomialverteilung eine erweiterte Version der Binomialverteilung und weist die folgenden Unterschiede auf.

Binäre Verteilung: Feste Anzahl von Versuchen, Anzahl von Erfolgen ist eine Wahrscheinlichkeitsvariable Negative Binomialverteilung: Feste Anzahl von Erfolgen, Anzahl von Versuchen ist eine Wahrscheinlichkeitsvariable

Wenn Sie $ r = 1 $ setzen, ist dies eine geometrische Verteilung und ein Ausdruck. (Weil die geometrische Verteilung die Wahrscheinlichkeitsverteilung der Anzahl der Versuche ist, bis sie zum ersten Mal erfolgreich ist.)

Wenn außerdem $ \ lambda $ der Poisson-Verteilung der Gamma-Verteilung folgt, wird es zu einer negativen Binomialverteilung. (Die Gammaverteilung geht über den Rahmen des statistischen Tests der zweiten Klasse hinaus und wird in diesem Artikel nicht behandelt.)

Wenn die Wahrscheinlichkeitsvariable $ X $ einer negativen Binomialverteilung folgt, sind der erwartete Wert $ E (X) $ und die Varianz $ V (X) $ wie folgt.


E(X) = \frac{r}{p}


V(X) = \frac{k(1-p)}{p^2}

Zum Beispiel ist die erwartete Anzahl von Versuchen, die erforderlich sind, um fünfmal 1 auf einen Würfel zu bekommen, $ \ frac {5} {\ frac {1} {6}} = 30 $.

Verschieben wir nun die Erfolgswahrscheinlichkeit zwischen 10 $% und 90 $% für die Wahrscheinlichkeitsverteilung (negative Binomialverteilung) der Anzahl der Versuche, die erforderlich sind, damit ein Ereignis 10 $ erfolgreich ist.


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

def comb_(n, k):
    result = math.factorial(n) / (np.math.factorial(n - k) * np.math.factorial(k))
    return result

def negative_binomial_dist(p, k, r):
    result = comb_(k - 1, r - 1) * (p**r) * ((1 - p) ** (k - r))
    return result

fig = plt.figure()

def update(a):
    plt.cla()
    
    r = 10
    
    x =  np.arange(r, 70, 1)

    y = [negative_binomial_dist(a, i, r) for i in x]

    plt.bar(x, y, align="center", width=0.4, color="blue", 
                 alpha=0.5, label="Negative binomial p= " + "{:.1f}".format(a))
    
    plt.legend()
    plt.ylim(0, 0.4)
    plt.xlim(10, 70)
    
    
ani = animation.FuncAnimation(fig,
                              update,
                              interval=1000,
                              frames = np.arange(0.1, 1, 0.1),
                              blit=True)
plt.show()
ani.save('Negative_binomial_distribution.gif', writer='pillow') 

Negative_binomial_distribution.gif

Sie können sehen, dass je höher die Erfolgsrate, desto näher an 10 $ die Anzahl der Versuche zum Erfolg liegt.

Beziehung zwischen Wahrscheinlichkeitsverteilungen

Ich habe mich mit verschiedenen Wahrscheinlichkeitsverteilungen befasst, die im Bereich der Fragen für die zweite Klasse des statistischen Tests liegen, aber in Wirklichkeit sind sie alle miteinander verbunden. Das Folgende ist ein Diagramm der gegenseitigen Beziehungen der Wahrscheinlichkeitsverteilungen, mit denen wir uns bisher befasst haben.

分布間の関係性.png

Es ist nicht klar, ob Sie nur die mathematischen Formeln betrachten, aber ich denke, dass Sie Ihr Verständnis vertiefen werden, wenn Sie über die Beziehung zwischen den gegenseitigen Wahrscheinlichkeitsverteilungen nachdenken, während Sie die Verteilung tatsächlich zeichnen.

NEXT Nächstes Mal werde ich über Normalverteilung und t-Verteilung sprechen.

Recommended Posts

In Python ② erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2
In Python ① erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2
[Statistische Teststufe 2] Diskrete Wahrscheinlichkeitsverteilung
Statistischer Test (Mehrfachtest) in Python: scikit_posthocs
[Statistischer Test 2. Klasse / quasi 1. Klasse] Regressives Analysetraining mit Python (2)
[Statistischer Test 2. Klasse / quasi 1. Klasse] Regressives Analysetraining mit Python (1)
1. Mit Python 2-1 gelernte Statistiken. Wahrscheinlichkeitsverteilung [diskrete Variable]
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Mit Python erlerntes Refactoring (Basic)
Schreiben Sie die Beta-Distribution in Python
Algorithmus in Python (Haupturteil)
Python-Kurs zum Lernen mit Chemoinfomatik
Generieren Sie eine U-Verteilung in Python
Was ich in Python gelernt habe
In Python gelernter Zeichencode
Python-Funktionen mit Chemoinfomatik gelernt
Hypothesentest und Wahrscheinlichkeitsverteilung
Stellen Sie den Python-Test in Jenkins ein
1. Mit Python gelernte Statistiken 2. Wahrscheinlichkeitsverteilung [Gründliches Verständnis von scipy.stats]
Implementierung einer gemischten Normalverteilung in Python
Schreiben Sie Selentestcode in Python
Ich habe versucht, den Prozess mit Python zu studieren
Grundlegende ITK-Verwendung mit Python gelernt
Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
Stresstest mit Locust in Python geschrieben
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Übergangswahrscheinlichkeit der in Python geschriebenen Markov-Kette
Implementieren Sie gemeinsam statistische Hypothesentests in Python
Holen Sie sich mit Python die Niederschlagswahrscheinlichkeit aus XML
Mathematik studieren mit Python: Lösen einfacher Wahrscheinlichkeitsprobleme
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Ich möchte Dunnetts Test in Python machen
Berechnen wir das statistische Problem mit Python
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
Passen Sie die Verteilung jeder Gruppe in Python an
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
Primzahlaufzählung und Primzahlbeurteilung in Python
Richten Sie einen Test-SMTP-Server in Python ein.
Überlebensanalyse mit Python 2-Kaplan-Meier-Schätzung
TensorFlow: Führen Sie in Python gelernte Daten unter Android aus
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Verteilung und Test
Programmieren mit Python
Plink in Python
Konstante in Python
Python-Integritätstest