[PYTHON] [Statistik] Lassen Sie uns die Beziehung zwischen der Normalverteilung und der Chi-Quadrat-Verteilung visualisieren.

Dies ist die Fortsetzung der Reihe von Statistiken und Visualisierungen.

Die Chi-Quadrat-Verteilung ist eine Verteilung, die häufig im Chi-Quadrat-Test des AB-Tests verwendet wird. Es wird als $ \ chi ^ 2 $ geschrieben und ist das Quadrat des Chi. Das Diagramm zeigt die folgende Form, und die Form ändert sich entsprechend dem Wert von k, der als Freiheitsgrad bezeichnet wird. chi2_dist2-compressor.gif

(Der Zeichnungscode für die Grafik lautet hier)

Als ich den Wikipedia-Lehrer nach der Definition der Chi-Quadrat-Verteilung fragte,

Nehmen Sie unabhängig $ k $ Wahrscheinlichkeitsvariablen $ X_1, ..., X_k , die einer Standardnormalverteilung folgen. Zu diesem Zeitpunkt wird die Verteilung gemäß der Statistik $ Z = \ sum_ {i = 1} ^ k X_i ^ 2 $$ als Chi-Quadrat-Verteilung mit dem Freiheitsgrad $ k $ bezeichnet.

Ich habe eine Antwort bekommen. Hmm, was meinst du? Quadrieren Sie die Dichtefunktion der Normalverteilung? Anscheinend ist es anders.

Da es sich um "$ k $ Wahrscheinlichkeitsvariablen handelt, die unabhängig voneinander der Standardnormalverteilung folgen", schreibe ich zunächst ein Histogramm von Zufallszahlen, die der Standardnormalverteilung folgen. Zufallszahlen nach 30.000 $ X \ sim \ N (\ mu, \ sigma) $. norm_dist.png

x = np.random.normal(0, 1, 30000)
plot_dist(x, bins=80, title="normal distribution.")

(Der vollständige Code zum Zeichnen des Diagramms lautet hier)

Die Verteilung, der die durch Quadrieren dieser Zufallszahl aufgetragene Zufallszahl folgt, ist die Chi-Quadrat-Verteilung. In Code

#30 Zufallszahlen, die einer Standardnormalverteilung folgen,Generieren Sie 000
x = np.random.normal(0, 1, 30000)
#Quadrieren Sie die generierte Zufallszahl [[Dies ist der Schlüssel! !! !! ]]
x2 = x**2

#Zeichnen eines Histogramms
plt.figure(figsize=(7,5))
plt.title("chi2 distribution.[k=1]")
plt.hist(x2, 80, color="lightgreen", normed=True)

#Zeichnen einer Chi-Quadrat-Verteilung mit 1 Freiheitsgrad
xx = np.linspace(0, 25 ,1000)
plt.plot(xx, chi2.pdf(xx, df=1), linewidth=2, color="r")

Es wird sein. Die Anzeige dieses Diagramms ist wie folgt. Da es quadratisch ist, ist alles positiv, so dass alle Daten von $ x = 0 $ nach rechts verschoben wurden. Weil es quadratisch ist

Gleichzeitig wird die Linie der Dichtefunktion der Chi-Quadrat-Verteilung mit 1 Freiheitsgrad gezeichnet, aber sie sind fast gleich! Dies ist das Zeichnen von $ X_1 ^ 2 $, da es eine Zufallszahl quadriert, die einer Standardnormalverteilung folgt, und sie so darstellt, wie sie ist. Da es nur ein $ X $ gibt, hat es eine Chi-Quadrat-Verteilung mit einem Freiheitsgrad.

chi2_hist_dist-compressor.png

Wenn Sie dann eine Animation von $ X_1 ^ 2 + X_2 ^ 2 $ mit 2 Freiheitsgraden zu $ \ sum_ {i = 1} ^ {10} X_i ^ 2 $ zeichnen, ist dies wie folgt. ..

