[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]

Ich habe einen Artikel als Memorandum über statistisches Lernen geschrieben. Dieses Mal haben wir die t-Verteilung, die Chi-Quadrat-Verteilung und die F-Verteilung zusammengefasst. Wir haben auch die Schätzung des relevanten Konfidenzintervalls und den F-Test zusammengefasst.

t Verteilung

Dies ist eine kontinuierliche Wahrscheinlichkeitsverteilung, die anstelle der Standardnormalverteilung verwendet wird, wenn der Populationsmittelwert usw. aus einer kleinen Stichprobe mit einer unbekannten Populationsvarianz geschätzt / getestet wird. Bevor wir die t-Verteilung erläutern, betrachten wir zunächst den z-Wert für den Stichprobenmittelwert $ \ bar x $.

z_\bar x=\frac{\bar x -\mu}{\sqrt{\frac{\sigma^2}{n}}}

z folgt einer Standardnormalverteilung, kann jedoch nicht berechnet werden, ohne die Populationsvarianz $ \ sigma ^ 2 $ zu kennen. Es gibt nur wenige Fälle, in denen die Bevölkerungsverteilung realistisch klar ist. Daher wird diese Bevölkerungsverteilung $ \ sigma ^ 2 $ durch die unvoreingenommene Verteilung $ {\ hat {\ sigma}} ^ 2 $ ersetzt. Eine unverzerrte Varianz ist eine Statistik, die durch Multiplikation von $ \ frac {n} {n-1} $ angepasst wird, sodass der erwartete Wert der Stichprobenvarianz $ s ^ 2 $ mit der Populationsvarianz übereinstimmt. Multiplizieren Sie mit $ \ frac {n} {n-1} $, denn wenn n nicht groß genug ist, ist die erwartete Stichprobenvarianz geringer als die Populationsvarianz.

t_\bar x=\frac{\bar x -\mu}{\sqrt{\frac{\hat\sigma^2}{n}}}=\frac{\bar x -\mu}{\sqrt{\frac{s^2}{n-1}}}

Dies ist der t-Wert. Einige Websites usw. werden nicht durch eine unvoreingenommene Verteilung ersetzt, sondern durch eine Stichprobenverteilung (siehe die folgende Formel).

t_\bar x=\frac{\bar x -\mu}{\sqrt{\frac{s^2}{n}}}=\frac{\bar x -\mu}{\frac{s}{\sqrt{n}}}

Übrigens wird $ \ frac {s} {\ sqrt {n}} $ als Standardfehler des Stichprobenmittelwerts bezeichnet. Und dieser t-Wert folgt der folgenden Wahrscheinlichkeitsdichtefunktion.

f(t)=\frac{\Gamma((\nu+1) / 2)}{\sqrt{\nu \pi} \Gamma(\nu / 2)}\left(1+t^{2} / \nu\right)^{-(\nu+1) / 2}

$ \ nu $ ist der Freiheitsgrad ($ n $ -1). $ \ Gamma (\ bull) $ ist eine Gammafunktion, die die Potenz einer komplexen Zahl darstellt. Die Form der t-Verteilung ändert sich abhängig von $ \ nu $.

Nun sehen wir uns die Verteilung an.

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

x = np.linspace(-6, 6, 1000)
fig, ax = plt.subplots(1,1, figsize=(10,7))

linestyles = [':', '--', '-.', '-']
deg_of_freedom = [1, 5, 30]
for df, ls in zip(deg_of_freedom, linestyles):
    ax.plot(x, stats.t.pdf(x, df), linestyle=ls, label=f'df={df}')

ax.plot(x, stats.norm.pdf(x, 0, 1), linestyle='-', label='Standard Normal Distribution')

plt.xlim(-6, 6)
plt.ylim(0, 0.4)
plt.title('t-distribution')
plt.legend()
plt.savefig('t-distribution.png')
plt.show()

t-distribution.png

Sie sehen, dass sich die Form der Verteilung je nach Freiheitsgrad ändert. Und wir können sehen, dass je größer die Stichprobe ist, desto näher an der Standardnormalverteilung liegt.

