Seit 2019 im DACH-RaumSeit 2019
50+ Statistik-Experten50+ Experten
Über 1.200 Projekte1.200+ Projekte
Alle StatistikprogrammeAlle Programme
Express möglichExpress
Statistik-Ratgeber

Was ist der Unterschied zwischen statsmodels und scipy in Python?

Python · Maximilian Fuchs · 10. Juni 2026 · 8 Min. Lesezeit

Die kurze Antwort: Wofür steht jedes Paket?

scipy.stats liefert einzelne statistische Funktionen und Tests – schnell, kompakt, ohne viel Overhead. statsmodels schätzt vollständige statistische Modelle mit ausführlichen Ergebnisberichten, Koeffizienten, Konfidenzintervallen und Diagnosewerten. Vereinfacht gesagt: scipy.stats ist der Werkzeugkasten für einzelne Berechnungen, statsmodels ist das Analyseframework für interpretierbare Modelle.

Für Studierende, die eine Abschlussarbeit mit Python auswerten, ist diese Unterscheidung praktisch wichtig: Ein einfacher t-Test oder ein Chi-Quadrat-Test lässt sich bequem über scipy lösen. Sobald Sie aber eine Regressionsanalyse durchführen und die Koeffizienten, Standardfehler und das Bestimmtheitsmaß sauber berichten müssen, führt kein Weg an statsmodels vorbei.

scipy.stats – numerische Bausteine für statistische Tests

SciPy ist primär eine wissenschaftliche Computing-Bibliothek. Als breites Fundament für numerische Algorithmen deckt sie Teilgebiete wie Optimierung, Integration, Interpolation, Eigenwertprobleme und algebraische Gleichungen ab – mit über 600 Beitragenden und mehr als 100.000 abhängigen Repositories einer der meistgenutzten Bausteine im wissenschaftlichen Python-Ökosystem. SciPy baut auf NumPy auf und dient seinerseits als Grundlage für höherstufige Bibliotheken wie scikit-learn.

Das Submodul scipy.stats ist der statistisch relevante Teil davon. Laut der offiziellen Dokumentation umfasst es Wahrscheinlichkeitsverteilungen, zusammenfassende Statistiken, Häufigkeitsstatistiken, Korrelationen, statistische Tests und Kerndichteschätzung. Für Verteilungen stehen generische Klassen für kontinuierliche und diskrete Zufallsvariablen bereit, über die sich Dichtefunktionen, Quantile und Zufallszahlen einheitlich abrufen lassen.

Was scipy.stats typischerweise liefert

  • Einstichproben-, Zweistichproben- und gepaarte t-Tests
  • Chi-Quadrat-Tests und Mann-Whitney-U-Test
  • Pearson- und Spearman-Korrelation
  • Normalverteilungstests (Shapiro-Wilk, Kolmogorov-Smirnov)
  • Verteilungsobjekte mit PDF, CDF und Quantilfunktionen
  • Deskriptive Kennwerte wie Schiefe und Kurtosis

Das Ergebnis einer scipy-Funktion ist typischerweise ein kompaktes Tupel aus Teststatistik und p-Wert – nützlich, aber ohne reichhaltige Modellzusammenfassung. Regression, lineare Modelle und Zeitreihenanalyse nennt die Dokumentation selbst als Themen, die außerhalb des Kernfokus von SciPy liegen.

Gut zu wissen scipy.stats eignet sich hervorragend als Bestandteil größerer Analysepipelines. Wer zum Beispiel in einem Skript schnell einen Normalverteilungstest vor einer ANOVA durchführen möchte, greift auf scipy zurück – und wechselt anschließend zu statsmodels für das eigentliche Modell.

statsmodels – Modellschätzung und Inferenz

statsmodels ist von Grund auf anders konzipiert. Es geht nicht darum, eine einzelne Teststatistik zu berechnen, sondern ein statistisches Modell vollständig zu schätzen, zu diagnostizieren und zu berichten. Der Fokus liegt auf Inferenz: Welche Koeffizienten sind signifikant? Wie gut passt das Modell? Welche Voraussetzungen sind erfüllt?

