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 % $.
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
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.
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 |
22 | 49 | 82 | 86 | 63 | 39 | 16 | 8 |
Erwartete Frequenz |
19.5 | 57.0 | 83.6 | 81.7 | 59.9 | 35.1 | 17.2 | 11.0 |
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.
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.
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