Schätzung des Konfidenzintervalls des Durchschnittswerts

Verwenden wir diese Verteilung, um das Konfidenzintervall zu schätzen, in dem sich das Populationsmittel $ \ mu $ befindet.

Angenommen, Sie erhalten die folgenden Daten.

data = [np.random.randn() for _ in range(10)]
print(data)
# >>> [-0.14917153222917484, 0.7951720064790415, 0.662152983830839, 0.430521357874449, -2.48235088848113, 0.6166315938744059, 1.055076432212844, 0.7400193126962409, 0.90477126838906, -0.10509107744284621]
print(f"Stichprobenmittelwert:{np.mean(data)}")
# >>>Stichprobenmittelwert:0.24677314572037296
print(f"Probendispersion:{np.var(data)}")
# >>>Probendispersion:0.9702146524752354
print(f"Standardabweichung der Probe:{np.sqrt(np.var(data))}")
# >>>Standardabweichung der Probe:0.9849947474353533

Diese Daten werden basierend auf einer Standardnormalverteilung generiert, sodass der wahre Durchschnitt $ \ mu $ 0 ist. Die Schätzung des Konfidenzintervalls mit 9 und 95% Freiheitsgraden kann durch Modifizieren der Formel wie folgt erhalten werden.

-2.262≤t_{\bar x}≤2.262
-2.262≤\frac{\bar x-\mu}{\frac{s}{\sqrt{n-1}}}≤2.262
\bar x - 2.262\frac{s}{\sqrt{n-1}}≤\mu≤\bar x + 2.262\frac{s}{\sqrt{n-1}}

Da die Daten diesmal nur 10 betragen, habe ich sie mit dem unverzerrten Dispersionssubstitutionstyp berechnet. Zusätzlich wird die Zahl 2.262 aus der t-Verteilungstabelle am Schnittpunkt mit 9 Freiheitsgraden und 2,5% entnommen. Daher besteht eine Wahrscheinlichkeit von 95%, dass die oben genannten Daten einen Bevölkerungsdurchschnitt haben.

bottom = np.mean(data) - 2.262*(np.sqrt(np.var(data))/(np.sqrt(len(data)-1)))
up = np.mean(data) + 2.262*(np.sqrt(np.var(data))/(np.sqrt(len(data)-1)))
print(f'{bottom} ≤ μ ≤ {up}')
# >>> -0.4959128938458835 ≤ μ ≤ 0.9894591852866295

Mit der Bibliothek

bottom, up = stats.t.interval(alpha=0.95, loc=np.mean(data), scale=np.sqrt(np.var(data)/(len(data)-1)), df=len(data)-1)
print(f'{bottom} ≤ μ ≤ {up}')
# >>> -0.49596449533733994 ≤ μ ≤ 0.9895107867780859

Es kann geschätzt werden, dass

Chi-Quadrat-Verteilung

Die Chi-Quadrat-Verteilung ist **, die mehrere Variablen gleichzeitig verarbeiten kann, z. B. die Verteilung der Stichprobenvarianz.

Zunächst wird die Definition des Chi-Quadrat-Werts unten gezeigt.

\chi^2_{(n)}\equiv\sum^n_{i=1}z^2_i=\frac{\sum^n_{i=1}(x_i-\mu)^2}{\sigma^2}

Der Index $ n $ von $ \ chi ^ 2 $ repräsentiert den Freiheitsgrad und basiert auf dem Bevölkerungsdurchschnitt, also $ Freiheitsgrad = n $. Je größer der Freiheitsgrad ist, desto größer ist der Chi-Quadrat-Wert.

Und die Wahrscheinlichkeitsdichtefunktion der Chi-Quadrat-Verteilung ist wie folgt.

f(x ; k)=\frac{1}{2^{k / 2} \Gamma(k / 2)} x^{k / 2-1} e^{-x / 2}

Die Verteilung ist wie folgt.

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.linspace(0, 10, 1000)
fig,ax = plt.subplots(1,1, figsize=(10,7))
 
