[PYTHON] [Statistiques] Saisir l'image de la théorie de la limitation du pôle central avec un graphe

1. Quelle est la théorie de la limitation des pôles centraux?

Lors de l'étude des statistiques, un théorème avec un nom plutôt rigide, la théorie de la limitation du pôle central, apparaît. Selon l'enseignant de Wikipédia

Selon la loi des grands nombres, la moyenne de l'échantillon prélevé au hasard dans une population se rapproche de la vraie moyenne à mesure que la taille de l'échantillon augmente. D'autre part, la théorie de la limitation du pôle central examine l'erreur entre la moyenne de l'échantillon et la moyenne réelle. Dans de nombreux cas, quelle que soit la distribution de la population, l'erreur suivra approximativement une distribution normale lorsque la taille de l'échantillon est augmentée. http://ja.wikipedia.org/wiki/中心極限定理

C'est écrit, mais je ne suis pas sûr ^^; Quelle que soit la forme de la distribution originale, la moyenne de l'échantillon des échantillons prélevés sera proche de la distribution normale. Il semble que la variance de l'échantillon sera également proche de la distribution normale. (Pour être précis, s'il y a beaucoup de N selon la distribution du chi carré, il peut être approché par une distribution normale) Même si je l'explique avec des mots, même si je le prouve avec une formule mathématique (en quelque sorte la matrice du rapport de produit correspond), je pense que cela ne peut pas être compris intuitivement, donc le but de cet article est de dessiner un graphique et d'essayer de le comprendre. est.

2. Préparation pour le dessin graphique

Je vais dessiner un graphique en utilisant Python, mais le processus préparatoire est le suivant. Nous préparons l'importation de diverses bibliothèques et fonctions de dessin graphique.

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import numpy.random as rd
import matplotlib.mlab as mlab
import scipy.stats as st

#Exemple de paramètres
n = 10000
sample_size = 10000

#Fonction pour calculer la moyenne et la variance pour chaque échantillon
def sample_to_mean_var(sample):
    mean = np.mean(sample)
    var  = np.var(sample)
    return [mean, var]
    
#Une fonction qui trace un histogramme de moyenne et de variance
def plot_mean_var(stats, dist_name=""):
    mu = stats[:,0]
    var = stats[:,1]
    bins = 40
    
    #Exemple d'histogramme moyen
    plt.figure(figsize=(7,5))
    plt.hist(mu, bins=bins, normed=True, color="plum")
    plt.title("mu from %s distribution"%(dist_name))
    plt.show()
    
    #Exemple d'histogramme de distribution
    plt.figure(figsize=(7,5))
    plt.hist(var, bins=bins, color="lightblue", normed=True)
    plt.title("var from %s distribution"%(dist_name))
    plt.show()
    
def plot_dist(data, bins, title =""):
    plt.figure(figsize=(7,5))
    plt.title(title)
    plt.hist(data, bins, color="lightgreen", normed=True)
    plt.show()

3. N ° de tirage au sort

3-1. Distribution exponentielle

Tout d'abord, essayez [Distribution exponentielle](http://qiita.com/kenmatsu4/items/c1a64cf69bc8c9e07aa2#geometricp-sizenone --- distribution géométrique). Le paramètre de distribution d'index $ \ lambda $ est 0,1, et 10 000 échantillons sont générés et un graphique est dessiné ci-dessous. C'est une distribution complètement asymétrique avec un long ourlet à droite.

#Dessin graphique de distribution exponentielle
lam = 0.1  
x = rd.exponential(1./lam, size=sample_size)
plot_dist(x, 100, "exponential dist")

Unknown-7-compressor.png

Avec ces 10 000 échantillons en un seul ensemble, la moyenne de l'échantillon et la variance de l'échantillon sont calculées à partir de cela. Répétez cette opération 10 000 fois et écrivez un histogramme de la moyenne de l'échantillon et de la variance de l'échantillon comme indiqué ci-dessous.

#Générer beaucoup de distribution exponentielle et dessiner un histogramme de la moyenne et de la variance de l'échantillon
lam = 0.1
stats = np.array([sample_to_mean_var(rd.exponential(1./lam, size=sample_size)) for i in range(n)])
plot_mean_var(stats, dist_name="exponential")

exp_mean-compressor.png

exp_var.png

Que diriez-vous, la distribution d'origine était assez déformée, mais la moyenne de l'échantillon et la dispersion de l'échantillon semblent être une belle forme de cloche symétrique. La limitation du pôle central est que cela suit une distribution normale.

Ci-dessous, je vais essayer d'autres graphiques déformés.

3-1. Distribution du chi carré

