Scheinkorrelationen aufdecken in R mit linearen Regressionsmodellen

Weiße Störche

Störche bringen Babies – das wohl bekannteste Beispiel der Statistik für eine klassische Scheinkorrelation. Der Zusammenhang ist tatsächlich statistisch nachweisbar – es handelt sich jedoch (nach heutigem Wissen) nicht um einen Kausalzusammenhang. Auch wenn uns das inhaltlich bekannt ist – wie können wir das statistisch belegen? In anderen Anwendungsfällen wird uns inhaltlich vielleicht nicht so klar sein, ob statistisch signifikante Zusammenhänge auf Scheinkorrelationen beruhen – wir benötigen also ein Vorgehen, das statistisch nachzuweisen.

Scheinkorrelationen aufdecken in R: Praxisbeispiel im Video

Anzahl der Störche hängt signifikant mit Anzahl der Babies zusammen

Die Daten sind fiktiv und, zusammen mit dem sehr knappen R-Code, auf meinem github-Profil zu finden (detecting-spurious-corr.R sowie babies.rds).

Mittel der Wahl sind lineare Regressionsmodelle. Zunächst betrachten wir, wie sich die Anzahl der Störche in einer Region auf die Anzahl der Babies auswirkt:

# Daten laden
babies <- readRDS("babies.rds")

# Lineares Modell: Störche als Prädiktor (unabhängige Variable) für die Anzahl der Babies (abhängige Variable)
mod_storks <- lm(babies ~ storks, data = babies)

# Modellzusammenfassung ausgeben
summary(mod_storks)

Der Zusammenhang ist positiv und signifikant:

Regressionsmodell: Einfluss der Anzahl der Störche in einer Region auf die Anzahl der Babies.

Auf eine Interpretation des Koeffizienten (1.266) verzichten wir, da es sich um fiktive Daten handelt. (Es gibt reale Studien, die tatsächlich einen statistischen Zusammenhang zwischen Störchen und Babies aufzeigen.) Wir könnten nun einfach behaupten, den Nachweis erbracht zu haben, dass Störche tatsächlich Babies bringen.

Der berechtigte Einwand ist nicht weit, dass es auch andere, gut erforschte Theorien darüber gibt, woher die Babies kommen. Das lässt sich gut begründen, jedoch gemäß dem Motto

„In God we trust; all others bring data.“

(frei übersetzt: Wir vertrauen auf Gott; alle anderen sollen gefälligst Daten liefern!)

Dr. W. Edwards Deming

wollen wir uns nicht mit einer Theorie-Diskussion begnügen, sondern datenbasiert arbeiten.

Wenn Störche nicht Babies bringen, wie lässt sich der statistische Zusammenhang erklären?

In unserem Fall heißt das: Wir suchen nach einer Erklärung für den Zusammenhang zwischen Störchen und Babies. Es gibt verschiedene ähnliche Varianten; ich mag die folgende:

Es gibt eine gemeinsame Drittvariable (= Kontrollvariable), die sowohl die Anzahl der Störche als auch die Anzahl der Babies beeinflusst und die es so aussehen lässt, als gäbe es einen Zusammenhang zwischen den beiden Variablen, der in Wirklichkeit nicht besteht.

Wir nennen diese Drittvariable den Industrialisierungsgrad. Je stärker industrialisiert eine Region ist, desto weniger Störche gibt es dort. (Störche leben überwiegend in ländlichen Regionen.) Und je stärker industrialisiert eine Region ist, desto weniger Babies werden dort geboren. In ländlichen Regionen gelten Kinder öfter als Altersvorsorge; die Familien orientieren sich eher an traditionellen Rollenbildern. In stärker industrialisierten städtischen Regionen verfolgen Frauen häufiger eigene Karrieren und bekommen Kinder wenn, dann tendenziell später, und seltener.

Industrialisierungsgrad und Anzahl der Babies

Nehmen wir an, wir haben einen Index, der den Industrialisierungsgrad abbildet. Besteht ein Zusammenhang zur Anzahl der Babies?

mod_ind <- lm(babies ~ industrial, data = babies)
summary(mod_ind)

Ja, wie erwartet ist der Effekt signifikant negativ:

Regressionsmodell: Einfluss des Industrialisierungsgrades auf die Anzahl der Babies in einer Region.

Drittvariablenkontrolle: Störche und Industrialisierungsgrad

So weit, so gut. Wie sieht es nun aus, wenn wir die Anzahl der Störche und den Industrialisierungsgrad in ein gemeinsames Modell packen?

mod_both <- lm(babies ~ storks + industrial, data = babies)
summary(mod_both)

Der Effekt des Industrialisierungsgrades schwächt sich leicht ab, bleibt jedoch deutlich signifikant.

Regressionsmodell: Industrialisierungsgrad und Störche als Prädiktoren für die Anzahl der Babies.

Interessanter ist, was mit dem Effekt der Störche passiert: Der p-Wert von 0,55 liegt weiter über der üblichen Schwelle von 0,05. Das bedeutet: Unter Kontrolle (Berücksichtigung) des Industrialisierungsgrades gibt es keinen Effekt der Anzahl der Störche in einer Region auf die Anzahl der Babies! Damit ist die Scheinkorrelation entlarvt bzw. sichtbar gemacht.

Scheinkorrelationen und Regressionsanalysen: Abschließende Überlegungen

Das Beispiel ist bewusst simpel gehalten. In Projekten mit realen Daten wird man in aller Regel etwas mehr Mühe aufwenden und z. B. die Daten auch grafisch analysieren, um Zusammenhänge zu prüfen (siehe etwa den Beitrag: Regressionsmodelle visualisieren in R: Mit Interaktionseffekten, 3D (ggplot2, plotly)).

Interessant finde ich die Denkweise. Nach meiner Beobachtung wird in der Datenanalyse häufig versucht, das „eine optimale“ Modell zu finden, das Modellvoraussetzungen möglichst gut erfüllt und eine hohe Erklärungskraft / Vorhersagegüte erreicht. Beim hier besprochenen Fall geht es eher darum, Beziehungen zwischen Variablen im Datensatz besser zu verstehen. Die Scheinkorrelation wurde aus dem Vergleich von drei Regressionsmodellen erkannt, nicht nur aus dem letzten. Die wichtigste Frage lautet hierbei: Wie verändern sich Effekte, wenn Variablen ins Modell aufgenommen oder aus dem Modell ausgeschlossen werden? Wären die Modellvoraussetzungen perfekt erfüllt, d. h. wären die Prädiktoren völlig unkorreliert (keine Multikollinearität), dann würden sich Effekte gar nicht verändern. In der Praxis ist das so gut wie nie der Fall. Statt (mehr oder weniger stark) verletzte Voraussetzungen zu bedauern, nutzen wir gerade dieses Phänomen, um unsere Daten zu ergründen.

Dieser Beitrag ist ein Update zu Je mehr Störche, desto mehr Kinder (mit älterem Video aus meiner SPSS-Zeit).

Viel Erfolg mit Euren Analysen!

Einstieg in die Datenanalyse mit R, mit modernen R-Paketen:

Ein Gedanke zu „Scheinkorrelationen aufdecken in R mit linearen Regressionsmodellen“

Freue mich über Kommentare!