Nella regressione lineare multipla, perché un diagramma dei punti previsti non giace in linea retta?


16

Sto usando la regressione lineare multipla per descrivere le relazioni tra Y e X1, X2.

Dalla teoria ho capito che la regressione multipla assume relazioni lineari tra Y e ciascuno di X (Y e X1, Y e X2). Non sto usando alcuna trasformazione di X.

Quindi, ho ottenuto il modello con R = 0,45 e tutte le X significative (P <0,05). Quindi ho tracciato Y contro X1. Non capisco perché i cerchi di colore rosso che sono previsioni del modello non formano una linea. Come ho detto prima, mi aspettavo che ogni coppia di Y e X fosse montata da una linea.

inserisci qui la descrizione dell'immagine

La trama viene generata in Python in questo modo:

fig, ax = plt.subplots()
plt.plot(x['var1'], ypred, 'o', validation['var1'], validation['y'], 'ro');
ax.set_title('blue: true,   red: OLS')
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()

1
Puoi pubblicare il codice che hai usato per la trama / analisi. Le linee rosse e blu sembrano nervose l'una dell'altra. Quindi, il codice dietro questa trama potrebbe aiutare a rispondere meglio al tuo problema.
Dawny33,

Ci si aspetterebbe una linea solo se (i) si presume che il valore dell'altro predittore sia lo stesso per ciascun punto previsto (e se si tenta di assumere valori diversi di si ottiene una linea diversa) o (ii) se usi le previsioni per i tuoi dati effettivi, ma "parziali" (ovvero compensa) le variazioni in , che è a che cosa serve un diagramma di regressione parziale o di variabili aggiunte . Senza sapere esattamente come hai costruito questa trama, non è possibile sapere quale sia il tuo problema, come dice @ dawny33x2x2x2
Silverfish,

Penso che il commento di @Silverfish sia corretto; in tre dimensioni rappresenta un piano P . Se riduci a due dimensioni, allora "proietti" il piano in tre dimensioni ( P ) nel piano eg , questa sarà una linea solo se è ortogonale a aereo. y=β0+β1x1+β2x2PPP ( y , x 1 )(y,x1)P(y,x1)

@ Dawny33: pubblicato.
Klausos,

@f coppens: grazie. Allora perché la letteratura afferma che un modello di regressione lineare multipla assume relazioni lineari tra Y e ciascuno di X (Y e X1, Y e X2)?
Klausos,

Risposte:


33

Supponiamo che la tua equazione di regressione multipla fosse

y^=2X1+5X2+3

dove y significa "predetta y ".y^y

Ora prendi solo quei punti per i quali . Poi, se si traccia y contro x 1 , questi punti in grado di soddisfare l'equazione:X2=1y^X1

y^=2X1+5(1)+3=2X1+8

Quindi devono trovarsi su una linea di pendenza 2 e con intercettazione 8.y

Ora prendi quei punti per i quali . Quando si stampa y contro x 1 , quindi questi punti soddisfa:X2=2y^X1

y^=2x1+5(2)+3=2x1+13

Quindi questa è una linea di pendenza 2 e con intercetta 13. Puoi verificare tu stesso che se x 2 = 3 allora ottieni un'altra linea di pendenza 2 e y- intercetta è 18.yx2=3y

Vediamo che punti con valori diversi di troveranno su linee diverse, ma tutti con lo stesso gradiente: il significato del coefficiente di 2 x 1 nell'equazione di regressione originale è che, ceteris paribus cioè mantenendo costanti altri predittori, uno unità di aumento di x 1 aumenta la risposta prevista medio y da due unità, mentre il significato del intercetta 3 nell'equazione di regressione era che quando x 1 = 0 e x 2 = 0 allora la risposta media prevista è 3x22x1x1y^3x1=0x2=03. Ma non tutti i tuoi punti hanno lo stesso , il che significa che si trovano su linee con una diversa intercettazione - la linea avrebbe solo intercettare 3 per quei punti per i quali x 2 = 0 . Quindi, invece di vedere una singola riga, potresti vedere (se si verificano solo determinati valori di x 2 , ad esempio se x 2 è sempre intero) una serie di "strisce" diagonali. Considerare i seguenti dati, dove y = 2 x 1 + 5 x 2 + 3 .x23x2=0x2x2y^=2x1+5x2+3