linestyles = [':', '--', '-.', '-']
deg_of_freedom = [1, 3, 5, 10]
for df, ls in zip(deg_of_freedom, linestyles):
    ax.plot(x, stats.chi2.pdf(x, df), linestyle=ls, label=f'df={df}')

plt.xlim(0, 10)
plt.ylim(0, 1.0)
 
plt.title('chi 2 distribution')
plt.legend()
plt.savefig('chi2distribution.png')
plt.show()

chi2distribution.png

Intervallschätzung der Populationsvarianz

Die obige Formel war der Bevölkerungsdurchschnitt $ \ mu $. Ersetzen wir ihn also durch den Stichprobenmittelwert $ \ bar x $.

\chi^2_{(n-1)}=\frac{\sum^n_{i=1}(x_i-\bar x)^2}{\sigma^2}

Der Freiheitsgrad ist n-1. Wenn hier mit einer unvoreingenommenen Verteilung $ \ hat \ sigma ^ 2 $ ausgedrückt wird,

\chi^2_{(n-1)}=\frac{(n-1)\hat \sigma^2}{\sigma^2}

Und Sie können sehen, dass der Wert von $ \ chi ^ 2 $ proportional zur unverzerrten Varianz ist. Wenn wir also die Populationsvarianz lösen,

\sigma^2=\frac{(n-1)\hat \sigma^2}{\chi^2_{(n-1)}}

Daher kann das Konfidenzintervall der Populationsvarianz geschätzt werden.

Die für die t-Verteilung verwendeten Daten werden verwendet.

data = [np.random.randn() for _ in range(10)]
print(data)
# >>> [-0.14917153222917484, 0.7951720064790415, 0.662152983830839, 0.430521357874449, -2.48235088848113, 0.6166315938744059, 1.055076432212844, 0.7400193126962409, 0.90477126838906, -0.10509107744284621]
print(f"Stichprobenmittelwert:{np.mean(data)}")
# >>>Stichprobenmittelwert:0.24677314572037296
print(f"Probendispersion:{np.var(data)}")
# >>>Probendispersion:0.9702146524752354
print(f"Standardabweichung der Probe:{np.sqrt(np.var(data))}")
# >>>Standardabweichung der Probe:0.9849947474353533

Wenn der Freiheitsgrad 9 beträgt, kann das Konfidenzintervall wie folgt berechnet werden.

\frac{(n-1)\hat \sigma^2}{\chi^2_{(n-1,\alpha/2)}}≤\sigma^2≤\frac{(n-1)\hat \sigma^2}{\chi^2_{(n-1,1-\alpha/2)}}
\frac{(n-1)\hat \sigma^2}{19.02}≤\sigma^2≤\frac{(n-1)\hat \sigma^2}{2.7}

Deshalb,

bottom = ((len(data)-1)*np.var(data, ddof=1))/19.02
up = ((len(data)-1)*np.var(data, ddof=1))/2.7
print(f'{bottom} ≤ σ^2 ≤ {up}')
# >>> 0.5101023409438672 ≤ σ^2 ≤ 3.593387601760131

Eine unverzerrte Dispersion wird erhalten, indem "ddof = 1" von "np.var (Daten, ddof = 1))" gesetzt wird. Sie können die Bibliothek verwenden, um die Werte in der Chi-Quadrat-Verteilungstabelle abzurufen.

chi2_025, chi2_975 = stats.chi2.interval(alpha=0.95, df=len(data)-1)
bottom = ((len(data)-1)*np.var(data, ddof=1))/chi2_975
up = ((len(data)-1)*np.var(data, ddof=1))/chi2_025
print(f'{bottom} ≤ σ^2 ≤ {up}')
# >>> 0.5100281214306344 ≤ σ^2 ≤ 3.5928692971228506

F Verteilung

Die F-Verteilung ist a **, gefolgt von Statistiken, die auf zwei Stichproben basieren, die zufällig aus zwei Populationen ** ausgewählt wurden. Diese Eigenschaft wird verwendet, um zu testen, ob die Varianzen der beiden Populationen, aus denen sie extrahiert werden, gleich sind. In Bezug auf den F-Wert ist der F-Wert ** das Verhältnis von zwei $ \ chi ^ 2 $ -Werten, die zufällig aus zwei Populationen ausgewählt wurden, die einer Normalverteilung folgen **. Es ist wichtig, dass es einer Normalverteilung folgt.

