Na regressão linear múltipla, por que um gráfico de pontos previstos não se encontra em uma linha reta?

16

Estou usando regressão linear múltipla para descrever as relações entre Y e X1, X2.

Pela teoria, entendi que a regressão múltipla assume relações lineares entre Y e cada um de X (Y e X1, Y e X2). Não estou usando nenhuma transformação do X.

Então, eu peguei o modelo com R = 0,45 e todos os X significativos (P <0,05). Então plotei Y contra X1. Não entendo por que os círculos de cor vermelha que são previsões do modelo não formam uma linha. Como eu disse antes, esperava que cada par de Y e X fosse ajustado por uma linha.

insira a descrição da imagem aqui

O gráfico é gerado em python da seguinte maneira:

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
fonte
1
Você pode postar o código usado para o gráfico / análise. As linhas vermelhas e azuis parecem nervosismo uma da outra. Portanto, o código por trás desse gráfico pode ajudar a responder melhor ao seu problema.
precisa saber é o seguinte
Você esperaria apenas uma linha se (i) o valor do outro preditor for assumido o mesmo para cada ponto previsto (e se você tentar assumir valores diferentes de x 2 , obterá uma linha diferente) ou ( ii) se você usa previsões para seus dados reais, mas "exclui parcialmente" (ou seja, compensa) as variações em x 2 , que é o que serve para um gráfico de regressão parcial ou gráfico de variáveis ​​adicionadas . Sem saber exatamente como você construiu essa trama não é possível saber o que o seu problema é, como @ dawny33 dizx2x2x2
Silverfish
Eu acho que o comentário de @Silverfish está correto; em três dimensões representa um plano P . Se você reduzir para duas dimensões, projeta o plano em três dimensões ( P ) no plano, por exemplo , isso será uma linha somente se for ortogonal ao avião. y=β0+β1x1+β2x2PPP ( y , x 1 )(y,x1)P(y,x1)
@ Dawny33: postado.
Klausos
Coppens @f: Obrigado. Então, por que a literatura diz que um modelo de regressão linear múltipla assume relações lineares entre Y e cada um de X (Y e X1, Y e X2)?
Klausos

Respostas:

33

Suponha que sua equação de regressão múltipla seja

y^=2x1+5x2+3

onde Y significa "previu y ".y^y

Agora pegue apenas os pontos para os quais . Então, se você traçar y contra x 1 , estes pontos irá satisfazer a equação:x2=1y^x1

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

Portanto, eles devem estar em uma linha da inclinação 2 e com o intercepto em 8.y

Agora pegue os pontos para os quais . Quando você plotar y contra x 1 , então estes pontos satisfazer:x2=2y^x1

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

Portanto, essa é uma linha da inclinação 2 e com o intercepto em 13. Você pode verificar por si mesmo que se x 2 = 3 , obtém outra linha da inclinação 2 e o intercepto em y é 18.yx2=3y

Vemos que pontos com valores diferentes de estão em linhas diferentes, mas todos com o mesmo gradiente: o significado do coeficiente de 2 x 1 na equação de regressão original é que, ceteris paribus ou seja, mantendo outros preditores constantes, um aumento de uma unidade na x 1 aumenta a resposta média previsível y por duas unidades, enquanto o significado da intercepção de 3 na equação de regressão foi de que, quando X 1 = 0 e x 2 = 0 , em seguida, a resposta média previsto tem trêsx22x1x1y^3x1=0x2=03. Mas nem todos os seus pontos têm o mesmo , o que significa que eles estão em linhas com uma interceptação diferente - a linha só teria intercepto 3 para os pontos para os quais x 2 = 0 . Então, ao invés de ver uma única linha, você pode ver (se houver apenas certos valores de x 2 que ocorrem, por exemplo, se x 2 é sempre inteiro) uma série de "faixas" diagonais. Considere os seguintes dados, onde y = 2 x 1 + 5 x 2 + 3 .x23x2=0x2x2y^=2x1+5x2+3

Antes das linhas adicionadas

x2=1x2=2x2=3yx2com base nos valores dos outros preditores não mostrados no gráfico .

Após linhas adicionadas

yx1x2y^=2x1+5x2+3yx1x2yx1pontos de eixo à sua direita.

Enredo 3d

yy

y^x1x2x2y^x1x2yx1 x2yx1

Código para gráficos 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)
Silverfish
fonte
Apenas uma pequena pergunta: Ao dizer plano, você também quer dizer um plano que pode ter alguma curvatura?
Klausos
Significa um plano "plano". Vou adicionar uma imagem para ilustrar mais tarde.
Silverfish
2
Estou estrelado por esta questão só para que eu possa voltar a estes grandes parcelas
shadowtalker