Die Chi-Quadrat-Verteilung
Contents
Die Chi-Quadrat-Verteilung¶
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import chi2
Die Chi-Quadrat (\(\chi^2\)) ist eine der wichtigsten kontinuierlichen Wahrscheinlichkeitsverteilungen mit vielen Anwendungen in der statistischen Theorie und Inferenz ([Papula, 2016] s.441).
Sei \(n \gt 0\) eine positive ganze Zahl. Für eine Zufallsvariable, die eine (\(\chi^2\))-Verteilung mit \(n\) Freiheitsgraden (\(df\)) hat, lautet die Wahrscheinlichkeitsdichtefunktion
wobei \(\Gamma\) die Gamma-Funktion bezeichnet. Die (\(\chi^2\))-Verteilung (mit \(n\) Freiheitsgraden) ist gleich der \(\Gamma\)-Verteilung mit den Parametern \((n/2,2)\), d. h. mit Mittelwert und Varianz gleich \(n\) bzw. \(2n\).
from scipy.stats import chi2
import numpy as np
import matplotlib.pyplot as plt
df = [1, 2, 3, 5, 7, 10]
x = np.linspace(0, 14, 1000)
fig, ax = plt.subplots()
for _df in df:
ax.plot(x, chi2.pdf(x, df=_df), label=f"df={_df}")
ax.set_title(
"$\chi^2$-Warscheinlichkeitsdichtefunktion mit unterschiedlichen Freiheitsgraden (df)"
)
ax.legend(fontsize=18)
ax.set_ylim(-0.02, 0.5)
ax.axvline(0, color="k")
<matplotlib.lines.Line2D at 0x16cfd0520>
Grundlegende Eigenschaften von \(\chi^2\)-Kurven
Die Gesamtfläche unter einer \(\chi^2\)
Kurve ist gleich \(1\)
Eine \(\chi^2\)-Kurve beginnt bei \(0\) auf der horizontalen Achse und erstreckt sich unendlich weit nach rechts, wobei sie sich der horizontalen Achse nähert, diese aber nie berührt.
Eine \(\chi^2\)-Kurve ist rechtsschief.
Mit zunehmender Anzahl von Freiheitsgraden sehen \(\chi^2\)-Kurven zunehmend wie normalverteilt aus.
Die Chi-Quadrat-Verteilung in Python¶
Die wichtigsten Funktionen zur Interaktion mit der \(\chi^2\)-Verteilung sind chi2.pdf(), chi2.cdf(), chi2.ppf(), chi2.rvs(). Die Funktion chi2.pdf() liefert die Dichte, die Funktion chi2.cdf() die Verteilungsfunktion, die Funktion chi2.ppf() die Quantilfunktion und die Funktion chi2.rvs() die Zufallsabweichungen.
Wir verwenden die Funktion chi2.pdf(), um die Dichte für die ganzzahligen Werte \(4\) bis \(8\) einer \(\chi^2\)-Kurve mit \(df=7\).
for i in range(4, 9):
print(chi2.pdf(i, df=7))
0.11518072856146785
0.12204152134938738
0.11676521599113948
0.10411977480817192
0.08817913751079275
Wir verwenden chi2.cdf(), um die Fläche unter der Kurve für das Intervall \([0,6]\) und das Intervall \([6,\infty[\) einer\(\chi^2\)-Kurve mit \(df=7\) zu berechnen. Weiter fragen wir Python, ob die Summe der Intervalle \([0,6]\) und \([6,\infty[\) den Wert \(1\) ergibt.
chi2_cdf1 = chi2.cdf(6, df=7)
chi2_cdf1
0.4602506496044429
chi2_cdf2 = 1 - chi2.cdf(6, df=7)
chi2_cdf2
0.539749350395557
chi2_cdf1 + chi2_cdf2
1.0
Wir verwenden chi2.ppf(), um das Quantil für eine bestimmte Fläche (= Wahrscheinlichkeit) unter der Kurve für eine \(\chi^2\)-Kurve mit \(df=7\) zu berechnen, die \(q=0,25\),\(0,5\),\(0,75\) und \(0,999\) entspricht.
chi2.ppf(0.25, df=7)
4.2548521835465145
chi2.ppf(0.5, df=7)
6.345811195521515
chi2.ppf(0.75, df=7)
9.037147547908143
chi2.ppf(0.999, df=7)
24.321886347856854
Wir verwenden die Funktion chi2.rvs(), um \(100.000\) Zufallswerte aus der\(\chi^2\)-Verteilung mit \(df=7\) zu erzeugen. Anschließend zeichnen wir ein Histogramm und vergleichen es mit der Wahrscheinlichkeitsdichtefunktion der \(\chi^2\)-Verteilung mit \(df=7\) (orangefarbene Linie).
# Erzeuge Chi^2 Werte
chi2_rvs = chi2.rvs(df=7, size=10000000)
# Erzeuge x-werte
x = np.linspace(0, 40, num=1000)
# Plotte chi2-Verteilung
fig, ax = plt.subplots()
ax.set_title("Histogramm der $\chi^2$ Verteilung mit 7 Freiheitsgraden")
ax.set_ylabel("Wahrscheinlichkeitsdichte")
ax.hist(chi2_rvs, bins=90, edgecolor="k", density=True)
ax.plot(x, chi2.pdf(x, df=7), linewidth=6, alpha=0.8)
[<matplotlib.lines.Line2D at 0x16d789a80>]