다중 선형 회귀 분석에서 예측 된 점의 플롯이 직선에 있지 않은 이유는 무엇입니까?


16

Y와 X1, X2 사이의 관계를 설명하기 위해 다중 선형 회귀를 사용하고 있습니다.

이론으로부터 나는 다중 회귀가 Y와 X 각각 (Y와 X1, Y와 X2) 사이의 선형 관계를 가정한다는 것을 이해했습니다. X 변환을 사용하지 않습니다.

따라서 R = 0.45 및 모든 중요 X (P <0.05)의 모델을 얻었습니다. 그런 다음 X1에 대해 Y를 플로팅했습니다. 모델을 예측하는 빨간색 원이 선을 형성하지 않는 이유를 이해할 수 없습니다. 앞에서 말했듯이, Y와 X의 각 쌍은 한 줄로 맞춰질 것으로 예상했습니다.

여기에 이미지 설명을 입력하십시오

플롯은 파이썬에서 다음과 같이 생성됩니다.

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
플롯 / 분석에 사용한 코드를 게시 할 수 있습니까? 빨간색과 파란색 선은 서로 지터처럼 보입니다. 따라서이 줄거리 뒤에 있는 코드 는 문제를 더 잘 해결하는 데 도움이 될 수 있습니다.
Dawny33

(i) 다른 예측 변수 의 값이 각 예측 포인트에 대해 동일하다고 가정 한 경우 (그리고 다른 값을 가정하면 다른 선을 얻는 경우) 또는 (ii) 실제 데이터에 대해 예측을 사용하지만 의 변동을 "일부 출력"(즉, 보상)하는 경우 , 부분 회귀 플롯 또는 추가 된 변수 플롯 에 대한 것입니다. @ dawny33 말하는대로, 그것은 당신의 문제가 무엇인지 알 수는 없습니다이 플롯을 구축 한 정확히 모른 채x2x2x2
좀 벌레

@Silverfish의 의견은 정확하다고 생각합니다. 3 차원에서 는 평면을 나타냅니다 . 2 차원으로 축소하면 3 차원 평면 ( )을 예를 들어 평면으로 '투영'합니다 . 이는 가 평면. P P ( y , x 1 ) P ( y , x 1 )y=β0+β1x1+β2x2PP(y,x1)P(y,x1)

@ Dawny33 : 게시
클라우스

@f coppens : 감사합니다. 그렇다면 왜 다중 선형 회귀 모델이 Y와 X 각각 (Y와 X1, Y와 X2) 사이에 선형 관계를 가정한다고 말하는가?
클라우스

답변:


33

다중 회귀 방정식이

y^=2x1+5x2+3

여기서, Y는 수단 "예측 Y를 ".y^y

이제 점만 취하십시오 . 당신이 플롯 경우 Y를 상대로 X 1 , 이러한 점은 방정식을 만족 :x2=1y^x1

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

따라서 경사 2의 선과 절편 8이 있어야합니다 .y

이제 점을 취하십시오 . 당신이 플롯하면 Y를 상대로 X 1 , 다음, 이러한 점은 만족 :x2=2y^x1

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

이것은 2 번 경사면과 절편 13입니다. x 2 = 3 이면 또 다른 2 번 경사면과 y 절편이 18 인지 스스로 확인할 수 있습니다 .와이x2=3y

우리는 의 다른 값을 가진 점 들이 다른 선에 놓여 있지만 모두 동일한 그래디언트를 갖는 것을 볼 수 있습니다 . 원래 회귀 방정식에서 2 x 1 의 계수의 의미는 ceteris paribus, 즉 다른 예측 변수를 일정하게 유지한다는 것입니다. 의 단위 증가 X 1 이 증가 된 예측 평균 응답 Y 의 절편의 의미있는 동안 두 개의 유닛에 의하여, 3 회귀 식 일 때 그 X (1) = 0X 2 = 0이 그 예측 된 평균 응답이 3x22x1x1y^3x1=0x2=03. 그러나 모든 포인트가 동일한 갖는 것은 아닙니다. 즉, 다른 절편이있는 선에 놓여 있음을 의미합니다. 선은 x 2 = 0 인 점에 대해 3 만 인터셉트 합니다. (의 특정 값이있는 경우에 따라서가 아니라 하나의 선을 보는 것보다, 당신은 볼 수 있습니다 X 경우에 발생할 예를 들어, X 2는 정수 항상) 대각선 "줄무늬"일련의. 여기서, 다음의 데이터가 있다면 , Y는 = 2 X 1 + 5 X 2 + 3 .x23x2=0x2x2y^=2x1+5x2+3

줄을 추가하기 전에

x2=1x2=2x2=3yx2그래프에 표시되지 않은 다른 예측 변수의 값을 기준으로합니다 .

줄이 추가 된 후

yx1x2y^=2x1+5x2+3yx1x2yx1축은 오른쪽을 가리 킵니다.

3d 플롯

yy

y^x1x2x2y^x1x2yx1 x2yx1

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

2
나는이 질문을 주연으로하여이 위대한 음모로 되돌아 갈 수 있습니다
shadowtalker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.