[PYTHON] Ich habe versucht zu bestätigen, ob die unvoreingenommene Schätzung der Standardabweichung wirklich unvoreingenommen ist, indem ich "10.000 Mal Münzen geworfen" habe.

Als ich Student [^ major] war, als ich das Gebiet der Statistik in der Mathematik berührte, habe ich das gelernt.

Wenn Sie einige Stichproben aus der Bevölkerung auswählen und daraus Bevölkerungsentwicklungen ableiten ** (Stichprobenerhebung) **

  • Probabilistisch ** repräsentiert der Stichprobenmittelwert den Populationsmittelwert **, aber
  • Ein Maß für ** "Variation", wie z. B. die Standardabweichung **, ist tendenziell weniger wahrscheinlich als das der Population ** in der Stichprobe.

Zusamenfassend,

** Die Standardabweichung der Probe ist kleiner als die Grundgesamtheit **! ΩΩΩ

darüber.

Unmittelbar danach wurde mir die Formel ** "unverzerrte Dispersion" ** beigebracht, die durch $ n -1 $ anstelle der Anzahl der Proben $ n $ geteilt wird. Wollten Sie schon immer mal sicher gehen?

Selbst wenn in einem richtigen algebraischen Beweis gesagt wird, dass "der erwartete Wert der unvoreingenommenen Varianz gleich der Varianz der Bevölkerung ist", ist dies sicherlich der Fall, aber schließlich ** sehe ich keine konkreten Daten [^ Anziehungskraft]. Hast du nicht erlebt, dass es nicht so erfrischend ist **?

** Es gibt jedoch keine Daten, die dies bestätigen **, und angesichts der Verzerrung der Stichprobe ** kann ich nicht sicher sein, ob ich sie ein- oder zweimal berechne ** …….

warte eine Minute. Ist nicht die Kiste (oder das Brett) vor dir ** dafür **? ~~ Ich fühle mich anders. Aber zumindest sollte es nicht da sein, um sich gegenseitig auf ** 5ch ** anzuregen. ~~ Wenn Sie einen Computer haben, können Sie 10.000 Mal Münzen werfen **, weil es ** vor dem Frühstück ** ist.

Eine einfache Frage, die in der Kindheit gestohlen wurde: ** Lass es uns mit der Informatik schlagen **.

[^ major]: Mein Hauptfach war Ghost Studies. [^ Abstraktion]: Mathematik ist eine Studie, die eher die Abstraktion (Generalisierung) als die Konkretheit (Beispiel) betont, daher kann nicht geholfen werden.

Lebe in der virtuellen Welt

Dieses Mal verwenden wir ** Python + JupyterLab **, um die Simulation auszuführen. Es spielt jedoch keine Rolle, was Sie verwenden **. Zur Zeit ** Ich benutze es für geschäftliche Zwecke ** Vor kurzem habe ich seltsamerweise ** Python-Artikel in Qiita veröffentlicht **, also bedeutet es nichts weiter. Also ** Hör jetzt auf, Schlachten und andere verrückte Dinge in Programmiersprachen zu montieren **. Besonders für natürliche Sprachen [^ Englisch].

In[]


import math

import matplotlib.pyplot as plt
import numpy as np

Diesmal wird angenommen, dass die Population einer regelmäßigen Verteilung ** mit einem Mittelwert von 50 und einer Standardabweichung von 10 folgt. Abgesehen davon ist dieses $ \ mathcal {N} (50, 10 ^ 2) $ auch eine ** Definition des Abweichungswerts **. Im Allgemeinen ist nur der Teil "transformiert, so dass der Durchschnitt 50 wird" bekannt, aber der Teil ** Standardabweichung 10 ** ist ** ziemlich wichtig . Dank dessen kann " wie herausragend die Ergebnisse sind **" auf einheitliche Weise diskutiert werden. Darüber hinaus gibt es viele Menschen, die ein lächerliches Missverständnis machen **, dass die Untergrenze 0 und die Obergrenze 100 ** ist, weil sie eine aussagekräftige Zahl wie 50 [^ Abweichung] wählen.

In[]


mu = 50.
sigma = 10.

Die Anzahl der zu extrahierenden Proben beträgt ** 10 **. Es hängt von der Größe der Bevölkerung ab, aber ich denke, dass dies für die Umfrage ** ziemlich klein ** ist. Zu diesem Zeitpunkt wurde gesagt, dass sich mindestens 2000 Menschen in den Samen der Trivia befanden ** Hey, unterscheidet sich dieser Artikel von zu vielen Entgleisungen **? Ich freue mich darauf.

