Die Chi-Quadrat-Verteilung

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

\[\begin{split}f(x) = \begin{cases} 0 & \text{wenn $x \le 0$} \\ \frac{x^{(n/2-1)}e^{-x/2}}{2^{n/2}\Gamma \left(\frac{k}{2}\right)} & \text{wenn $x > 0$} \end{cases} \end{split}\]

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>
../_images/05_Die_Chi_Quadrat_Verteilung_6_1.png

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>]
../_images/05_Die_Chi_Quadrat_Verteilung_22_1.png