Come presentare il guadagno nella varianza spiegata grazie alla correlazione di Y e X?


11

Sto cercando di spiegare (visivamente) la semplice correlazione lineare agli studenti del primo anno.

Il modo classico di visualizzare sarebbe quello di dare un diagramma a dispersione Y ~ X con una linea di regressione diritta.

Di recente, mi è venuta l'idea di estendere questo tipo di grafica aggiungendo alla trama altre 3 immagini, lasciandomi con: la trama a dispersione di y ~ 1, quindi di y ~ x, resid (y ~ x) ~ x e infine di residui (y ~ x) ~ 1 (centrato sulla media)

Ecco un esempio di tale visualizzazione: testo alternativo

E il codice R per produrlo:

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)

Il che mi porta alla mia domanda: apprezzerei qualsiasi suggerimento su come migliorare questo grafico (con testo, segni o qualsiasi altro tipo di visualizzazioni pertinenti). Anche l'aggiunta di un codice R pertinente sarà piacevole.

Una direzione è quella di aggiungere alcune informazioni di R ^ 2 (tramite testo o in qualche modo aggiungendo linee che presentano l'entità della varianza prima e dopo l'introduzione di x) Un'altra opzione è quella di evidenziare un punto e mostrare come è "migliore spiegato "grazie alla linea di regressione. Ogni contributo sarà apprezzato.


1
Allo stesso tempo stai mostrando quanto può essere buona la regressione lineare, per favore mostra anche al tuo pubblico come fallisce in situazioni in cui le relazioni non sono ben descritte da linee rette:require(mlbench) ; cor( mlbench.smiley()$x ); plot(mlbench.smiley()$x)
DWin

Will do Dwin ... :-)
Tal Galili,

Risposte:


4

Ecco alcuni suggerimenti (sulla trama, non su come illustrerei l'analisi di correlazione / regressione):

  • Le due trame univariate che mostri nei margini destro e sinistro possono essere semplificate con una chiamata a rug();
  • Trovo più informativo per mostrare un diagramma di densità di e o un diagramma a scatole, a rischio di essere evocativo dell'idea di un presupposto di bi-normalità che non ha senso in questo contesto;YXY
  • Oltre alla linea di regressione, vale la pena mostrare una stima non parametrica dell'andamento, come un loess (si tratta di buone pratiche e altamente informativo su possibili non linearità locali);
  • I punti potrebbero essere evidenziati (con colori o dimensioni variabili) in base all'effetto leva o alle distanze di Cook, ovvero una di quelle misure che mostrano come i singoli valori influenti si trovano sulla linea di regressione stimata. Secondo il commento di @ DWin e penso che sia meglio evidenziare come i singoli punti "degradano" la bontà di adattamento o inducono una sorta di allontanamento dall'ipotesi di linearità.

Da notare che questo grafico presuppone che X e Y siano dati non accoppiati, altrimenti mi atterrerei a un diagramma di Bland-Altman ( contro ), oltre al grafico a dispersione.( X + Y ) / 2(XY)(X+Y)/2


1

Non rispondere alla tua domanda esatta, ma i seguenti potrebbero essere interessanti visualizzando una possibile trappola di correlazioni lineari basate su una risposta dallo 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)

testo alternativo

La risposta di @Gavin Simpson e @ bill_080 include anche belle trame di correlazione nello stesso argomento.


1

Avrei due grafici a due pannelli, entrambi con la trama xy a sinistra e un istogramma a destra. Nel primo grafico, viene posizionata una linea orizzontale nella media di y e le linee si estendono da questo a ciascun punto, rappresentando i residui dei valori y dalla media. L'istogramma con questo traccia semplicemente questi residui. Quindi nella coppia successiva, il grafico xy contiene una linea che rappresenta l'adattamento lineare e di nuovo linee verticali che rappresentano i residui, che sono rappresentati in un istogramma a destra. Mantenere costante l'asse x degli istogrammi per evidenziare lo spostamento su valori più bassi nell'adattamento lineare rispetto all'adattamento medio.


1

Penso che ciò che proponi sia buono, ma lo farei in tre diversi esempi

1) X e Y sono completamente indipendenti. Rimuovi semplicemente "x" dal codice r che genera y (y1 <-rnorm (50))

2) L'esempio che hai pubblicato (y2 <- x + rnorm (50))

3) Le X sono Y sono la stessa variabile. Rimuovi semplicemente "rnorm (50)" dal codice r che genera y (y3 <-x)

Ciò mostrerebbe più esplicitamente come aumentare la correlazione diminuisca la variabilità nei residui. Dovresti solo assicurarti che l'asse verticale non cambi con ogni grafico, il che può accadere se stai usando il ridimensionamento predefinito.

Quindi potresti confrontare tre grafici r1 vs x, r2 vs x e r3 vs x. Sto usando "r" per indicare i residui dall'adattamento usando rispettivamente y1, y2 e y3.

Le mie abilità di R nella trama sono piuttosto disperate, quindi non posso offrire molto aiuto qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.