In[]


samples_num = 10

[^ Englisch]: Warum haben Sie eine bestimmte Anzahl von Menschen, die die Unregelmäßigkeiten des Englischen ablehnen, als wären sie die Köpfe der Dämonen? Es ist unangenehm. [^ Abweichung]: Als ich ein Kind war, hatte ich Angst, dass es eine sehr verzerrte Verteilung wäre, wenn ich mich unter den Durchschnitt von 0 auf 50 und über den Durchschnitt von 50 auf 100 transformieren würde. Ich bin alleine.

durchschnittlich

Schauen wir uns zunächst den ** Durchschnitt ** an, einen Index, der als "kein Problem bei der Verwendung (wahrscheinlich) in Stichprobenerhebungen" bezeichnet wird.

In[]


np.random.seed(555)

mean_list = []
for _ in range(10000):
    samples = np.random.normal(mu, sigma, samples_num)
    mean_list.append(np.mean(samples))
mean = np.array(mean_list)

plt.hist(mean, bins=30, density=True, histtype='stepfilled')
plt.title(F'Mean: $\\mu = {np.mean(mean):.3f}$, $\\sigma = {np.std(mean):.3f}$')
plt.show()

mean.png

Infolgedessen betrug der Durchschnitt der Ergebnisse von 10000 Stichprobenerhebungen ** 50,022 **. Da der Durchschnitt der Bevölkerung ** 50 ** beträgt, kann er ** richtig ** geschätzt werden. Ich weiß nicht, ob die Standardabweichung 3.218 groß oder klein ist, aber es ist wahrscheinlich, dass ** mehr Stichproben die Abweichung verringern **.

Standardabweichung

Als nächstes kommt der heutige Protagonist ** Standard Deviation **.

In[]


np.random.seed(913)

std_list = []
for _ in range(10000):
    samples = np.random.normal(mu, sigma, samples_num)
    std_list.append(np.std(samples))
std = np.array(std_list)

plt.hist(std, bins=30, density=True, histtype='stepfilled')
plt.title(F'Standard Deviation: $\\mu = {np.mean(std):.3f}$, $\\sigma = {np.std(std):.3f}$')
plt.show()

std.png

Infolgedessen betrug der Durchschnitt von 10000 Stichprobenerhebungen ** 9,235 **. Die Standardabweichung der Bevölkerung beträgt ** 10 **, daher wird sie sicherlich ** unterschätzt **.

Unvoreingenommene Schätzung der Standardabweichung [^ unvoreingenommen]

Die ** Standardabweichung ** ist die ** (nicht negative) ** Quadratwurzel ** der ** Varianz. Die ** Varianz ** ist der ** Durchschnitt ** der ** "Differenz vom mittleren Quadrat" jeder Daten. $ s = \sqrt{s^2} = \sqrt{\frac{1}{n}\sum_{i = 1}^n(x_i - \overline{x})^2} $ Bei der zufälligen Auswahl von Stichproben ** ist es unwahrscheinlich, dass große oder kleine Werte ausgewählt werden, die zu stark vom Mittelwert abweichen ** (abgesehen von einer gleichmäßigen verteilungsähnlichen Variabilität und einer Scheißverteilung). Was soll ich tun? Es wird unterschätzt.

Der Grund, warum dies passiert, ist, dass, wenn Sie auf ernsthaft geschriebene Bücher und Websites über verschiedene Statistiken verweisen, der Wert durch Teilen durch $ n $ anstelle durch Teilen durch $ n $ erhalten wird, um den Durchschnitt ** $ n -1 $ zu erhalten ** entspricht dem erwarteten Wert ** der Populationsvarianz **. $ u^2 = \frac{1}{n - 1}\sum_{i = 1}^{n}(x_i - \overline{x})^2 = \frac{n}{n - 1}s^2 $

E(u^2) = \sigma^2

Dann ** stimmt der erwartete Wert der Quadratwurzel ** mit der Standardabweichung der Grundgesamtheit überein **? ** Etwas anders **, scheint er nach der folgenden Formel berechnet zu werden. $ D = \sqrt{\frac{n - 1}{2}}\frac{\Gamma\left(\frac{n - 1}{2}\right)}{\Gamma\left(\frac{n}{2}\right)}u = \sqrt{\frac{n}{2}}\frac{\Gamma\left(\frac{n - 1}{2}\right)}{\Gamma\left(\frac{n}{2}\right)}s $

E(D) = \sigma

