Scatterplot unter Berücksichtigung von Kontrollvariablen

R - Fragen und Antworten

Vor kurzem wurde mir eine Frage zu einem bestimmten Problem gestellt, welche ich heute mit diesem Post beantworten möchte. Dies ist ein etwas anderes Format und fällt in die Kategorie „Questions and Answers“ – ihr könnt mir eine Frage mailen, die ich auf diesem Wege beantworte. Da der Post also nicht in die „Getting started“-Kategorie fällt, ist er vielleicht schwieriger für Anfänger zu verstehen (ich erkläre nicht mehr jeden Schritt).

Frage

„Hi Thore, ich habe eine Multiple Regression mit einer abhängigen Variable (AV) und sechs unabhängigen (UV). Meine Hypothese bezieht sich allerdings nur auf eine UV; die anderen fünf sind nur Kontrollvariablen.
Ich soll nun einen Scatterplot für dieses Szenario erstellen. Da ich nur an der einen UV interessiert bin, sollte der Plot auch nur diese enthalten. Allerdings reicht hier ein einfacher Plot zwischen AV und der einen UV nicht aus: Da würden die Kontrollvariablen nicht berücksichtigt werden. Wie kann ich also einen Plot von zwei Variablen generieren, der aber die Kontrollvariablen berücksichtigt?“

Antwort

Die Antwort auf die Frage ist in der Tat nicht so einfach und es sind mehrere Schritte notwendig. Bevor wir anfangen, sollte aber noch erwähnt werden, dass der resultierende Plot mit Vorsicht zu genießen ist – er ist in gewisser Hinsicht „künstlich“ und spiegelt keine rellen Daten wider. Denn der Effekt der Kontrollvariablen wird herausgerechnet, was die Daten entsprechend verändert.

Der Effekt, dass mehrere Variablen zum Teil die selben Informationen teilen, ist üblich in vielen Wissenschaften und kann als partielle Redundanz bezeichnet werden (siehe Cohen, Cohen, West, & Aiken, 2003) – eben weil weitere Variablen teils redundante Informationen enthalten, die bereits in den anderen Variablen enthalten sind.

Um genau diesen Effekt durch die Kontrollvariablen herauszurechnen gehen wir folgende Schritte durch:

Erster Schritt

Wir führen eine Regression durch mit der für uns interessanten Variable (im Folgenden UV*) als abhängige Variable und den Kontrollvariablen als Prädiktoren. So errechnen wir den Effekt aller Kontrollvariablen auf unsere UV* (entsprechend die geteilte Varianz der Variablen). Im Umkehrschluss muss also gelten, dass die Residuen dieser Regression keine Varianz mit den Kontrollvariablen teilen. Wir speichern diese Residuen ab, da sie der Teil von UV* sind, bei dem der Effekt der Kontrollvariablen herausgerechnet wurde.

Zweiter Schritt

Basierend auf dam selben Prizip gibt es eine zweite Regression, in der wir unsere letztendliche AV als abhängige Variable nehmen und die Kontrollvariablen als Prädiktoren. Auch hier speichern wir die Residuen ab. Jetzt haben wir zwei verschiedene Vektoren mit Residuen, bei denen wir den Einfluss der Kontrollvariablen kontrolliert (= herausgerechnet) haben.

Dritter Schritt

Zu guter Letzt können wir jetzt den Plot erstellen. Im Übrigen können wir jetzt auch einen partiellen Korrelationskoeffizienten errechnen – einfach die Korrelation zwischen beiden Residuenvektoren.

Beispiel

Im Folgenden gehen wir diese Schritte in einem einfachen Beispiel mit einer Kontrollvariablen durch. Angenommen wir möchten den Einfluss von Erfolg in der Schule (school) auf Kriminalität (delinquency) untersuchen, dabei aber Intelligenz (IQ) berücksichtigen.

Wir erstellen erst einen Beispieldatensatz mit 50 Fällen und schauen, ob die Beziehungen zwischen den Variablen Sinn ergeben. Zusätzlich generieren wir einen Plot, der den direkten Zusammenhang zwischen Schulerfolg und Kriminalität darstellt. Nachdem wir einen Seed für immergleiche Zufallszahlen gesetzt haben (mit z.B. set.seed(1337)) erstellen wir den Datensatz:

IQ <- rnorm(50, 100, 15)
school <- IQ/5 + rnorm(50, 0, 5)
delinquency <- (75 - IQ/2 - school + rnorm(50, 0, 10)) / 5
df <- data.frame(delinquency, IQ, school)

Wir testen die Korrelationen zwischen den Variablen (mit cor(df)) und erstellen einen ersten Plot:

plot(school, delinquency, main="Plot between school achievement and delinquency", xlab="School achievement", ylab="Delinquency")

Nun geht es zu Schritt 1, der Regression zwischen UV* und der Kontrollvariablen. In diesem Beispiel ist IQ die Kontrollvariable und UV* ist Erfolg in der Schule, school.

mdlSchool_IQ <- lm(school ~ IQ)
resSchool <- residuals(mdlSchool_IQ)

Anschließend Schritt 2, die Regression zwischen AV und der Kontrollvariablen:

mdlDelin_IQ <- lm(delinquency ~ IQ)
resDelin <- residuals(mdlDelin_IQ)

Jetzt haben wir beide Vektoren mit den Residuen der jeweiligen Regressionen. Wir können jetzt den Plot erstellen...

plot(resSchool, resDelin,main="Partial plot between school achievement and delinquency controlling for IQ",xlab="Residuals from regression between IQ and school", ylab="Residuals from regression between IQ and delinquency")

...und die (partielle) Korrelation berechnen:

cor(resSchool, resDelin)

Wir sehen, dass die Korrelation zwischen Schulerfolg und Kriminalität schwächer wird, wenn für IQ kontrolliert wird. Dies wird auch nochmal deutlich, wenn man sich den Unterschied zwischen den Regressionen anguckt, einmal ohne IQ als Kontrollvariable und einmal mit:

summary(lm(delinquency ~ school))
summary(lm(delinquency ~ school + IQ))

Voilà! Wir haben einen Scatterplot erstellt, der eine Beziehung zwischen Variablen darstellt und dabei Kontrollvariablen berücksichtigt.

Hier nochmal der gesamte Code:

Add a comment

*Please complete all fields correctly