Jak przedstawić zysk z wyjaśnionej wariancji dzięki korelacji Y i X?


11

Poszukuję, jak (wizualnie) wyjaśnić studentom pierwszego roku prostą korelację liniową.

Klasycznym sposobem wizualizacji byłoby stworzenie wykresu rozproszenia Y ~ X z prostą linią regresji.

Ostatnio wpadłem na pomysł rozszerzenia tego typu grafiki, dodając do wykresu 3 kolejne obrazy, pozostawiając mi: wykres rozproszenia y ~ 1, następnie y ~ x, res (y ~ x) ~ x i na koniec reszt (y ~ x) ~ 1 (wyśrodkowany do średniej)

Oto przykład takiej wizualizacji: alternatywny tekst

I kod R, aby go wyprodukować:

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)

Co prowadzi mnie do mojego pytania: Byłbym wdzięczny za wszelkie sugestie dotyczące ulepszenia tego wykresu (za pomocą tekstu, znaków lub innego rodzaju odpowiednich wizualizacji). Przydatne będzie również dodanie odpowiedniego kodu R.

Jednym z kierunków jest dodanie niektórych informacji o R ^ 2 (tekstem lub w jakiś sposób przez dodanie linii przedstawiających wielkość wariancji przed i po wprowadzeniu x) Inną opcją jest wyróżnienie jednego punktu i pokazanie, jak to jest „lepsze wyjaśnił „dzięki linii regresji. Wszelkie uwagi będą mile widziane.


1
Jednocześnie pokazujesz, jak dobra może być regresja liniowa, pokaż także publiczności, jak zawodzi w sytuacjach, w których relacje nie są dobrze opisane liniami prostymi:require(mlbench) ; cor( mlbench.smiley()$x ); plot(mlbench.smiley()$x)
DW

Will Do Dwin ... :-)
Tal Galili

Odpowiedzi:


4

Oto kilka sugestii (dotyczących twojego wykresu, a nie tego, jak zilustruję analizę korelacji / regresji):

  • Dwa jednobiegunowe wykresy pokazane na prawym i lewym marginesie można uprościć za pomocą wezwania do rug();
  • XY
  • Oprócz linii regresji warto pokazać nieparametryczne oszacowanie trendu, takie jak less (jest to dobra praktyka i bardzo dobrze informuje o możliwych lokalnych nieliniowościach);
  • Punkty mogą być podświetlone (z różnym kolorem lub rozmiarem) zgodnie z efektem dźwigni lub odległościami Cooka, tj. Dowolnymi z tych miar, które pokazują wpływ poszczególnych wartości na szacowaną linię regresji. Zastanowię się nad komentarzem @ DWin i myślę, że lepiej jest podkreślić, w jaki sposób poszczególne punkty „degradują” dobroć dopasowania lub indukują pewnego rodzaju odstępstwo od założenia liniowości.

(XY)(X+Y)/2


1

Nie odpowiadając na dokładne pytanie, ale następujące mogą być interesujące, wizualizując jeden z możliwych pułapek korelacji liniowych na podstawie odpowiedzi z stackoveflow :

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)

alternatywny tekst

Odpowiedzi @Gavina Simpsona i @ bill_080 zawierają również ładne wykresy korelacji w tym samym temacie.


1

Miałbym dwa wykresy dwu-panelowe, oba mają wykres xy po lewej i histogram po prawej. Na pierwszym wykresie linia średnia jest umieszczana na środku y, a linie rozciągają się od tego do każdego punktu, reprezentując resztki wartości y ze średniej. Histogram z tym po prostu rysuje te resztki. Następnie w następnej parze wykres xy zawiera linię reprezentującą dopasowanie liniowe i ponownie linie pionowe reprezentujące reszty, które są przedstawione na histogramie po prawej stronie. Utrzymuj stałą oś x histogramów, aby podkreślić przesunięcie do niższych wartości w dopasowaniu liniowym w stosunku do średniego „dopasowania”.


1

Myślę, że to, co proponujecie, jest dobre, ale zrobiłbym to w trzech różnych przykładach

1) X i Y są całkowicie niezwiązane. Po prostu usuń „x” z kodu r, który generuje y (y1 <-rnorm (50))

2) Opublikowany przykład (y2 <- x + rnorm (50))

3) X są Y są tą samą zmienną. Po prostu usuń „rnorm (50)” z kodu r, który generuje y (y3 <-x)

Wyraźniej pokazałoby to, w jaki sposób zwiększenie korelacji zmniejsza zmienność reszt. Musisz tylko upewnić się, że oś pionowa nie zmienia się z każdym wykresem, co może się zdarzyć, jeśli używasz domyślnego skalowania.

Można więc porównać trzy wykresy r1 vs x, r2 vs x i r3 vs x. Używam „r”, aby wskazać reszty z dopasowania, używając odpowiednio y1, y2 i y3.

Moje umiejętności R w spiskowaniu są dość beznadziejne, więc nie mogę tutaj zaoferować dużej pomocy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.