En la regresión lineal múltiple, ¿por qué una gráfica de puntos predichos no se encuentra en una línea recta?

16

Estoy usando regresión lineal múltiple para describir las relaciones entre Y y X1, X2.

Desde la teoría, entendí que la regresión múltiple supone relaciones lineales entre Y y cada una de X (Y y X1, Y y X2). No estoy usando ninguna transformación de X.

Entonces, obtuve el modelo con R = 0.45 y todo X significativo (P <0.05). Luego tracé Y contra X1. No entiendo por qué los círculos de color rojo que son predicciones del modelo no forman una línea. Como dije antes, esperaba que cada par de Y y X esté ajustado por una línea.

ingrese la descripción de la imagen aquí

La trama se genera en python de esta manera:

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()
Klausos
fuente
1
¿Puedes publicar el código que usaste para la trama / análisis? Las líneas rojas y azules parecen nerviosismo el uno del otro. Por lo tanto, el código detrás de este diagrama podría ayudar a resolver mejor su problema.
Dawny33
Solo esperaría una línea si (i) se supone que el valor del otro predictor es el mismo para cada punto predicho (y si intenta asumir valores diferentes de x 2, entonces obtiene una línea diferente), o ( ii) si usa predicciones para sus datos reales, pero "salida parcial" (es decir, compensa) las variaciones en x 2 , que es para lo que es un gráfico de regresión parcial o un gráfico de variables agregadas . Sin saber exactamente cómo ha construido este argumento, no es posible saber cuál es su problema, como dice @ dawny33x2x2x2
Silverfish
Creo que el comentario de @Silverfish es correcto; en tres dimensiones representa un plano P . Si reduce a dos dimensiones, entonces 'proyecta' el plano en tres dimensiones ( P ) en el plano p . Ej. ( Y , x 1 ) , esta será una línea solo si P es ortogonal al plano ( y , x 1 ) . y=β0+β1x1+β2x2PP(y,x1)P(y,x1)
@ Dawny33: publicado.
Klausos
@f coppens: Gracias. Entonces, ¿por qué la literatura dice que un modelo de regresión lineal múltiple asume relaciones lineales entre Y y cada uno de X (Y y X1, Y y X2)?
Klausos

Respuestas:

33

Suponga que su ecuación de regresión múltiple fue

y^=2x1+5x2+3

donde Y significa "predicho y ".y^y

Ahora tome solo aquellos puntos para los cuales . Entonces, si se trazan y contra x 1 , estos puntos va a satisfacer la ecuación:x2=1y^x1

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

Por lo tanto, deben recostarse en una línea de pendiente 2 y con la intersección 8.y

Ahora tome esos puntos para los cuales . Al trazar y contra x 1 , entonces estos puntos satisfacen:x2=2y^x1

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

Entonces, esa es una línea de pendiente 2 y con la intersección 13. Puedes verificar por ti mismo que si x 2 = 3 obtienes otra línea de pendiente 2 y la intersección y es 18.yx2=3y

Vemos que los puntos con diferentes valores de se ubicarán en diferentes líneas, pero todos con el mismo gradiente: el significado del coeficiente de 2 x 1 en la ecuación de regresión original es que, ceteris paribus, es decir, mantener otros predictores constantes, uno unidad de aumento en x 1 aumenta la respuesta media predicha y por dos unidades, mientras que el significado de la intersección de 3 en la ecuación de regresión fue que cuando x 1 = 0 y x 2 = 0 entonces la respuesta media predicha es 3x22x1x1y^3x1=0x2=03. Pero no todos sus puntos tienen el mismo , lo que significa que se encuentran en líneas con una intersección diferente: la línea solo tendría la intersección 3 para aquellos puntos para los cuales x 2 = 0 . Entonces, en lugar de ver una sola línea, puede ver (si solo hay ciertos valores de x 2 que ocurren, por ejemplo, si x 2 es siempre entero) una serie de "rayas" diagonales. Tenga en cuenta los siguientes datos, en donde y = 2 x 1 + 5 x 2 + 3 .x23x2=0x2x2y^=2x1+5x2+3

Antes de agregar líneas

Aquí hay "rayas" perceptibles. Ahora, si coloreo aquellos puntos para los cuales como círculos rojos, x 2 = 2 como triángulos dorados y x 2 = 3 como cuadrados azules, vemos que se encuentran en tres líneas distintas, todas de pendiente 2, e interceptos en y 8, 13 y 18 como se calculó anteriormente. Por supuesto, si x 2 no estuviera limitado a tomar valores enteros, o la situación se complicara por otras variables predictoras que se incluyen en la regresión, entonces el rayado diagonal sería menos claro, pero aún sería el caso de que cada punto predicho se encuentra en una línea separadax2=1x2=2x2=3yx2basado en los valores de los otros predictores que no se muestran en el gráfico .

Después de agregar líneas

yx1x2y^=2x1+5x2+3yx1x2yx1-axis apunta a su derecha.

Trama 3d

yy

y^x1x2x2y^x1x2yx1 x2yx1

Código para parcelas 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)
Lepisma
fuente
Solo una pequeña pregunta: al decir plano, ¿te refieres también a un plano que puede tener cierta curvatura?
Klausos
Significa un plano "plano". Agregaré una imagen para ilustrar más tarde.
Silverfish
2
Estoy protagonizando esta pregunta solo para poder volver a estas grandes tramas
shadowtalker