Die Regressionsfunktionalität von statsmodels zeigt das exemplarisch: Als Modellklassen stehen Ordinary Least Squares, Weighted Least Squares, Generalized Least Squares und GLS mit autoregressiver Fehlerstruktur zur Verfügung – damit steht nicht nur ein einzelner Fit im Mittelpunkt, sondern die Modellannahme über die Fehlerkovarianzstruktur. Das ist ein konzeptionell anderer Ansatz als in scipy.

Was eine typische statsmodels-Ausgabe enthält

  • Koeffizienten mit Standardfehlern, t-Werten und p-Werten
  • Bestimmtheitsmaß R² und adjustiertes R²
  • F-Statistik für den Gesamtmodelltest
  • Konfidenzintervalle für alle Schätzer
  • Diagnosemaße wie AIC, BIC und Log-Likelihood
  • Residualdiagnose und Modellannahmenprüfung

Für eine Abschlussarbeit, in der Ergebnisse nachvollziehbar berichtet und methodisch begründet werden müssen, ist diese Vollständigkeit entscheidend. Wer Python für die statistische Auswertung einer Abschlussarbeit einsetzt, wird für Regressionen, ANCOVA oder Zeitreihenmodelle fast zwangsläufig auf statsmodels zurückgreifen.

Direkter Vergleich: Was kann welches Paket?

scipy.stats vs. statsmodels – Funktionsvergleich
Kriterium scipy.stats statsmodels
Primärer Zweck Einzelne statistische Funktionen & Tests Statistische Modellschätzung & Inferenz
Ergebnisobjekt Kompaktes Tupel (Statistik, p-Wert) Reichhaltiges Modellobjekt mit Summary
t-Test ✓ (direkt, wenig Code) ✓ (über OLS möglich, aber umständlicher)
Lineare Regression Sehr eingeschränkt ✓ OLS, WLS, GLS, robuste Regression
Logistische Regression ✓ GLM mit Logit-Link
Zeitreihenmodelle ✓ ARIMA, SARIMA, VAR u.a.
Verteilungsobjekte ✓ umfangreich (100+ Verteilungen) Eingeschränkt
Normalverteilungstests ✓ Shapiro-Wilk, K-S, Anderson-Darling Teilweise vorhanden
Modellannahmenprüfung Über separate Funktionen ✓ integriert (Residualplots, Diagnosemaße)
Lernaufwand Gering Mittel (mehr API-Konzepte)

Wann nehmen Sie welches Paket?

Die Entscheidung hängt davon ab, was Ihre Analyse leisten muss. Hier eine pragmatische Orientierung für den Forschungsalltag:

Greifen Sie zu scipy.stats, wenn Sie …

  • einen t-Test, Mann-Whitney-U oder Chi-Quadrat-Test durchführen möchten
  • Normalverteilung oder Varianzhomogenität prüfen
  • eine Korrelation (Pearson, Spearman) berechnen
  • mit Wahrscheinlichkeitsverteilungen arbeiten (z. B. Quantile berechnen)
  • schnell ein numerisches Ergebnis in einer größeren Pipeline benötigen

Greifen Sie zu statsmodels, wenn Sie …

  • eine lineare oder logistische Regression schätzen und berichten
  • Koeffizienten mit Konfidenzintervallen und Signifikanzniveaus benötigen
  • Zeitreihenmodelle (ARIMA, SARIMA) aufbauen
  • Modellvergleiche über AIC/BIC durchführen
  • eine Analyse im akademischen Stil dokumentieren müssen
Einfach erklärt Stellen Sie sich scipy.stats als Taschenrechner vor: schnell, präzise, eine Antwort. statsmodels ist eher wie ein Statistiksoftware-Output – komplex, vollständig, interpretierbar. Beides hat seinen Platz, oft sogar im selben Skript.

Einen detaillierten Überblick über das gesamte Python-Ökosystem für die Analyse – von pandas über matplotlib bis hin zu scikit-learn – bietet der Beitrag zu den Python-Tools für die Datenanalyse.

