Testen Sie, ob die beobachteten Daten der Poisson-Verteilung folgen (Test der Eignung der Poisson-Verteilung durch Python)

Problemstellung

In einem Supermarkt ** wurde die Anzahl der Beschwerden von Kunden (pro Tag) ** für 365 USD pro Tag aggregiert, und die Ergebnisse waren wie folgt.

Anzahl der Ansprüche 0 Fälle 1 2 Fälle 3 Fälle 4 Fälle 5 Fälle 6 7 Fälle
Beobachtungsfrequenz
(Anzahl der Tage)
22 49 82 86 63 39 16 8

Können wir uns diese Daten als ** nach der Poisson-Verteilung ** vorstellen? Test auf dem Signifikanzniveau von $ 5 % $.

Visualisierung

Lassen Sie uns ein Diagramm von "** erwartete Häufigkeit " und " beobachtete Häufigkeit **" erstellen, das unter der Annahme berechnet wird, dass es der Poisson-Verteilung folgt.

"** Erwartete Frequenz " wird wie folgt berechnet. Multiplizieren Sie zunächst die Anzahl der Ansprüche mit der Anzahl der Beobachtungen ** und dividieren Sie sie durch die Anzahl der Beobachtungstage von 365 $, um die durchschnittliche Anzahl der Ansprüche pro Tag zu erhalten ** $ \ mu = 2,931 . Finden Sie dann die stochastische Masse ( k = 0,7 $) für die ** Poisson-Verteilung ** mit einem Durchschnitt von $ 2,93 $ und multiplizieren Sie sie mit $ 365 $ für die Anzahl der Beobachtungstage, um die " erwartete Häufigkeit **" zu erhalten.

Visualisierung der beobachteten und erwarteten Frequenzen


import numpy as np
import scipy.stats as st
import japanize_matplotlib
import matplotlib.pyplot as plt

n = np.arange(0,7+1)
f = np.array((22,49,82,86,63,39,16,8)) #Frequenz

mu = (n*f).sum()/f.sum() #Berechnen Sie die durchschnittliche Anzahl der Ansprüche 2.931

Po = st.poisson(mu=mu) # μ=2.Poisson-Verteilung von 931
xp = Po.pmf(k=n)       # k=1...Wahrscheinlichkeitsmasse von 7
xp[-1] = 1 - st.poisson.cdf(n[-2],mu=mu) # k>=7 Wahrscheinlichkeitsmasse k=Integriert in 7
fp = xp * f.sum()      #Erwartete Frequenz

plt.figure(figsize=(6,3),dpi=120,facecolor='white')
plt.bar(n,f,width=0.9, label='Beobachtungsfrequenz')
plt.plot(n,fp,'o--', c='tab:orange', label=f'Erwartete Frequenz$Po\,(\\lambda={mu:.2f})$')
plt.tick_params(axis='x',length=0)
plt.legend(framealpha=1, fancybox=False)
plt.gca().set_axisbelow(True)
plt.grid(axis='y')
plt.show()

Das Ausführungsergebnis ist wie folgt.
Download (1) .png

Anzahl der Ansprüche 0 Fälle 1 2 Fälle 3 Fälle 4 Fälle 5 Fälle 6 7 Fälle
Beobachtungsfrequenz
f
22 49 82 86 63 39 16 8
Erwartete Frequenz
f_{p}
19.5 57.0 83.6 81.7 59.9 35.1 17.2 11.0

Eignungsprüfung

Ist die Hypothese, dass "Objekte der Poisson-Verteilung folgen" (Nullhypothese) richtig? Wird durch ** statistischen Test ** ausgewertet.

Wenn diese Hypothese korrekt ist, werden die folgenden ** Statistiken ** $ t aus ** Beobachtungshäufigkeit ** $ \ boldsymbol {x} $ und ** hypothetischer erwarteter Häufigkeit ** $ \ boldsymbol {x} _p $ berechnet Der Test wird unter Verwendung der Eigenschaft durchgeführt, dass $ (ungefähr) ** Chi-Quadrat-Verteilung ** (Freiheitsgrad $ n-2 $) folgt.

t = \sum \frac{(x-x_p)^2}{x_p}

In der aktuellen Ausgabe liegt die Anzahl der Ansprüche im Bereich von $ 8 $ zwischen $ 0 $ und $ 7 $, sodass die ** Freiheit ** $ n-2 = 8-2 = 6 $ beträgt.

