Pakete einlesen¶

In [27]:
# Pakete importieren

import pandas as pd                    # Für Datenanalyse und -verarbeitung mit DataFrames
import numpy as np                     # Für mathematische Operationen (z. B. Mittelwert, Varianz)
import matplotlib.pyplot as plt        # Für einfache Diagramme und Visualisierungen
import seaborn as sns                  # Für schöne, statistisch orientierte Plots (z. B. Histogramme, Boxplots)
from scipy import stats                # Für statistische Tests (t-Test, Levene-Test etc.)
from scipy.stats import ttest_1samp    # Speziell für den t-Test mit einem Stichprobenmittelwert
from sklearn.preprocessing import StandardScaler  # Für Standardisierung von Variablen (z. B. z-Transformation)

Einlesen¶

In [ ]:
# Daten einlesen
df = pd.read_csv("IQ (2).csv", sep=",", decimal=".")
df.columns = df.columns.str.strip().str.replace('"', '')

# Unnötige Indexspalte entfernen (falls vorhanden)
df = df.drop(columns=["Unnamed: 0"], errors="ignore")

# Vorschau
df.head()
Out[ ]:
IQbio IQfoster class
0 82 82 high
1 80 90 high
2 88 91 high
3 108 115 high
4 116 115 high

1) Hypothese¶

H1: Es gibt einen Unterschied zwischen dem Durchschnitts-IQ in Deutschland und dem IQ aus der Stichprobe.

H0: Es gibt keinen Unterschied zwischen dem Durchschnitts-IQ in Deutschland und dem IQ aus der Stichprobe.

2) Voraussetzungen für den t-Tests für eine Stichprobe¶

✓ Die Variable ist min. intervallskaliert -> IQ_bio ist metrisch
✓ Die Variable ist in die Grundgesamtheite normalverteilt -> siehe Histogramm

Prüfung der Normalverteilung mittels Histogramm¶

In [29]:
sns.histplot(df["IQbio"], bins=10, kde=True, color="lightblue", edgecolor="black")
plt.title("Histogramm von IQbio")
plt.xlabel("IQ")
plt.ylabel("Häufigkeit")
plt.show()
No description has been provided for this image

Prüfung der Normalverteilung mittels QQPlot¶

In [30]:
# QQ-Plot mit Normalverteilung als Vergleich
stats.probplot(df["IQbio"], dist="norm", plot=plt)
plt.title("Der IQ der Stichprobe")
plt.grid(True)
plt.show()
No description has been provided for this image

Es liegt eine Normalverteilung vor.

Ergebnis der Auswertung¶

Der DurchschnittsIQ in Deutschland liegt bei 105 IQ-Punkten.

In [ ]:
# T-Test gegen Populationsmittelwert (μ = 105)
t_stat, p_val = ttest_1samp(df["IQbio"], popmean=105)

# Tabelle erstellen
ergebnisse = pd.DataFrame([{
    "Stichprobenmittelwert": f"{df['IQbio'].mean():.2f}",
    "T-Wert": f"{t_stat:.3f}",
    "p-Wert": f"{p_val:.4f}"
}])

# Tabelle anzeigen
print("Ein-Stichproben-t-Test Ergebnisse:")
print(ergebnisse.to_string(index=False))
Ein-Stichproben-t-Test Ergebnisse:
Stichprobenmittelwert T-Wert p-Wert
                95.11 -3.195 0.0036

Es gibt einen Unterschied zwischen dem IQ der Stichprobe und dem DurchschnittsIQ (t(26)= -3.1951, p= 0.003, n= 27).

z-Tranformation¶

In [32]:
# Deskriptive Statistik
desc = df["IQbio"].agg(["count", "mean", "std", "median", "min", "max"])
print("📊 Deskriptive Statistik (IQbio)")
print(desc)
📊 Deskriptive Statistik (IQbio)
count      27.000000
mean       95.111111
std        16.082320
median     94.000000
min        63.000000
max       132.000000
Name: IQbio, dtype: float64

Hinzufügen der Z-Wertezum Datensatz¶

In [33]:
# Z-Transformation (Standardisierung)
scaler = StandardScaler()
df["IQ_Bio_z"] = scaler.fit_transform(df[["IQbio"]])
print(df.head(5))
   IQbio  IQfoster class  IQ_Bio_z
0     82        82  high -0.830780
1     80        90  high -0.957509
2     88        91  high -0.450593
3    108       115  high  0.816699
4    116       115  high  1.323615
In [34]:
# Histogramm der z-transformierten Werte
plt.hist(df["IQ_Bio_z"], bins=4, color="purple", edgecolor="black")
plt.title("Der IQ der Stichprobe – z-transformiert")
plt.xlabel("IQ-Punkte (z-Wert)")
plt.ylabel("Anzahl")
plt.show()
No description has been provided for this image

Ergebnis der Auswertung mit Z-Transformation¶

$$ z = \frac {(x-µ)}{σ} = \frac {(105-95.11)}{16.08} = 0.614$$

In [40]:
# Z-Wert berechnen für den Referenzwert 105
mean_iq = df["IQbio"].mean()
std_iq = df["IQbio"].std()
norm_z = (105 - mean_iq) / std_iq
print(f"Z-Wert für 105: {norm_z:.3f}")

# T-Test gegen den berechneten z-Wert
t_stat, p_val = ttest_1samp(df["IQ_Bio_z"], popmean=norm_z)
n = df["IQbio"].count()

# # Tabelle anzeigen
ergebnisse = pd.DataFrame([{
    "Z-Wert (105)": f"{norm_z:.3f}",
    "n":            n,
    "T-Wert":       f"{t_stat:.3f}",
    "p-Wert":       f"{p_val:.4f}"
}])

print("T-Test für z-transformierte Werte gegen 105:")
print(ergebnisse.to_string(index=False))
Z-Wert für 105: 0.615
T-Test für z-transformierte Werte gegen 105:
Z-Wert (105)  n T-Wert p-Wert
       0.615 27 -3.135 0.0042

4) Aussage¶

Es gibt einen Unterschied zwischen dem IQ der Stichprobe und dem DurchschnittsIQ (t(26)= -3.1951, p= 0.003, n= 27).