LOO Lab
Bayesianischer Modellvergleich via Leave-One-Out Cross-Validation
© Dr. Rainer Düsing · Interactive Tools by Claude
LOO-CV fragt: Wie gut sagt mein Modell einen Datenpunkt vorher, den es nicht gesehen hat? Das ist die ehrlichste Frage, die man einem Modell stellen kann — und sie entlarvt Overfitting, das in-sample unsichtbar bleibt.
Übersicht
Full-data-Fit Modell A LOO-Fit Modell B LOO-Fit Datenpunkt LOO-Vorhersage ŷ
Modell A Linear (Grad 1)
elpdloo (A)
Modell B Polynom (Grad 4)
elpdloo (B)
Wozu ein Modell fitten, wenn man es sowieso an den Trainingsdaten misst? LOO fragt ehrlicher: Wie gut generalisiert das Modell auf Punkte, die es nicht kannte? Klicke Weiter → oder starte die Animation, um Punkt für Punkt durch den Datensatz zu gehen.
Wichtig: LOO wird in brms direkt ins Modell-Objekt geschrieben — model.1 <- add_criterion(model.1, c("loo")) — und steht dann für den Vergleich bereit: loo_compare(model.1, model.2, model.3). Kopiere diesen Output unten ein.
Input
Threshold Explorer — Wann ist ein Unterschied belastbar?
–5.0
2.5
Die drei Entscheidungsszenarien
Der Unterschied ist größer als seine Unsicherheit. Das ist ein belastbarer Befund.

Beispiel: elpd_diff = −8.7, SE = 3.4 → Ratio = 2.56 → Modell A ist klar besser.

Empfehlung: Verwende das bessere Modell. Dokumentiere elpd_diff und SE im Bericht. Prüfe inhaltlich, warum das Modell besser passt — das ist die eigentliche Frage.
Die Modelle sind nicht klar trennbar. Das ist kein Fehler — es bedeutet, dass beide die Daten ähnlich gut erklären. Die Messunsicherheit von LOO selbst erlaubt keine klare Entscheidung.

Empfehlung: Wähle nach Parsimonie (einfacheres Modell) oder inhaltlichen Gründen. Berichte die Ähnlichkeit transparent. Erwäge Modell-Stacking via loo_model_weights().
Hohe Pareto-k-Werte zeigen einflussreiche Datenpunkte — dort ist die PSIS-Approximation unzuverlässig. Das LOO-Ergebnis selbst ist mit Vorsicht zu interpretieren.

Empfehlung: Refitte mit reloo() für die problematischen Beobachtungen (echtes LOO, kostet N zusätzliche Fits). Prüfe ob einzelne Ausreißer das Modell dominieren. Berichte den Anteil problematischer k-Werte.
WAIC vs. LOO

WAIC und LOO-CV schätzen dasselbe Ziel: Out-of-Sample-Vorhersagegüte. LOO via PSIS ist robuster und heute der Standard (Vehtari et al. 2017). Der numerische Unterschied zwischen beiden ist in der Praxis meist gering — solange keine extremen k-Werte vorliegen. Verwende LOO, und prüfe die Pareto-k-Diagnostics als Qualitätskontrolle.

brms-Code für den LOO-Workflow
# 1. Modelle fitten (save_pars nötig für LOO/WAIC)
model.1 <- brm(y ~ x, data = d, save_pars = save_pars(all = TRUE))
model.2 <- brm(y ~ x + z, data = d, save_pars = save_pars(all = TRUE))
model.3 <- brm(y ~ x + z + w, data = d, save_pars = save_pars(all = TRUE))

# 2. LOO direkt ins Modell-Objekt schreiben (kein separates loo-Objekt nötig)
model.1 <- add_criterion(model.1, c("loo"))
model.2 <- add_criterion(model.2, c("loo"))
model.3 <- add_criterion(model.3, c("loo"))

# 3. Modelle vergleichen — LOO wird direkt aus den Objekten gelesen
loo_compare(model.1, model.2, model.3) # → elpd_diff, se_diff ← diesen Output in Stufe 2 einfügen

# 4. Pareto-k Diagnostics für ein einzelnes Modell prüfen
print(model.1$criteria$loo) # ← diesen Output optional in Stufe 2 einfügen

# 5. Model Stacking — Ensemble-Gewichte statt ein Modell wählen (optional)
# Fragt: welche Kombination der Modelle sagt neue Daten am besten vorher?
# Gewichte summieren zu 1; Modell mit w ≈ 0 trägt nichts bei.
loo_model_weights(model.1, model.2, model.3) # → z.B. model.1=0.12, model.2=0.73, model.3=0.15

# 6. Bei hohen k-Werten: reloo() direkt ins Objekt
model.1 <- add_criterion(model.1, c("loo"), reloo = TRUE, k_threshold = 0.7)
Nächster Schritt: Ein Modell wurde ausgewählt — jetzt geht es um die inhaltliche Interpretation des Posteriors. → Decision Lab
← Posterior Predictive Check Decision Lab →
LOO Lab — Hilfe
Wozu dieses Tool?
LOO-CV (Leave-One-Out Cross-Validation) misst die Out-of-Sample-Vorhersagegüte eines Bayesianischen Modells. Das Tool hat drei Stufen: Konzept → R-Output analysieren → Entscheidung treffen.

Hinweis: Dieses Tool berechnet kein LOO — das ist im Browser nicht machbar. Du berechnest LOO in R mit add_criterion() und kopierst den Output in Stufe 2.
Stufe 1 — Die Idee
Modell A (linear) vs. Modell B (Polynom Grad 4) auf demselben Datensatz. Jeder Schritt: ein Punkt wird herausgenommen, beide Modelle auf N−1 Punkten refittet, dann die Vorhersage verglichen. Die gestrichelte Linie = LOO-Fit; der ◆ = LOO-Vorhersage; der Pfeil = Residuum.
Stufe 2 — R-Output
LOO in R wird direkt ins Modell-Objekt geschrieben:
model.1 <- add_criterion(model.1, c("loo"))
Danach: loo_compare(model.1, model.2, ...) → Output ins erste Textfeld.
Das zweite Feld (optional) nimmt den Output von print(model.1$criteria$loo) für die Pareto-k Diagnostics eines einzelnen Modells. Beispiel laden zeigt das erwartete Format.
Model Stacking
Model Stacking ist eine Form von Model Averaging — aber ohne Modell-Priors. Statt ein Modell zu wählen, wird ein Ensemble gebildet:

Ŷ = w₁·Ŷ₁ + w₂·Ŷ₂ + w₃·Ŷ₃ (Gewichte summieren zu 1)

Die Gewichte werden direkt aus der LOO-Vorhersageleistung optimiert (Yao et al. 2018). Redundante Modelle bekommen automatisch Gewicht ≈ 0.

vs. klassischem Model Averaging (BMA):
BMA gewichtet nach Modell-Posterior-Wahrscheinlichkeit — Stacking nach Out-of-Sample-Vorhersagegüte. Stacking ist robuster gegen ähnliche Modelle und prior-sensitiver BMA-Probleme (McElreath Kap. 7).
Entscheidungsregel
|elpd_diff| > 2·SE → klarer Unterschied
|elpd_diff| < 2·SE → praktisch ununterscheidbar
k > 0.7 → LOO-Schätzung unsicher, reloo() empfohlen
Voraussetzungen
brms Model Builder (Modellstruktur) · Posterior PPC (Modelldiagnostik)