F_{(\nu_1, \nu_2)}=\frac{\chi^2_{(\nu_1)}/\nu_1}{\chi^2_{(\nu_2)}/\nu_2}

Zusätzlich ist die Wahrscheinlichkeitsdichtefunktion wie folgt.

f\left(x ; k_{1}, k_{2}\right)=\frac{\Gamma\left(\frac{k_{1}+k_{2}}{2}\right) x^{\frac{k_{1}-2}{2}}}{\Gamma\left(\frac{k_{1}}{2}\right) \Gamma\left(\frac{k_{2}}{2}\right)\left(1+\frac{k_{1}}{k_{2}} x\right)^{\frac{k_{1}+k_{2}}{2}}}\left(\frac{k_{1}}{k_{2}}\right)^{\frac{k_{1}}{2}}

Die Verteilung ist wie folgt.

fdistribution.png

F Test

Der F-Test testet, dass es einen Unterschied in den Varianzen der beiden Gruppen gibt. Wenn die Bevölkerungsverteilungen ($ \ sigma ^ 2_1, \ sigma ^ 2_2 $) der beiden Gruppen gleich sind, ist der F-Wert wie folgt.

F=\frac{\chi^2_{(\nu_1)}/\nu_1}{\chi^2_{(\nu_2)}/\nu_2}=\frac{\frac{\nu_1\hat \sigma^2_1}{\sigma^2_1}/\nu_1}{\frac{\nu_2\hat \sigma^2_2}{\sigma^2_2}/\nu_2}=\frac{\hat \sigma^2_1}{\hat \sigma^2_2}

Da die Stichproben aus derselben Populationsvarianz stammen, sollte sie sich 1 nähern, wenn kein Unterschied in der Varianz besteht. Wenn umgekehrt der F-Wert größer als 1 ist (normalerweise ist derjenige mit der größeren Dispersion das Molekül), ist die Populationsdispersion wahrscheinlich unterschiedlich.

Ich werde es tatsächlich testen. Versuchen Sie, für die Daten die folgenden Daten zu generieren.

#Stichprobe von 10 japanischen Männern
np.random.seed(1)
Japan = np.round([np.random.normal(64, 9, 10)],1).reshape(10)
jp_var = np.var(Japan, ddof=1)
#Probe 10 amerikanische Männer
np.random.seed(1)
US = np.round([np.random.normal(87, 12, 10)],1).reshape(10)
us_var = np.var(US, ddof=1)
print(f'Unvoreingenommene Verbreitung von Japanisch:{jp_var}')
# >>>Japanische Probendispersion:127.71955555555557
print(f'Unvoreingenommene Zerstreuung der Amerikaner:{us_var}')
# >>>Amerikanische Probendispersion:226.57377777777785
print(f'F-Wert:{us_var/jp_var}')
# >>>F-Wert:1.7739944113665709

F Test ist Nullhypothese: Die Varianzen der beiden Gruppen sind gleich Oppositionshypothese: Es gibt einen Unterschied in der Streuung der beiden Gruppen Wird besorgt. Wenn in der F-Verteilung mit dem Freiheitsgrad (9,9) der gelbe Bereich in der folgenden Grafik dem p-Wert entspricht und der p-Wert 0,05 oder weniger beträgt, wird die Nullhypothese verworfen.

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.linspace(0.000001, 8, 1000)
fig,ax = plt.subplots(1,1, figsize=(10,7))
 
df = (9,9)
ls = '-'
y = stats.f.pdf(x, df[0], df[1])
ax.plot(x, y, linestyle=ls, label=f'k = {df[0]}, {df[1]}')

plt.xlim(0, 8)
plt.ylim(0, 1.0)
plt.fill_between(x, y, 0, where=x>=us_var/jp_var, facecolor='y',alpha=0.5)
plt.title('F distribution')
plt.legend()
plt.savefig('fdistribution_p.png')
print(f'p-value:{stats.f.sf(us_var/jp_var, len(Japan)-1, len(US)-1)}')
# >>> p-value:0.20301975133837194
plt.show()

