Wie kann der Gewinn an erklärter Varianz dank der Korrelation von Y und X dargestellt werden?

11

Ich suche, wie ich Studenten im ersten Jahr (visuell) die einfache lineare Korrelation erklären kann.

Die klassische Art der Visualisierung wäre, ein Y ~ X-Streudiagramm mit einer geraden Regressionslinie zu erstellen.

Vor kurzem kam mir die Idee, diese Art von Grafik zu erweitern, indem ich dem Plot 3 weitere Bilder hinzufügte, so dass ich Folgendes hatte: das Streudiagramm von y ~ 1, dann von y ~ x, resid (y ~ x) ~ x und zuletzt von Residuen (y ~ x) ~ 1 (zentriert auf den Mittelwert)

Hier ist ein Beispiel für eine solche Visualisierung: Alt-Text

Und der R-Code, um es zu erzeugen:

set.seed(345)
x <- runif(50) * 10
y <- x +rnorm(50)


layout(matrix(c(1,2,2,2,2,3 ,3,3,3,4), 1,10))
plot(y~rep(1, length(y)), axes = F, xlab = "", ylim = range(y))
points(1,mean(y), col = 2, pch = 19, cex = 2)
plot(y~x, ylab = "", )
abline(lm(y~x), col = 2, lwd = 2)

plot(c(residuals(lm(y~x)) + mean(y))~x, ylab = "", ylim = range(y))
abline(h =mean(y), col = 2, lwd = 2)

plot(c(residuals(lm(y~x)) + mean(y))~rep(1, length(y)), axes = F, xlab = "", ylab = "", ylim = range(y))
points(1,mean(y), col = 2, pch = 19, cex = 2)

Was mich zu meiner Frage führt: Ich würde mich über Vorschläge freuen, wie dieses Diagramm verbessert werden kann (entweder mit Text, Markierungen oder anderen relevanten Visualisierungen). Das Hinzufügen eines relevanten R-Codes ist ebenfalls hilfreich.

Eine Richtung besteht darin, einige Informationen des R ^ 2 hinzuzufügen (entweder durch Text oder durch Hinzufügen von Linien, die die Größe der Varianz vor und nach der Einführung von x darstellen). Eine andere Option besteht darin, einen Punkt hervorzuheben und zu zeigen, wie es "besser" ist erklärte "dank der Regressionslinie. Jede Eingabe wird geschätzt.

Tal Galili
quelle
1
Gleichzeitig zeigen Sie, wie gut lineare Regression sein kann, und zeigen Sie Ihrem Publikum, wie sie in Situationen fehlschlägt, in denen die Beziehungen nicht durch gerade Linien beschrieben werden:require(mlbench) ; cor( mlbench.smiley()$x ); plot(mlbench.smiley()$x)
DWin
Will do Dwin ... :-)
Tal Galili

Antworten:

4

Hier sind einige Vorschläge (zu Ihrer Darstellung, nicht dazu, wie ich die Korrelations- / Regressionsanalyse veranschaulichen würde):

  • Die beiden univariaten Diagramme, die Sie am rechten und linken Rand anzeigen, können durch einen Aufruf von vereinfacht werden rug().
  • Ich finde es informativer, ein Dichtediagramm von und oder ein Boxplot zu zeigen, das Gefahr läuft, an die Idee einer Bi-Normalitätsannahme zu erinnern, die in diesem Zusammenhang keinen Sinn ergibt .Y.X.Y.
  • Zusätzlich zur Regressionslinie lohnt es sich, eine nicht parametrische Schätzung des Trends wie einen Löss anzuzeigen (dies ist eine gute Praxis und sehr informativ über mögliche lokale Nichtlinearitäten).
  • Punkte können je nach Hebeleffekt oder Kochabstand (mit unterschiedlicher Farbe oder Größe) hervorgehoben werden, dh nach Maßangaben, die zeigen, wie einflussreich einzelne Werte auf der geschätzten Regressionslinie sind. Ich werde @ DWins Kommentar unterstützen und ich denke, es ist besser hervorzuheben, wie einzelne Punkte die Anpassungsgüte "verschlechtern" oder eine Art Abweichung von der Linearitätsannahme hervorrufen.

In diesem Diagramm wird davon ausgegangen, dass X und Y nicht gepaarte Daten sind. Andernfalls würde ich mich zusätzlich zum Streudiagramm an ein Bland-Altman-Diagramm ( gegen ) halten.( X + Y ) / 2(X.- -Y.)(X.+Y.)/.2

chl
quelle
1

Sie können Ihre genaue Frage nicht beantworten, aber die folgenden Fragen könnten interessant sein, indem Sie eine mögliche Gefahr linearer Korrelationen anhand einer Antwort von stackoveflow visualisieren :

par(mfrow=c(2,1))

set.seed(1)
x <- rnorm(1000)
y <- rnorm(1000)
plot(y~x, ylab = "", main=paste('1000 random values (r=', round(cor(x,y), 4), ')',  sep=''))
abline(lm(y~x), col = 2, lwd = 2)

x <- c(x, 500)
y <- c(y, 500)
cor(x,y)
plot(y~x, ylab = "", main=paste('1000 random values and (500, 500) (r=', round(cor(x,y), 4), ')',  sep=''))
abline(lm(y~x), col = 2, lwd = 2)

Alt-Text

Die Antwort von @Gavin Simpson und @ bill_080 enthält auch nette Korrelationsdiagramme zum selben Thema.

daroczig
quelle
1

Ich hätte zwei Diagramme mit zwei Feldern, beide haben das xy-Diagramm links und ein Histogramm rechts. In der ersten Darstellung wird eine horizontale Linie am Mittelwert von y platziert und Linien erstrecken sich von diesem zu jedem Punkt, die die Residuen der y-Werte vom Mittelwert darstellen. Das Histogramm mit diesem Diagramm zeichnet einfach diese Residuen auf. Dann enthält das xy-Diagramm im nächsten Paar eine Linie, die die lineare Anpassung darstellt, und wieder vertikale Linien, die die Residuen darstellen, die in einem Histogramm rechts dargestellt sind. Halten Sie die x-Achse der Histogramme konstant, um die Verschiebung zu niedrigeren Werten in der linearen Anpassung relativ zur mittleren "Anpassung" hervorzuheben.

Mike Lawrence
quelle
1

Ich denke, was Sie vorschlagen, ist gut, aber ich würde es in drei verschiedenen Beispielen tun

1) X und Y sind völlig unabhängig. Entfernen Sie einfach "x" aus dem r-Code, der y generiert (y1 <-rnorm (50)).

2) Das Beispiel, das Sie gepostet haben (y2 <- x + rnorm (50))

3) Die X sind Y sind die gleiche Variable. Entfernen Sie einfach "rnorm (50)" aus dem r-Code, der y (y3 <-x) generiert.

Dies würde expliziter zeigen, wie eine Erhöhung der Korrelation die Variabilität der Residuen verringert. Sie müssen nur sicherstellen, dass sich die vertikale Achse nicht mit jedem Diagramm ändert. Dies kann passieren, wenn Sie die Standardskalierung verwenden.

Sie können also drei Diagramme r1 gegen x, r2 gegen x und r3 gegen x vergleichen. Ich benutze "r", um die Residuen aus der Anpassung mit y1, y2 bzw. y3 anzuzeigen.

Meine R-Fähigkeiten beim Plotten sind ziemlich hoffnungslos, daher kann ich hier nicht viel Hilfe anbieten.

Wahrscheinlichkeitslogik
quelle