수동 다항식 확장과 R poly
함수 사용에 대해 다른 예측을 얻는 이유는 무엇 입니까?
set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()
# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)
# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)
내 시도 :
-
인터셉트에 문제가있는 것 같습니다. 모델에 인터셉트가있는 모델을 맞출 때, 즉
-1
모델에 아니요formula
인 경우 두 줄이 동일합니다. 그러나 왜 가로 채지 않고 두 선이 다른가? -
또 다른 “수정”은
raw
직교 다항식 대신 다항식 확장을 사용하는 것입니다. 코드를로 변경하면fit2 = lm(y~ poly(x,degree=2, raw=T) -1)
두 줄을 동일하게 만듭니다. 그런데 왜?
답변
정확하게 알고 있듯이 첫 번째 경우에는 “원시”다항식을 사용하고 두 번째 경우에는 직교 다항식을 사용하기 때문입니다. 따라서 나중의 lm
호출이 다음과 같이 바뀌면 : 와 fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)
에서 동일한 결과를 얻을 수 있습니다. 이유 왜 우리가이 경우에 동일한 결과를 얻을 수는 “사소한”입니다; 우리는 우리가 장착 한 것과 정확히 동일한 모델에 적합합니다 .fit
fit3
fit<-lm(y~.-1,data=x_exp)
두 모델의 모델 행렬이 동일한 지 쉽게 확인할 수 있습니다 all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE
.
더 흥미로운 것은 인터셉트를 사용할 때 왜 동일한 플롯을 얻는 지입니다. 가장 먼저 알아야 할 것은 인터셉트가있는 모델을 피팅 할 때
-
의 경우
fit2
단순히 수직으로 모델 예측을 이동 우리; 곡선의 실제 모양은 동일합니다. -
반면
fit
에 수직 배치 측면에서 다른 선 으로 나타날뿐만 아니라 전체적으로 완전히 다른 모양을 갖는 경우에 인터셉트를 포함합니다 .
기존 플롯에 다음 피팅을 간단히 추가하면 쉽게 알 수 있습니다.
fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)
fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')
OK … 절편을 포함하는 피팅이 같은 반면 절편이없는 피팅이 다른 이유는 무엇입니까? 캐치가 다시 직교성 조건에 있습니다.
의 경우에 fit_b
사용되는 모델 행렬 그램 매트릭스, 비 직교 요소를 포함 crossprod( model.matrix(fit_b) )
대각선 멀리이고; fit2_b
요소 의 경우 직교 형입니다 ( crossprod( model.matrix(fit2_b) )
실제로 대각선입니다).
따라서 fit
인터셉트를 포함하도록 확장 할 때 Gram 매트릭스fit_b
의 비 대각선 항목을 변경 했으므로 결과적으로 전체적으로 (곡률, 인터셉트 등) 전체적으로 달라집니다. 에 의해 제공되는 적합 . 의 경우 에 우리가 절편을 포함하도록 확장 할 때 비록 우리는 이미 우리가 가진 열 직교 열을 추가, 직교성은 도 0의 상수 다항식에 대해 . 이것은 단순히 인터셉트에 의해 적합 선을 수직으로 이동시키는 결과입니다. 이것이 도표가 다른 이유입니다.
흥미로운 질문 은 fit_b
과 fit2_b
같은 이유입니다 . 모든 모델 행렬의 값fit_b
과 면가 fit2_b
가 동일하지 않습니다 . 여기에서 우리는 궁극적 것을 기억해야 하고 동일한 정보를 가지고있다. 는 단지 선형적인 조합 이므로 본질적으로 결과가 동일합니다. 피팅 된 계수에서 관찰 된 차이 는 그것들을 직교하게하기 위해 값들의 선형 재조합을 반영한다 . (G. Grothendieck 도 여기 에 다른 예가 있습니다.)fit_b
fit2_b
fit2_b
fit_b
fit_b