Vient ensuite [Kai](http://qiita.com/kenmatsu4/items/c1a64cf69bc8c9e07aa2#chisquaredf-sizenone---Kai-square distribution). Ceci est également assez déformé.

#Distribution du chi carré avec 5 degrés de liberté
df = 5
x = rd.chisquare(df, sample_size)
plot_dist(x, 50, "chi square dist")

chi2-compressor.png

#Moyenne de distribution du chi carré, histogramme de variance
df = 5   #Degré de liberté

#Générer de nombreuses distributions du chi carré
chi_stats = np.array([sample_to_mean_var(rd.chisquare(df, sample_size)) for i in range(n)])
plot_mean_var(chi_stats, dist_name="chi square")

Encore une fois, vous pouvez voir qu'un histogramme en forme de cloche symétrique peut être écrit.

chi2_mean-compressor.png chi2_var-compressor.png

3-1. Distribution normale de la Futamine

J'essaierai également une distribution de forme étrange avec deux pics.

#Distribution normale de la Futamine
def generate_bimodal_norm():
    x = np.random.normal(0, 4, sample_size)
    y = np.random.normal(25, 8, sample_size)
    return np.append(x,y)

z = generate_bimodal_norm()
plot_dist(z, 70, "bi-modal normal dist")

binorm-compressor.png

#Moyenne de distribution normale bimodale, histogramme de variance

#Génère de nombreuses distributions normales bimodales
binorm_stats = np.array([sample_to_mean_var(generate_bimodal_norm()) for i in range(n)])
plot_mean_var(binorm_stats, dist_name="bi-modal normal")

Même avec une telle distribution, la moyenne et la variance de l'échantillon sont normalement distribuées. C'est incroyable, limitation du pôle central w

binorm_mean-compressor.png binorm_var-compressor.png

4. Conclusion

C'est donc une limitation du pôle central qui semble difficile lorsque l'on regarde des formules mathématiques et des preuves, mais j'ai essayé de la comprendre intuitivement en regardant le graphique. Cela semble être la raison pour laquelle la distribution normale est importante dans les statistiques: sourire:

Recommended Posts

[Statistiques] Saisir l'image de la théorie de la limitation du pôle central avec un graphe
Compter la partie concaténée maximale d'un graphe aléatoire avec NetworkX
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Calculez la probabilité d'être une pièce de calmar avec le théorème de Bayes [python]
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
[Python] axe limite du graphe 3D avec Matplotlib
Augmentez la taille de la police du graphique avec matplotlib
La base de la théorie des graphes avec l'animation matplotlib
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
Dessinez un graphique avec PyQtGraph Partie 5-Augmentez l'axe Y
Extraire le tableau des fichiers image avec OneDrive et Python
[Python] Obtenez les nombres dans l'image graphique avec OCR
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Calculer le produit des matrices avec une expression de caractère?
Comment tracer beaucoup de légendes en changeant la couleur du graphique en continu avec matplotlib
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
Un diagramme de réseau a été créé avec les données du COVID-19.
Mesurer l'importance des entités avec un outil de forêt aléatoire
Obtenez l'identifiant d'un GPU avec une faible utilisation de la mémoire
Obtenez UNIXTIME au début d'aujourd'hui avec une commande
Résumé de l'exploration d'image effectuée à la vitesse d'une seconde
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
Analysez le modèle thématique pour devenir romancier avec GensimPy3
L'histoire de la création d'un bot de boîte à questions avec discord.py
Dessinez un graphique avec NetworkX
Composants liés du graphique
Dessinez un graphique avec networkx
L'image est Namekuji
Prouvons le théorème d'addition d'une fonction triangulaire en remplaçant la fonction par une fonction dans SymPy (≠ substitution)
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
Lire les coordonnées du tracé sur le graphe avec Python-matplotlib (super débutant)
Une méthode de conversion du style d'une image tout en préservant la couleur
Traitez le contenu du fichier dans l'ordre avec un script shell
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
[python, ruby] sélénium-Obtenez le contenu d'une page Web avec le pilote Web
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Considérez la vitesse de traitement pour déplacer le tampon d'image avec numpy.ndarray
[Go] Créez une commande CLI pour changer l'extension de l'image
L'histoire de la création d'un pilote standard pour db avec python.
Obtenir l'URL du ticket JIRA créé par la bibliothèque jira-python
L'idée d'alimenter le fichier de configuration avec un fichier python au lieu de yaml
Une histoire qui prend en charge la notation électronique des examens avec reconnaissance d'image
J'ai vérifié l'image de l'Université des sciences sur Twitter avec Word2Vec.
L'histoire de la création d'un module qui ignore le courrier avec python
Créez un programme de jugement de compatibilité avec le module aléatoire de python.
Puisque l'image dokcer (1 Go) d'OpenJDK11 est grande, créez une petite image (85 Mo) avec alpine linux + jlink.
L'histoire de la création d'un outil pour charger une image avec Python ⇒ l'enregistrer sous un autre nom
Tracez un graphe avec Julia + PyQtGraph (2)
Dessinez un graphique lâche avec matplotlib
Tracez un graphique avec Julia + PyQtGraph (1)
Dessinez un graphique avec Julia + PyQtGraph (3)
Graphique d'appel de sortie avec PyCallGraph
À propos de la limite supérieure de threads-max