** Was ist diese Formel **. Übrigens scheint $ \ Gamma (n) = (n -1)! $ Im Bereich der natürlichen Zahlen. ** Ich weiß es nicht **.

Wie auch immer, unter Bezugnahme auf diese Beschreibung werde ich eine Funktion schreiben, um den Koeffizienten von $ s $ zu finden.

In[]


def ustd_coefficient(n):
    try:
        return math.sqrt(n / 2) * math.gamma((n - 1) / 2) / math.gamma(n / 2)
    except OverflowError:
        return math.sqrt(n / (n - 1.5))

In[]


np.random.seed(333)

D_list = []
for _ in range(10000):
    samples = np.random.normal(mu, sigma, samples_num)
    D_list.append(np.std(samples) * ustd_coefficient(len(samples)))
D = np.array(D_list)

plt.hist(D, bins=30, density=True, histtype='stepfilled')
plt.title(F'Unbiased Standard Deviation: $\\mu = {np.mean(D):.3f}$, $\\sigma = {np.std(D):.3f}$')
plt.show()

unbiased_std.png

Infolgedessen betrug der Durchschnitt von 10000 Stichprobenerhebungen ** 10.024 **. Da die Standardabweichung der Bevölkerung ** 10 ** beträgt, scheint es, dass die Standardabweichung der Bevölkerung geschätzt werden kann **.

[^ unvoreingenommen]: Dieser lächerlich lange Satz ist auf die Verwirrung der Begriffe in diesem Bereich zurückzuführen. Wird die Stichprobenvarianz (Standardabweichung) als "Stichprobenvarianz (Stichprobenstandardabweichung)" bezeichnet oder wird die unverzerrte Schätzung als "Stichprobenvarianz (Stichprobenstandardabweichung)" bezeichnet, da sie für Stichprobenerhebungen verwendet wird? Ist die unverzerrte Standardabweichung die "unverzerrte Schätzung der Populationsstandardabweichung" oder die "Quadratwurzel der unverzerrten Schätzung der Populationsvarianz"? Ah, es ist durcheinander.

Median

Ab hier gibt es einen ** Bonus **.

Es scheint, dass Leute, die ein bisschen Statistik beißen, mit Ideen wie ** "Der Durchschnitt ist verdammt! Lassen Sie uns aus der durchschnittlichen Sucht herauskommen!" ** [Quelle] </ sup> gefärbt sind, aber solche Leute wurden entschieden Der ** Medianwert ** wird herausgebracht. Versuchen wir es jetzt auch.

** In der Normalverteilung stimmen Mittelwert und Medianwert überein **, sodass der Medianwert der Bevölkerung ebenfalls 50 ** beträgt.

Ich werde versuchen vorherzusagen, was mit mir passieren wird. Erstens ist ** Median ** ein Wert, der alle Werte in 1: 1 ** unterteilt. Wenn also eine Stichprobe entnommen wird, sind die ** Wahrscheinlichkeit, unter den Median ** der Bevölkerung ** zu fallen ** und die Wahrscheinlichkeit, ** zu überschreiten **, per Definition eindeutig ** gleich **. .. Der Wert, der die Stichprobe in 1: 1 unterteilt, würde also immer noch ** dem der Bevölkerung ** konvergieren.

Lass es uns überprüfen.

In[]


np.random.seed(753)

median_list = []
for _ in range(10000):
    samples = np.random.normal(mu, sigma, samples_num)
    median_list.append(np.median(samples))
median = np.array(median_list)

plt.hist(median, bins=30, density=True, histtype='stepfilled')
plt.title(F'Median: $\\mu = {np.mean(median):.3f}$, $\\sigma = {np.std(median):.3f}$')
plt.show()

median.png

Infolgedessen betrug der Durchschnitt von 10000 Stichprobenerhebungen ** 50.040 **. Da die Medianpopulation erwartungsgemäß ** 50 ** beträgt, kann sie anhand der ** Stichprobe ** korrekt geschätzt werden.

Regelmäßiger Quadrantenbereich

Schauen wir uns zum Schluss den ** regulären Quadrantenbereich ** an. Wie in Vorheriger Artikel bestätigt, stimmen ** Standardabweichung und normaler Quadrantenbereich in der Normalverteilung überein **, also ** Population Der reguläre Quadrantenbereich von beträgt ebenfalls 10 **.

Oh, NumPy hat keine Funktion zum Berechnen des normalen Quadrantenbereichs, also werde ich es nachholen.

In[]