Zeichnen wir eine Wahrscheinlichkeitsdichtefunktion für eine Chi-Quadrat-Verteilung mit $ 6 $ Freiheit.

Chi-Quadrat-Verteilung mit 6 Freiheitsgraden


import numpy as np
import scipy.stats as st
import japanize_matplotlib
import matplotlib.pyplot as plt

x = np.linspace(0,25,200)
p = st.chi2.pdf(x, df=6)

x_p95 = st.chi2.ppf(0.95, df=6)

y_range = (0.00,0.16)
plt.figure(figsize=(6,3),dpi=120,facecolor='white')
plt.plot(x,p)
plt.vlines(x_p95,*y_range,lw=1,ls=':',color='tab:red')

x2 = np.linspace(0,x_p95,200)
plt.fill_between(x2,st.chi2.pdf(x2,df=6),np.zeros(len(x2)),facecolor='tab:blue',alpha=0.3)

plt.text(5,0.05,'0.95',ha='center',va='center')
plt.text(x_p95,-0.004,f'{x_p95:.2f}',c='tab:red', ha='center',va='top')

plt.text(x_p95,0.08,f'→ Ablehnungsbereich',c='tab:red')

arrowprops=dict(arrowstyle='->',connectionstyle='angle,angleA=0,angleB=60, rad=1')
kw = dict(xycoords='data',textcoords='data',ha='left', arrowprops=arrowprops)
plt.gca().annotate('0.05', xy=(13.3, 0.003), xytext=(15.5,0.016), **kw)

plt.xlim(0,25)
plt.ylim(*y_range)

plt.xlabel('Statistiken$t$')
plt.show()

Das Ausführungsergebnis ist wie folgt.
Download.png

Finden Sie tatsächlich die Statistik $ t $ und den entsprechenden Wert von $ p $.

Berechnung der Teststatistik und des p-Wertes


t = ( ((f-fp)**2)/fp ).sum()        #Statistik t
p = 1 - st.chi2.cdf(t,df=len(n)-2)  #6 Freiheitsgrade(8-2)P-Wert entsprechend t in der Chi-Quadrat-Verteilung von

print(f'Statistik t= {t:.2f}, P-Wert= {p:.2f} ',end='')
if p >= 0.05 :
  print('( >= 0.05 ) \n Die Nullhypothese (nach Poisson-Verteilung) wird nicht zurückgewiesen')
else :
  print('( < 0.05 ) \n Die Nullhypothese (nach Poisson-Verteilung) wird verworfen')

Das Ausführungsergebnis ist wie folgt.

Statistik t= 3.22, p-Wert= 0.78 ( >= 0.05 ) 
Die Nullhypothese (nach Poisson-Verteilung) wird nicht zurückgewiesen

Recommended Posts

Testen Sie, ob die beobachteten Daten der Poisson-Verteilung folgen (Test der Eignung der Poisson-Verteilung durch Python)
Testen Sie die Eignung der Verteilung
Test der Differenz zwischen den Durchschnittswerten der Zähldaten gemäß der Poisson-Verteilung
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
[Python] Testen Sie die Mondmatagi des relativen Deltas
Die Geschichte des Lesens von HSPICE-Daten in Python
Finden Sie die kumulative Verteilungsfunktion durch Sortieren (Python-Version)
[Python] Generieren Sie Zufallszahlen, die der Rayleigh-Verteilung folgen
Den Inhalt der Daten in Python nicht kennen
Python: Diagramm der zweidimensionalen Datenverteilung (Schätzung der Kerneldichte)
Verwenden wir die offenen Daten von "Mamebus" in Python
Verstehen Sie den Status des Datenverlusts - Python vs. R.
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Primzahlbeurteilung durch Python
der Zen von Python
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
So testen Sie die Attribute, die durch add_request_method of pyramid hinzugefügt wurden
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Anhängen an den Python-Prozess des SSH-Ziels und Debuggen
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ermitteln Sie den Durchmesser des Diagramms anhand der Suche nach Breitenpriorität (Python-Speicher).
Ich habe den Python-Datenanalysetest bestanden und die Punkte zusammengefasst
Was ich bei der Analyse der Daten des Ingenieurmarktes gesehen habe
Zeichnen wir ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java.