Supponiamo che la tua equazione di regressione multipla fosse
y^= 2 x1+ 5 x2+ 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^= 2 x1+ 5 ( 1 ) + 3 = 2 x1+ 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^= 2 x1+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
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 .
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.
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)