fdistribution_p.png

Da der p-Wert 0,203 ... ist, was größer als 0,05 ist und die Nullhypothese nicht zurückgewiesen werden kann, scheint es keinen Unterschied in der Varianz der beiden Gruppen zu geben.

Referenz

Recommended Posts

[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]
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
[Einführung in Python] Verwendung des Booleschen Operators (und ・ oder ・ nicht)
[Python2.7] Zusammenfassung der Verwendung von unittest
Zusammenfassung der Verwendung der Python-Liste
[Python2.7] Zusammenfassung der Verwendung des Unterprozesses
Verwendung ist und == in Python
[Python] Was ist Pip? Erläutern Sie die Befehlsliste und deren Verwendung anhand aktueller Beispiele
[Python] Was ist ein formales Argument? So stellen Sie den Anfangswert ein
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Einführung in Python] Wie wird mit der continue-Anweisung wiederholt?
Zusammenfassung der Verwendung von MNIST mit Python
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
[CleanArchitecture mit Python] Wenden Sie CleanArchitecture Schritt für Schritt auf eine einfache API an und versuchen Sie zu verstehen, welche Art von Änderung in der Codebasis stark ist.
[Einführung in die Udemy Python3 + -Anwendung] 27. Verwendung des Wörterbuchs
[Einführung in die Udemy Python3 + -Anwendung] 30. Verwendung des Sets
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
Was ist ein empfohlener Motor? Zusammenfassung der Typen
[Einführung in Python] Was ist die empfohlene Pip-Installationsmethode für das Paketverwaltungssystem?
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
[Python] Zusammenfassung zum Abrufen von Listen und Wörterbuchelementen
Verwendung der Methode __call__ in der Python-Klasse
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Einführung von DataLiner Version 1.3 und Verwendung von Union Append
So bestimmen Sie die Existenz eines Selenelements in Python
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
[Einführung in Python] Was ist Python, die derzeit leistungsstärkste Programmiersprache?
Zusammenfassung der Verwendung von pandas.DataFrame.loc
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
Geben und meinen Sie die Einschränkungsoption in scipy.optimize.minimize
So überprüfen Sie die Speichergröße einer Variablen in Python
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
Zusammenfassung der Verwendung von pyenv-virtualenv
Verwendung von Sternchen (*) in Python. Vielleicht ist das alles? ..
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Zusammenfassung der Verwendung von csvkit
[Python] Verwendung der for-Anweisung. Eine Methode zum Extrahieren durch Angabe eines Bereichs oder von Bedingungen.
Erfahren Sie anhand eines einfachen Regressionsmodells den Ablauf der Bayes'schen Schätzung und die Verwendung von Pystan
Verwenden Sie AWS Lambda, um Nachrichten zu kratzen und LINE regelmäßig über Updates zu informieren [Python]
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
[Python] So legen Sie die Position und Größe der Fensteranzeige von matplotlib fest
Was ist die XX-Datei im Stammverzeichnis eines beliebten Python-Projekts?
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
[Python] Verwendung der Aufzählungsfunktion (Indexnummer und Element extrahieren)
[Einführung in Datenwissenschaftler] Grundlagen der Wahrscheinlichkeit und Statistik ♬ Wahrscheinlichkeits- / Wahrscheinlichkeitsvariable und Wahrscheinlichkeitsverteilung
Einführung des Cyber-Sicherheits-Frameworks "MITRE CALDERA": Verwendung und Schulung
Was für ein Buch ist der meistverkaufte "Python Crash Course" der Welt?
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
[Einführung in Python] Wie verwende ich eine Klasse in Python?
So installieren und verwenden Sie pandas_datareader [Python]
[Pandas] Was ist set_option?
Was für eine Programmiersprache ist Python?
[Python] [Meta] Ist der Python-Typ ein Typ?
Python: Verwendung von Einheimischen () und Globalen ()