def np_iqr(a, axis=None, out=None, overwrite_input=False, keepdims=False):
    q1 = np.quantile(a, q=0.25, axis=axis, overwrite_input=overwrite_input, keepdims=keepdims)
    q3 = np.quantile(a, q=0.75, axis=axis, overwrite_input=overwrite_input, keepdims=keepdims)
    return np.subtract(q3, q1, out=out)

def np_niqr(a, axis=None, out=None, overwrite_input=False, keepdims=False):
    return np.divide(np.iqr(a, axis=axis, overwrite_input=overwrite_input, keepdims=keepdims), 1.3489795003921634, out=out)

np.iqr = np_iqr
np.niqr = np_niqr

Ich werde versuchen vorherzusagen, was mit mir passieren wird. Erstens ist der ** reguläre Quadrant ** die ** Differenz zwischen den oberen und unteren Quantenkacheln **. Als Extrem der Quantenkacheln ist unter Berücksichtigung des ** Minimums und Maximums ** das ** Stichprobenminimum ** häufig ** größer als das Populationsminimum ** ** * * Wahrscheinlich ist das ** Stichprobenmaximum ** höchstwahrscheinlich ** kleiner ** als das Populationsmaximum **. Das heißt, ** Stichprobenquantile neigen dazu, nach innen von der der Bevölkerung voreingenommen zu sein ** (der Median war nur der mittlere Quantit und wurde nicht beeinflusst). Infolgedessen ist zu erwarten, dass der ** reguläre Quadrantenbereich ** der der Bevölkerung unterschätzt ** wird.

Lass es uns überprüfen.

In[]


np.random.seed(315)

niqr_list = []
for _ in range(10000):
    samples = np.random.normal(mu, sigma, samples_num)
    niqr_list.append(np.niqr(samples))
niqr = np.array(niqr_list)

plt.hist(niqr, bins=30, density=True, histtype='stepfilled')
plt.title(F'Normalized Interquartile Range: $\\mu = {np.mean(niqr):.3f}$, $\\sigma = {np.std(niqr):.3f}$')
plt.show()

niqr.png

Infolgedessen betrug der Durchschnitt von 10000 Stichprobenerhebungen ** 8,640 **. Da der reguläre Quadrantenbereich der Bevölkerung ** 10 ** beträgt, wird er ** wie erwartet ** immer noch ** unterschätzt **.

Nachwort

Wie finden Sie eine unvoreingenommene Schätzung des normalen Quadrantenbereichs?

Recommended Posts

Ich habe versucht zu bestätigen, ob die unvoreingenommene Schätzung der Standardabweichung wirklich unvoreingenommen ist, indem ich "10.000 Mal Münzen geworfen" habe.
Ich habe versucht, Emotionen zu analysieren, ob Hinatazaka 46 wirklich eine "glückliche Aura" ist.
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Ich habe versucht, mit Hilfe des neuronalen Netzes zu überprüfen, ob "Japanisch" nur "unlesbare Schriftarten" wirklich nur von Japanisch gelesen werden können
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
Ich habe versucht, die optimale Route des Traumlandes durch (Quanten-) Tempern zu finden
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [-1]. (Ist der versteckte Bereich wirklich sichtbar?)
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Django super Einführung von Python-Anfängern! Teil 6 Ich habe versucht, die Login-Funktion zu implementieren
Ich dachte ein wenig nach, weil Trace Plot von Stan's Parameter schwer zu sehen ist
Ich habe versucht, eine RESTful-API zu erstellen, indem ich die explosive Fast-API des Python-Frameworks mit MySQL verbunden habe.
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, die Erstellung einer praktischen Umgebung mithilfe der SoftLayer-API der IBM Cloud zu automatisieren
Ich habe versucht, den Verkauf von Spielesoftware mit VARISTA anhand des Artikels von Codexa vorherzusagen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe ein wenig versucht, das Verhalten der Zip-Funktion
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Gibt es ein Geheimnis in der Häufigkeit der Umfangszahlen?
Ich habe versucht, den Sesam für Eingang 2 mit einem einzigen Druck auf die AWS IoT-Taste zu entsperren
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services mit Python zu überprüfen. # 1
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, den Inhalt jedes von Python pip gespeicherten Pakets in einer Zeile zusammenzufassen
Eine kleine süchtig machende Geschichte mit den Berechtigungen des von expdp angegebenen Verzeichnisses (für Anfänger)
[Du musst es wissen! ] Ich habe versucht, eine Python-Umgebung gewinnbringend einzurichten, indem ich die Privilegien von Universitätsstudenten voll ausgenutzt habe.
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt