1. Mit Python gelernte Statistiken 2. Wahrscheinlichkeitsverteilung [Gründliches Verständnis von scipy.stats]

1_2_01.PNG

(1) Arten der Wahrscheinlichkeitsverteilung

Wahrscheinlichkeitsverteilung probability distribution Methode Daten
1 Super geometrische Verteilung Hypergeometric distribution scipy.stats.hypergeom Diskreter Typ
2 Bernoulli-Vertrieb Bernoulli distribution scipy.stats.bernoulli Diskreter Typ
3 Binäre Verteilung binomial distribution scipy.stats.binom Diskreter Typ
4 Poisson-Verteilung Poisson distribution scipy.stats.poisson Diskreter Typ
5 Geometrische Verteilung Geometric Distribution scipy.stats.geom Diskreter Typ
6 Negative Binomialverteilung Negative Binomial Distribution scipy.stats.nbinom Diskreter Typ
7 Gleichmäßige Verteilung uniform distribution scipy.stats.uniform Diskreter Typ
8 Normalverteilung normal distribution scipy.stats.norm Kontinuierlicher Typ
9 Exponentialverteilung exponential distribution scipy.stats.expon Kontinuierlicher Typ
10 Gammaverteilung gamma distribution scipy.stats.gamma Kontinuierlicher Typ
11 Beta-Distribution beta distribution scipy.stats.betabinom Kontinuierlicher Typ
12 Cauchy Verteilung Cauchy distribution scipy.stats.cauchy Kontinuierlicher Typ
13 Normalverteilung protokollieren lognormal distribution scipy.stats.lognorm Kontinuierlicher Typ
14 Pareto-Verteilung Pareto distribution scipy.stats.pareto Kontinuierlicher Typ
15 Wibble-Verteilung Weibull distribution scipy.stats.dweibull Kontinuierlicher Typ

⑵ Funktionen verschiedener Methoden

#Bibliothek für numerische Berechnungen
import numpy as np
from scipy import stats

#Bibliothek zum Zeichnen von Grafiken
import matplotlib.pyplot as plt
%matplotlib inline

#Ein Modul, das matplotlib mit dem japanischen Display kompatibel macht
!pip install japanize-matplotlib
import japanize_matplotlib

➀ rvs (Zufallsvariablen) Probabilistische Variablen

#Generieren Sie Pseudozufallszahlen, die einer Normalverteilung mit rvs folgen
norm_rvs = stats.norm.rvs(loc=50, scale=20, size=1000, random_state=0) #Erwarteter Wert=50,Standardabweichung=20,Menge=1000

#Visualisierung (ausgedrückt im Histogramm)
plt.hist(norm_rvs, bins=10, alpha=0.3, ec='blue')
plt.xlabel("Klasse", fontsize=13)
plt.ylabel("Frequenz", fontsize=13)

plt.show()

1_2_02.PNG

➁ pdf (Wahrscheinlichkeitsdichtefunktion) Wahrscheinlichkeitsdichtefunktion

#Gleichstellungssequenz generieren
X = np.arange(start=1, stop=7.1, step=0.1)

#Generieren Sie eine Wahrscheinlichkeitsdichtefunktion im PDF-Format
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8 

#Visualisierung
plt.plot(X, norm_pdf)
plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Wahrscheinlichkeitsdichte pdf", fontsize=13)
plt.show()

1_2_03.PNG

  • Lassen Sie uns als Versuch die Wahrscheinlichkeitsdichte überprüfen, wenn die Wahrscheinlichkeitsvariable x = 5 ist.
#Berechnen Sie die Wahrscheinlichkeitsdichte bei der Wahrscheinlichkeitsvariablen 5
x = 5
y = stats.norm.pdf(x=x, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8
print("Probabilistische Variable x=Wahrscheinlichkeitsdichte bei 5:", y)

#Zeichnen Sie auf dem Diagramm der Wahrscheinlichkeitsdichtefunktion
plt.plot(X, norm_pdf)
plt.plot(x, y, 'bo') #Platziere die blauen Punkte

plt.vlines(x, 0.0, y, lw=2, linestyles='dashed') #Vertikale Linie
plt.hlines(y, 1.0, x, lw=2, linestyles='dashed') #Horizont

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Wahrscheinlichkeitsdichte pdf", fontsize=13)

plt.show()

1_2_04.PNG

  • ** Die Wahrscheinlichkeitsdichtefunktion pdf ist eine Methode für kontinuierliche Daten, und die folgende Wahrscheinlichkeitsmassenfunktion pmph wird für diskrete Daten verwendet. </ font> **

➂ pmf (Wahrscheinlichkeitsmassenfunktion) Wahrscheinlichkeitsmassenfunktion

  • Notation: pmf (k, n, p, loc = 0)
  • ** Wahrscheinlichkeitsmasse ** repräsentiert die ** relative Leichtigkeit des Auftretens ** jedes einzelnen Elements der Wahrscheinlichkeitsvariablen X.
  • Um es einfach auszudrücken, die ** Wahrscheinlichkeitsmassenfunktion ist eine Funktion **, die die Wahrscheinlichkeitsmasse berechnet, indem diskrete Typ </ font> -Daten als Argument verwendet werden.
  • Hier wird am Beispiel der ** Binärverteilung ** "Wenn 5 Versuche mit einer Erfolgswahrscheinlichkeit von 40% durchgeführt werden, wird die Wahrscheinlichkeit jedes Erfolgs (0 bis 4 Mal) angezeigt".
#Erfolgswahrscheinlichkeit
p = 0.4
#Anzahl von Versuchen
n = 5
#Anzahl der Erfolge
k = np.arange(0, 5) # array([0, 1, 2, 3, 4])

#Berechnen Sie die Wahrscheinlichkeit für jeden Erfolg mit pmf
binom_pmf = stats.binom.pmf(k, n, p) #Anzahl der Erfolge=0~4,Anzahl von Versuchen=5,Erfolgswahrscheinlichkeit=0.4

#Visualisierung
plt.plot(k, binom_pmf, 'bo', ms=8)
plt.vlines(k, 0, binom_pmf, colors='b', lw=3, alpha=0.5)

plt.xticks(k) #x-Achsenskala

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Probabilistische Massenfunktion pmph", fontsize=13)

plt.show()

1_2_14.PNG

➃ logpdf (Protokoll der Wahrscheinlichkeitsdichtefunktion)

  • Notation: logpdf (x, loc = 0, scale = 1)
  • ** Die Log-Wahrscheinlichkeitsdichtefunktion ** ist das Log der Wahrscheinlichkeitsdichte ** mit der Basis e.
  • Napier-Zahl $ e = 2.7182818284 ... $ ist der Wert von $ a $, wenn die transzendentale Zahl mit $ a $ multipliziert wird, um die Wahrscheinlichkeitsdichte zu erhalten. Die Formel lautet $ e ^ a = $ pdf.
#Gleichstellungssequenz generieren
X = np.arange(start=1, stop=7.1, step=0.1)

#Generieren Sie ein Protokoll der Wahrscheinlichkeitsdichtefunktion mit logpdf
norm_logpdf = stats.norm.logpdf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#Visualisierung
plt.plot(X, norm_logpdf)
plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Log Wahrscheinlichkeitsdichtefunktion logpdf", fontsize=13)
plt.show()

1_2_05.PNG

  • Als Versuch überprüfen wir die Wahrscheinlichkeitsvariable x = 4, die den maximalen logarithmischen Wert der Wahrscheinlichkeitsdichte in der obigen Abbildung zeigt.
  • Als Prozedur erhalten Sie zuerst den logarithmischen Wahrscheinlichkeitsdichtewert ** der Wahrscheinlichkeitsvariablen ** x = 4, berechnen dann die Wahrscheinlichkeitsdichte von ** x = 4 und nehmen dann den logarithmischen ** und vergleichen beide. Ich werde.
#Erhalten Sie die maximale logarithmische Wahrscheinlichkeitsdichte
logpdf_max = np.max(norm_logpdf) 
print('x=Log Wahrscheinlichkeitsdichte von 4:', logpdf_max)

#Berechnen Sie die Wahrscheinlichkeitsdichte
x = 4
v_pdf = stats.norm.pdf(x=x, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#Berechnen Sie den Logarithmus der Wahrscheinlichkeitsdichte
v_pdf_log = np.log(v_pdf)
print('x=Protokoll der Wahrscheinlichkeitsdichte von 4:', v_pdf_log)

#Visualisierung
plt.plot(X, norm_logpdf)
plt.plot(4, logpdf_max, 'bo') #Platziere die blauen Punkte

logpdf_min = np.min(norm_logpdf) #Minimaler Wert der logarithmischen Wahrscheinlichkeitsdichte(Zum Zeichnen)
plt.vlines(x, logpdf_max, logpdf_min, lw=2, linestyles='dashed') #Vertikale Linie
plt.hlines(logpdf_max, 1.0, x, lw=2, linestyles='dashed') #Horizont

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Log Wahrscheinlichkeitsdichtefunktion logpdf", fontsize=13)

plt.show()

1_2_06.PNG

➄ cdf (Kumulative Verteilungsfunktion) Kumulative Verteilungsfunktion

  • Notation: cdf (x, loc = 0, scale = 1)
  • ** Die kumulative Verteilungsfunktion ** berechnet die Wahrscheinlichkeit, dass die Wahrscheinlichkeitsvariable $ X $ kleiner oder gleich einem bestimmten Wert $ x $ ** ist.
  • Zum Beispiel ist die Wahrscheinlichkeit, dass "die Anzahl der Würfe 3 oder weniger beträgt" beim Werfen eines Würfels die Summe aller Wahrscheinlichkeitsdichten von 1 bis 3.
#Generieren Sie eine Gleichungssequenz für die x-Achse
X = np.linspace(start=1, stop=7, num=100)

#Generieren Sie eine kumulative Verteilungsfunktion mit cdf
norm_cdf = stats.norm.cdf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#x mit cdf=Berechnen Sie die kumulative Wahrscheinlichkeit von 5 oder weniger
under_5 = stats.norm.cdf(x=5, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8
print('Wahrscheinlichkeit von 5 oder weniger:', under_5)

#Visualisierung
plt.plot(X, norm_cdf)
plt.plot(5, under_5, 'bo') #Platziere die blauen Punkte

plt.vlines(5, 0.0, under_5, lw=2, linestyles='dashed') #Vertikale Linie
plt.hlines(under_5, 1.0, 5, lw=2, linestyles='dashed') #Horizont

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Kumulative Wahrscheinlichkeitsdichte cdf", fontsize=13)

plt.show()

1_2_07.PNG

  • Die folgende Abbildung zeigt die Punkte der Wahrscheinlichkeitsvariablen x = 5 auf der Wahrscheinlichkeitsdichtefunktion mit genau den gleichen Parametern.
  • Die kumulative Verteilungsfunktion entspricht dem hellblauen Bereich in dieser Abbildung.

1_2_08.PNG

➅ sf (Überlebensfunktion) Überlebensfunktion

  • Notation: sf (x, loc = 0, scale = 1)
  • ** Die Überlebensfunktion **, im Gegensatz zur kumulativen Verteilungsfunktion cdf, ** die Wahrscheinlichkeit, dass die Wahrscheinlichkeitsvariable $ X $ größer oder gleich einem bestimmten Wert $ x $ </ font> ** ist Berechnung.
  • ** Manchmal definiert als "1-cdf" **, aber ** sf kann genauer sein ** scipy.org https://docs.scipy.org/ Es befindet sich in doc / scipy / reference / generate / scipy.stats.norm.html.

1_2_15.PNG

#Generieren Sie eine Gleichungssequenz für die x-Achse
X = np.linspace(start=1, stop=7, num=100)

#Überlebensfunktion mit sf generieren
norm_sf = stats.norm.sf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#x mit sf=Berechnen Sie die kumulative Wahrscheinlichkeit von 5 oder mehr
upper_5 = stats.norm.sf(x=5, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8
print('Wahrscheinlichkeit von 5 oder mehr:', upper_5)

#Visualisierung
plt.plot(X, norm_sf)
plt.plot(5, upper_5, 'bo') #Platziere die blauen Punkte

plt.vlines(5, 0.0, upper_5, lw=2, linestyles='dashed') #Vertikale Linie
plt.hlines(upper_5, 1.0, 5, lw=2, linestyles='dashed') #Horizont

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Überlebensfunktion sf", fontsize=13)

plt.show()

1_2_09.PNG

  • Die folgende Abbildung zeigt die Punkte der Wahrscheinlichkeitsvariablen x = 5 auf der Wahrscheinlichkeitsdichtefunktion mit genau den gleichen Parametern.
  • Die Überlebensfunktion entspricht dem hellblauen Bereich in der Abbildung.

1_2_10.PNG

➆ ppf (Prozentpunktfunktion) Prozentpunktfunktion

  • Notation: ppf (q, loc = 0, scale = 1) ** Die Prozentpunktfunktion ** ist die Umkehrung der kumulativen Verteilungsfunktion cdf. Wenn Sie die ** kumulative Verteilungsfunktion als q% angeben, wird eine Variable ** zurückgegeben, die diesen Wert annimmt.
  • Daher entspricht ppf (0,25) dem 1. Quadranten, ppf (0,5) dem 2. Quadranten, der der Medianwert ist, und ppf (0,75) entspricht dem 3. Quadranten.
#Generieren Sie eine Gleichungssequenz für die x-Achse
X = np.arange(start=1, stop=7, step=0.1)

#Generieren Sie eine Wahrscheinlichkeitsdichtefunktion im PDF-Format
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#Holen Sie sich mit ppf die Variable, die der kumulativen Verteilungsfunktion 75% entspricht
q_75 = stats.norm.ppf(q=0.75, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8
print('Kumulative Verteilungsfunktion 75% -Punktwahrscheinlichkeitsvariable:', q_75)

#Holen Sie sich die Wahrscheinlichkeitsdichte der Variablen mit pdf
v = stats.norm.pdf(x=q_75, loc=4, scale=0.8)
print('Kumulative Verteilungsfunktion 75% Punktwahrscheinlichkeitsdichte:', v)

#Visualisierung
plt.plot(X, norm_pdf)
plt.plot(q_75, v, 'bo') #Platziere die blauen Punkte

plt.vlines(q_75, 0.0, v, lw=2, linestyles='dashed') #Vertikale Linie
plt.hlines(v, 1.0, q_75, lw=2, linestyles='dashed') #Horizont

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Wahrscheinlichkeitsdichtefunktion pdf", fontsize=13)

plt.show()

1_2_11.PNG

➇ isf (Inverse Überlebensfunktion)

  • Notation: isf (q, loc = 0, scale = 1) ** Die inverse Überlebensfunktion ** ist die Inverse der Überlebensfunktion sf, aber was Sie tun, ist das Gegenteil der Prozentpunktfunktion ppf. ** Wenn der Rest der Überlebensfunktion als q% angegeben wird, wird eine Variable ** zurückgegeben, die diesen Wert annimmt.
  • Daher ist der Quadrant das Gegenteil der Prozentpunktfunktion ppf, isf (0,25) ist der dritte Quadrant, isf (0,5) ist auch der zweite Quadrant und isf (0,75) ist der erste. Entspricht dem Quadranten.
#Generieren Sie eine Gleichungssequenz für die x-Achse
X = np.arange(start=1, stop=7, step=0.1)

#Generieren Sie eine Wahrscheinlichkeitsdichtefunktion im PDF-Format
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#Holen Sie sich mit isf die Variable, die der umgekehrten Überlebensfunktion entspricht, zu 25%
q_25 = stats.norm.isf(q=0.25, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8
print('Inverse Überlebensfunktion 25% Punktwahrscheinlichkeitsvariable:', q_25)

#Holen Sie sich die Wahrscheinlichkeitsdichte der Variablen mit pdf
v = stats.norm.pdf(x=q_25, loc=4, scale=0.8)
print('Inverse Überlebensfunktion 25% Punktwahrscheinlichkeitsdichte:', v)

#Visualisierung
plt.plot(X, norm_pdf)
plt.plot(q_25, v, 'bo') #Platziere die blauen Punkte

plt.vlines(q_25, 0.0, v, lw=2, linestyles='dashed') #Vertikale Linie
plt.hlines(v, 1.0, q_25, lw=2, linestyles='dashed') #Horizont

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Wahrscheinlichkeitsdichtefunktion pdf", fontsize=13)

plt.show()

1_2_12.PNG

➈ Intervall (Endpunkte des Bereichs, der Alpha-Prozent der Verteilung enthält) Intervallschätzung

  • Notation: Intervall (Alpha, loc = 0, Skala = 1)
  • In der aus tatsächlichen Daten berechneten ** empirischen Verteilung ** ist weder der Mittelwert noch die Standardabweichung immer unbekannt. Ich bin mir nicht sicher, ob der aus der Stichprobe ermittelte Mittelwert an die ** wahre Population $ θ $ ** in der Population angenähert werden kann.
  • Daher wird das Ermitteln des Intervalls einschließlich der Population $ θ $ </ font> mit einer bestimmten Wahrscheinlichkeit als Intervallschätzung bezeichnet **.
#Generieren Sie eine Gleichungssequenz für die x-Achse
X = np.arange(start=1, stop=7, step=0.1)

#Generieren Sie eine Wahrscheinlichkeitsdichtefunktion im PDF-Format
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#Holen Sie sich die Variable, die dem Vertrauensintervall 95% pro Intervall entspricht
lower, upper = stats.norm.interval(alpha=0.95, loc=4, scale=0.8) #Konfidenzkoeffizient=0.95,Erwarteter Wert=4,Standardabweichung=0.8
print('Untergrenze des 95% -Konfidenzintervalls:', lower)
print('Obergrenze des 95% -Konfidenzintervalls:', upper)

#Holen Sie sich die Wahrscheinlichkeitsdichte jeder Variablen mit pdf
v_lower = stats.norm.pdf(x=lower, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8
v_upper = stats.norm.pdf(x=upper, loc=4, scale=0.8) #Erwarteter Wert=4,Standardabweichung=0.8

#Visualisierung
plt.plot(X, norm_pdf)
plt.plot(lower, 0.0, 'k|')
plt.plot(upper, 0.0, 'k|')

plt.vlines(lower, 0.0, v_lower, lw=0.8) #Untere Grenze vertikale Linie
plt.vlines(upper, 0.0, v_upper, lw=0.8) #Obere vertikale Linie

plt.xlabel("Wahrscheinlichkeitsvariable X.", fontsize=13)
plt.ylabel("Wahrscheinlichkeitsdichtefunktion pdf", fontsize=13)

plt.show()

1_2_13.PNG

  • Geben Sie für die Intervallschätzung ** zuerst die Wahrscheinlichkeit des Intervalls an, das die Grundgesamtheit $ θ $ ** enthält. In diesem Beispiel ist das "Alpha = 0,95", was wir den "Konfidenzfaktor" nennen. Oft werden 99%, 95% und 90% verwendet, dies ist jedoch optional.
  • Unter der angegebenen Wahrscheinlichkeit werden die unteren und oberen Grenzen des Intervalls berechnet, das die Population $ θ $ enthält. In diesem Beispiel besteht eine Wahrscheinlichkeit von 95%, dass die Grundgesamtheit $ θ $ angibt, dass die stochastische Variable zwischen 2,43 und 5,57 liegt.

Nachwort

  • Ich habe die logarithmische kumulative Verteilungsfunktion logcdf, die logarithmische Überlebensfunktion logsf usw. weggelassen, aber ich denke, dass diejenigen, die anscheinend häufig verwendet werden, unterdrückt wurden.
  • Mit diesen möchte ich die 15 oben aufgeführten Arten von Wahrscheinlichkeitsverteilungen einzeln aufdecken.

Recommended Posts