Codebeispiel: t-Test und Regression im Vergleich

Das folgende Beispiel zeigt denselben Datensatz einmal mit scipy (t-Test) und einmal mit statsmodels (OLS-Regression). Beide Vorgehensweisen ergänzen sich in einer typischen Analyse.

Python
import numpy as np
import pandas as pd
from scipy import stats
import statsmodels.api as sm

# Beispieldaten: Testergebnisse zweier Gruppen
np.random.seed(42)
gruppe_a = np.random.normal(loc=75, scale=10, size=50)
gruppe_b = np.random.normal(loc=70, scale=10, size=50)

# --- scipy.stats: Unabhängiger t-Test ---
t_stat, p_wert = stats.ttest_ind(gruppe_a, gruppe_b)
print(f"t-Statistik: {t_stat:.3f}, p-Wert: {p_wert:.3f}")
# Ausgabe: ein kompaktes Tupel – Teststatistik und p-Wert, mehr nicht.

# --- statsmodels: OLS-Regression ---
# Fragestellung: Erklärt die Gruppenzugehörigkeit (0/1) das Testergebnis?
ergebnis = np.concatenate([gruppe_a, gruppe_b])
gruppe_dummy = np.array([1] * 50 + [0] * 50)

X = sm.add_constant(gruppe_dummy)   # Intercept hinzufügen
modell = sm.OLS(ergebnis, X).fit()

print(modell.summary())
# Ausgabe: vollständige Regressionstabelle mit R², F-Statistik,
# Koeffizienten, Standardfehlern, t-Werten, p-Werten, 95%-KI

Der Unterschied in der Ausgabe ist direkt spürbar: scipy gibt zwei Zahlen zurück, statsmodels eine vollständige Modellzusammenfassung. Letztere lässt sich mit wenigen Zeilen direkt in den Methodenteil einer Abschlussarbeit überführen. Wie Sie dabei vorgehen, beschreibt der Beitrag zum t-Test in Python im Detail.

Häufiger Fehler Viele Studierende führen Regressionen über scipy.stats.linregress() durch und wundern sich, warum die Ausgabe so dünn ist. linregress() ist auf einfache bivariate Regression beschränkt und liefert keine vollständige Inferenztabelle. Für alles, was über zwei Variablen hinausgeht, brauchen Sie statsmodels.

Wenn Sie nach der Analyse Ihre Ergebnisse sauber für die Abschlussarbeit aufbereiten möchten, lohnt sich außerdem ein Blick auf den Beitrag zum Export von Python-Ergebnissen.

Fazit: Kein Entweder-oder

scipy.stats und statsmodels sind keine Konkurrenten – sie ergänzen sich. In der Praxis nutzen erfahrene Anwenderinnen und Anwender beide Pakete im selben Skript: scipy für Voraussetzungstests und einfache Kennwerte, statsmodels für das eigentliche statistische Modell.

Für Abschlussarbeiten gilt als Faustregel: Sobald Sie Ergebnisse im Methodenteil berichten und statistisch begründen müssen, ist statsmodels die richtigere Wahl. Für schnelle Zwischenrechnungen und Diagnosetests ist scipy.stats oft die einfachere Option.

Wer unsicher ist, welches Verfahren für die eigene Fragestellung geeignet ist, oder wer Unterstützung bei der Umsetzung in Python benötigt, findet bei QuantExpert kompetente Begleitung: Unsere Python-Hilfe für statistische Auswertungen richtet sich speziell an Studierende und Promovierende, die ihre empirischen Analysen methodisch sauber durchführen möchten.

Python statsmodels scipy Statistische Tests Regressionsanalyse Datenanalyse Abschlussarbeit OLS

Ihr persönlicher Ansprechpartner

Maximilian Fuchs, M. Sc.

Teilen Sie uns mit, wie wir Ihnen helfen können.

  • Persönlicher Ansprechpartner
  • Schnelle Rückmeldung
  • Transparente Preise
  • Schutz Ihrer Daten

Fragen? Einfach anrufen!