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()
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()
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()
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).