chi2_hist_dist-compressor.gif

Dies ist auch eine perfekte Übereinstimmung! Das "Quadrat" des Chi-Quadrats kann als das Quadrat einer Zufallszahl interpretiert werden, die einer Standardnormalverteilung folgt! Ich konnte diesem Bild ein Bild hinzufügen, indem ich ein Histogramm schrieb!

Unten finden Sie den Code zum Zeichnen der Animation des Diagramms mit 1 bis 10 Freiheitsgraden.

def animate(nframe):
    n = 30000
    k = nframe + 1
    cum = np.zeros(n)
    for i in range(k):
        #30 Zufallszahlen, die einer Standardnormalverteilung folgen,Generieren Sie 000
        x = np.random.normal(0, 1, n)
        #Quadrieren Sie die generierte Zufallszahl [Dies ist der Schlüssel! ]]
        x2 = x**2
        #Die Gesamtzahl ist der Freiheitsgrad.
        cum += x2

    #Zeichnen eines Histogramms
    plt.clf()
    #plt.figure(figsize=(9,7))
    plt.ylim(0, 0.6)
    plt.xlim(0, 25)
    plt.title("chi2 histgram & pdf [k=%d]"%k)
    plt.hist(cum, 80, color="lightgreen", normed=True)

    #Zeichnen einer Chi-Quadrat-Verteilung mit 1 Freiheitsgrad
    xx = np.linspace(0, 25 ,1000)
    plt.plot(xx, chi2.pdf(xx, df=k), linewidth=2, color="r")


fig = plt.figure(figsize=(10,8))
anim = ani.FuncAnimation(fig, animate, frames=10, blit=True)
anim.save('chi2_hist_dist.gif', writer='imagemagick', fps=1, dpi=64)

Code-Ergänzung

Da Imagemagick zum Zeichnen der GIF-Animation verwendet wird, Honke HP und PythonMagick Bitte installieren Sie unter Download / Python /).

Die Installation von ImageMagick und PythonMagick ist jedoch je nach Umgebung schwierig. Wenn Sie also einfach Animationen erstellen möchten, können Sie Animationen mit mp4 wie unten gezeigt ohne zusätzliche Bibliotheken erstellen.

anim.save('filename.mp4', fps=13)

Recommended Posts

[Statistik] Lassen Sie uns die Beziehung zwischen der Normalverteilung und der Chi-Quadrat-Verteilung visualisieren.
Lassen Sie uns die Beziehung zwischen Durchschnittsgehalt und Industrie mit XBRL-Daten und Seaborn visualisieren! (7/10)
Die subtile Beziehung zwischen Gentoo und Pip
Untersuchung des Zusammenhangs zwischen Eisausgaben und Temperatur
Untersuchen Sie die Beziehung zwischen TensorFlow und Keras in der Übergangszeit
Grundlegende Statistik und Gaußsche Verteilung
Beziehungs- und Approximationsfehler der Binomialverteilung, Poisson-Verteilung, Normalverteilung, supergeometrische Verteilung
Ich untersuchte die Beziehung zwischen Keras 'zustandsbehaftetem LSTM und verstecktem Zustand
Untersuchen Sie die Beziehung zwischen zwei Variablen (2)
Untersuchen Sie die Beziehung zwischen zwei Variablen (1)
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Visualisieren Sie einfach den Korrelationskoeffizienten zwischen Variablen
Beziehung zwischen Netfilter, Firewall, Iptables und Nftables
Ich habe versucht, die Beziehung zwischen Wahrscheinlichkeitsverteilungen ausgehend von der Bernoulli-Verteilung zusammenzufassen
[Einführung in die Statistik] Welche Art von Verteilung ist die t-Verteilung, die Chi-Quadrat-Verteilung und die F-Verteilung? Eine kleine Zusammenfassung der Verwendung von [Python]