[PYTHON] [Statistiques] Visualisons la relation entre la distribution normale et la distribution du chi carré.

C'est la suite de la série de statistiques et de visualisation.

La distribution du chi carré est une distribution souvent utilisée dans le test du chi carré du test AB. Il s'écrit $ \ chi ^ 2 $ et est chi-carré. Si vous créez un graphique, la forme changera en fonction de la valeur de k, qui est appelée le degré de liberté, comme indiqué ci-dessous. chi2_dist2-compressor.gif

(Le code de dessin graphique est ici)

Quand j'ai interrogé le professeur de Wikipédia sur la définition de la distribution du chi carré,

Prenons indépendamment les variables de probabilité $ k $ $ X_1, ..., X_k $ qui suivent une distribution normale standard. A ce moment, la distribution selon la statistique $ Z = \ sum_ {i = 1} ^ k X_i ^ 2 $ est appelée la distribution du chi carré avec le degré de liberté $ k $.

J'ai une réponse. Hmm, qu'est-ce que tu veux dire? Mettez-vous au carré la fonction de densité de la distribution normale? Apparemment, c'est différent.

Tout d'abord, comme ce sont des "variables de probabilité $ k $ qui suivent indépendamment la distribution normale standard", je vais d'abord écrire un histogramme de nombres aléatoires qui suivent la distribution normale standard. Nombres aléatoires selon 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.")

(Le code complet pour dessiner le graphique est ici)

La distribution que suit le nombre aléatoire tracé en mettant au carré ce nombre aléatoire est la distribution du chi carré. Dans du code

#30 nombres aléatoires qui suivent une distribution normale standard,Générer 000
x = np.random.normal(0, 1, 30000)
#Square le nombre aléatoire généré [[C'est la clé! !! !! ]]
x2 = x**2

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

#Tracer une distribution chi carré avec 1 degré de liberté
xx = np.linspace(0, 25 ,1000)
plt.plot(xx, chi2.pdf(xx, df=1), linewidth=2, color="r")

Ce sera. L'affichage de ce graphique est le suivant. Comme il est au carré, tout est positif, donc toutes les données se sont déplacées vers la droite de $ x = 0 $, Parce qu'il est au carré

En même temps, la ligne de la fonction de densité de la distribution du chi carré avec 1 degré de liberté est dessinée, mais elles sont presque les mêmes! Ceci trace $ X_1 ^ 2 $ car il met au carré un nombre aléatoire qui suit une distribution normale standard et le trace tel quel. Puisqu'il n'y a qu'un seul $ X $, il a une distribution chi carré avec un degré de liberté.

chi2_hist_dist-compressor.png

Ensuite, si vous dessinez une animation de $ X_1 ^ 2 + X_2 ^ 2 $ avec 2 degrés de liberté à $ \ sum_ {i = 1} ^ {10} X_i ^ 2 $, ce sera comme suit. ..

chi2_hist_dist-compressor.gif

C'est aussi un match parfait! Le "carré" du chi carré peut être interprété comme le carré d'un nombre aléatoire qui suit une distribution normale standard! J'ai pu ajouter une image à cette image en écrivant un histogramme!

Voici le code pour dessiner l'animation du graphique avec 1 à 10 degrés de liberté.

def animate(nframe):
    n = 30000
    k = nframe + 1
    cum = np.zeros(n)
    for i in range(k):
        #30 nombres aléatoires qui suivent une distribution normale standard,Générer 000
        x = np.random.normal(0, 1, n)
        #Square le nombre aléatoire généré [Ceci est la clé! ]
        x2 = x**2
        #Le nombre total est le degré de liberté.
        cum += x2

    #Dessiner un histogramme
    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)

    #Tracer une distribution chi carré avec 1 degré de liberté
    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)

Supplément de code

Comme imagemagick est utilisé pour dessiner l'animation gif, Honke HP et PythonMagick Veuillez installer en vous référant à download / python /).

Cependant, l'installation d'ImageMagick et de PythonMagick est difficile en fonction de l'environnement, donc si vous souhaitez simplement créer des animations facilement, vous pouvez générer des animations avec mp4 comme indiqué ci-dessous sans bibliothèques supplémentaires.

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

Recommended Posts

[Statistiques] Visualisons la relation entre la distribution normale et la distribution du chi carré.
Visualisons la relation entre le salaire moyen et l'industrie avec des données XBRL et seaborn! (7/10)
La relation subtile entre Gentoo et pip
Étudier la relation entre les dépenses de crème glacée et la température
Examiner la relation entre TensorFlow et Keras pendant la période de transition
Comprendre la signification des formules de distribution normale complexes et bizarres
Statistiques de base et distribution gaussienne
Relation et erreur d'approximation de la distribution binomiale, distribution de Poisson, distribution normale, distribution supergéométrique
J'ai étudié la relation entre le LSTM avec état de Keras et l'état caché
Examiner la relation entre deux variables (2)
Examiner la relation entre deux variables (1)
J'ai essayé de visualiser la tranche d'âge et la distribution des taux d'Atcoder
Visualisez facilement le coefficient de corrélation entre les variables
Relation entre netfilter, firewalld, iptables et nftables
J'ai essayé de résumer la relation entre les distributions de probabilité à partir de la distribution de Bernoulli
[Introduction aux statistiques] Quel type de distribution est la distribution t, la distribution chi carré et la distribution F? Un petit résumé de l'utilisation de [python]