Prima dell'aggiunta delle righe

Qui ci sono "strisce" percettibili. Ora, se coloro quei punti per i quali come cerchi rossi, x 2 = 2 come triangoli d'oro e x 2 = 3 come quadrati blu, vediamo che giacciono su tre linee distinte, tutte con pendenza 2 e y- intercetti 8, 13 e 18 come sopra calcolato. Naturalmente, se x 2 non fosse costretto a prendere valori interi, o la situazione fosse complicata da altre variabili predittive incluse nella regressione, allora lo striature diagonale sarebbe meno chiaro, ma sarebbe comunque il caso che ciascun punto previsto si trova su una linea separatax2=1x2=2x2=3yx2basato sui valori degli altri predittori non mostrati nel grafico .

Dopo le righe aggiunte

Se si dovesse tracciare un grafico 3-dimensionale di contro x 1 e x 2 , quindi i punti previsti giacciono tutti nel piano bidimensionale di equazione y = 2 x 1 + 5 x 2 + 3 . Il grafico y contro x 1 che ho descritto sopra è una proiezione di quel grafico tridimensionale su due dimensioni: immagina di allinearti con l' asse x 2 in modo da guardarlo dritto verso il basso, mentre l' asse y punta verso l'alto e la x 1yx1x2y^=2x1+5x2+3yx1x2yx1-asse indica a destra.

Trama 3D

yy

y^x1x2x2y^x1x2yx1 x2yx1

Codice per grafici R

library(scatterplot3d)

data.df <- data.frame(
  x1 = c(0,2,4,5,8, 1,3,4,7,8, 0,3,5,6,7),
  x2 = c(1,1,1,1,1, 2,2,2,2,2, 3,3,3,3,3)
)

data.df$yhat <- with(data.df, 2*x1 + 5*x2 + 3)

data1.df <- data.df[data.df$x2==1,]
data2.df <- data.df[data.df$x2==2,]
data3.df <- data.df[data.df$x2==3,]

#Before lines added    
mar.default <- c(5,4,4,2) + 0.1
par(mar = mar.default + c(0, 1, 0, 0)) 
plot(data.df[c("x1","yhat")], main=expression("Predicted y against "*x[1]),
     xlab=expression(x[1]), ylab=expression(hat(y)))

#After lines added
plot(data.df[c("x1","yhat")], main=expression("Predicted y against "*x[1]),
     xlab=expression(x[1]), ylab=expression(hat(y)), pch=".")
points(data1.df[c("x1","yhat")], pch=19, col="red")
abline(lm(yhat ~ x1, data=data1.df), col="red")
points(data2.df[c("x1","yhat")], pch=17, col="gold")
abline(lm(yhat ~ x1, data=data2.df), col="gold")
points(data3.df[c("x1","yhat")], pch=15, col="blue")
abline(lm(yhat ~ x1, data=data3.df), col="blue")

#3d plot
myPlot <- scatterplot3d(data.df, pch=".", xlab=expression(x[1]),
                        ylab=expression(x[2]), zlab=expression(hat(y)),
                        main=expression("Predicted y against "*x[1]*" and "*x[2]))
myPlot$plane3d(Intercept=3, x.coef=2, y.coef=5, col="darkgrey")
myPlot$points3d(data1.df, pch=19, col="red")
myPlot$points3d(data2.df, pch=17, col="gold")
myPlot$points3d(data3.df, pch=15, col="blue")
print(myPlot)

Solo una piccola domanda: dicendo piano intendi anche un piano che può avere qualche curvatura?
Klausos,

Significa un piano "piatto". Aggiungerò un'immagine per illustrarla in seguito.
Silverfish

2
Sto recitando questa domanda solo per poter tornare a queste grandi trame
Shadowtalker,
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.