[PYTHON] [Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm

1. Was ist die zentrale Polbegrenzungstheorie?

Beim Studium der Statistik taucht ein Satz mit einem ziemlich starren Namen auf, die Theorie der zentralen Polbegrenzung. Laut Wikipedia-Lehrer

Nach dem Gesetz der großen Zahlen nähert sich der zufällig aus einer Population zufällig ausgewählte Stichprobenmittelwert mit zunehmender Stichprobengröße dem wahren Mittelwert. Andererseits diskutiert die zentrale Polbegrenzungstheorie den Fehler zwischen dem Stichprobenmittelwert und dem wahren Durchschnitt. In vielen Fällen folgt der Fehler unabhängig von der Verteilung der Population ungefähr einer Normalverteilung, wenn die Stichprobengröße erhöht wird. http://ja.wikipedia.org/wiki/中心極限定理

Es ist geschrieben, aber ich bin nicht sicher ^^; Unabhängig von der Form der ursprünglichen Verteilung liegt der Stichprobenmittelwert der entnommenen Proben nahe an der Normalverteilung. Es scheint, dass die Stichprobenvarianz auch nahe an der Normalverteilung liegt. (Um genau zu sein, wenn es gemäß der Chi-Quadrat-Verteilung viele N gibt, kann dies durch eine Normalverteilung angenähert werden.) Selbst wenn ich es in Worten erkläre, selbst wenn ich es mit einer mathematischen Formel beweise (irgendwie stimmt die Produktverhältnismatrix überein), denke ich, dass es nicht intuitiv verstanden werden kann. Der Zweck dieses Artikels ist es, ein Diagramm zu zeichnen und zu versuchen, es zu verstehen. ist.

2. Vorbereitung für die Grafikzeichnung

Ich werde mit Python ein Diagramm zeichnen, aber der Vorbereitungsprozess dafür ist wie folgt. Wir bereiten den Import verschiedener Bibliotheken und Funktionen zum Zeichnen von Grafiken vor.

%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

#Beispielparameter
n = 10000
sample_size = 10000

#Funktion zur Berechnung von Durchschnitt und Varianz für jede Probe
def sample_to_mean_var(sample):
    mean = np.mean(sample)
    var  = np.var(sample)
    return [mean, var]
    
#Eine Funktion, die ein Histogramm von Durchschnitt und Varianz zeichnet
def plot_mean_var(stats, dist_name=""):
    mu = stats[:,0]
    var = stats[:,1]
    bins = 40
    
    #Mittleres Histogramm der Probe
    plt.figure(figsize=(7,5))
    plt.hist(mu, bins=bins, normed=True, color="plum")
    plt.title("mu from %s distribution"%(dist_name))
    plt.show()
    
    #Histogramm der Probenverteilung
    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. Zeichne

3-1. Exponentialverteilung

Versuchen Sie zunächst [Exponentialverteilung](http://qiita.com/kenmatsu4/items/c1a64cf69bc8c9e07aa2#geometricp-sizenone --- geometrische Verteilung). Der Indexverteilungsparameter $ \ lambda $ beträgt 0,1, und 10.000 Stichproben werden generiert, und unten wird ein Diagramm gezeichnet. Es ist eine völlig asymmetrische Verteilung mit einem langen Saum rechts.

#Diagrammzeichnung der Exponentialverteilung
lam = 0.1  
x = rd.exponential(1./lam, size=sample_size)
plot_dist(x, 100, "exponential dist")

Unknown-7-compressor.png

Aus diesen 10.000 Stichproben als einem Satz werden der Stichprobenmittelwert und die Stichprobenvarianz daraus berechnet. Wiederholen Sie dies 10.000 Mal und schreiben Sie ein Histogramm des Stichprobenmittelwerts und der Stichprobenvarianz, wie unten gezeigt.

#Generieren Sie viel Exponentialverteilung und zeichnen Sie ein Histogramm des Stichprobenmittelwerts und der Stichprobenvarianz
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

Wie wäre es, wenn die ursprüngliche Verteilung ziemlich verzerrt wäre, aber der Probenmittelwert und die Probendispersion scheinen eine schöne symmetrische Glockenform zu sein. Die zentrale Polbegrenzung besteht darin, dass dies einer Normalverteilung folgt.

Im Folgenden werde ich andere verzerrte Grafiken ausprobieren.

3-1. Chi-Quadrat-Verteilung

Als nächstes folgt [Kai](http://qiita.com/kenmatsu4/items/c1a64cf69bc8c9e07aa2#chisquaredf-sizenone---Kai-square Distribution). Dies ist auch ziemlich verzerrt.

#Chi-Quadrat-Verteilung mit 5 Freiheitsgraden
df = 5
x = rd.chisquare(df, sample_size)
plot_dist(x, 50, "chi square dist")

chi2-compressor.png

#Mittelwert der Chi-Quadrat-Verteilung, Varianzhistogramm
df = 5   #Freiheitsgrad

#Generieren Sie viele Chi-Quadrat-Verteilungen
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")

Wieder können Sie sehen, dass ein symmetrisches glockenförmiges Histogramm geschrieben werden kann.

chi2_mean-compressor.png chi2_var-compressor.png

3-1. Futamin-Normalverteilung

Ich werde auch eine seltsam geformte Verteilung mit zwei Spitzen versuchen.

#Futamin Normalverteilung
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

#Mittelwert der bimodalen Normalverteilung, Varianzhistogramm

#Erzeugt viele bimodale Normalverteilungen
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")

Selbst bei einer solchen Verteilung sind der Stichprobenmittelwert und die Stichprobenvarianz normal verteilt. Es ist erstaunlich, zentrale Polbegrenzung w

binorm_mean-compressor.png binorm_var-compressor.png

4. Fazit

Es ist also eine zentrale Polbegrenzung, die bei der Betrachtung mathematischer Formeln und Beweise schwierig erscheint, aber ich habe versucht, sie intuitiv zu verstehen, indem ich mir die Grafik anschaue. Dies scheint der Grund zu sein, warum die Normalverteilung in der Statistik wichtig ist: smile:

Recommended Posts

[Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm
Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Berechnen Sie die Wahrscheinlichkeit, eine Tintenfischmünze zu sein, mit dem Bayes-Theorem [Python]
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
[Python] Grenzachse des 3D-Graphen mit Matplotlib
Erhöhen Sie die Schriftgröße des Diagramms mit matplotlib
Die Basis der Graphentheorie mit Matplotlib-Animation
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
Zeichnen Sie mit PyQtGraph Teil 5 ein Diagramm. Erhöhen Sie die Y-Achse
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Berechnen Sie das Produkt von Matrizen mit einem Zeichenausdruck?
Wie man zeichnet, indem man die Farbe des Diagramms kontinuierlich mit matplotlib ändert und einfach viele Legenden anordnet
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Holen Sie sich UNIXTIME zu Beginn des heutigen Tages mit einem Befehl
Zusammenfassung des mit einer Geschwindigkeit von einer Sekunde durchgeführten Bildcrawls
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Analysieren Sie das Themenmodell, mit GensimPy3 Romanautor zu werden
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Zeichnen Sie mit NetworkX ein Diagramm
Verknüpfte Komponenten des Diagramms
Zeichnen Sie mit networkx ein Diagramm
Das Bild ist Namekuji
Beweisen wir den Additionssatz einer Dreiecksfunktion, indem wir die Funktion durch eine Funktion in SymPy ersetzen (≠ Substitution).
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Lesen Sie die Koordinaten des Diagramms in der Grafik mit Python-matplotlib (Super-Anfänger)
Eine Methode zum Konvertieren des Bildstils unter Beibehaltung der Farbe
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
[Los] Erstellen Sie einen CLI-Befehl, um die Erweiterung des Bildes zu ändern
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Rufen Sie die URL des von der Jira-Python-Bibliothek erstellten JIRA-Tickets ab
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Eine Geschichte, die die elektronische Bewertung von Prüfungen mit Bilderkennung unterstützt
Ich habe das Bild der Science University auf Twitter mit Word2Vec überprüft.
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Da das Dokcer-Image (1 GB) von OpenJDK11 groß ist, erstellen Sie ein kleines Image (85 MB) mit Alpine Linux + Jlink.
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Zeichne ein Diagramm mit Julia + PyQtGraph (2)
Zeichnen Sie mit matplotlib ein loses Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (1)
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Anrufdiagramm mit PyCallGraph ausgeben
Über die Obergrenze von Threads-max