태그 보관물: r

r

수동 다항식 확장에 대해 다른 예측을 받고 R ‘poly’함수를 사용하는 이유는 무엇입니까? 수동 다항식 확장과

수동 다항식 확장과 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)에서 동일한 결과를 얻을 수 있습니다. 이유 우리가이 경우에 동일한 결과를 얻을 수는 “사소한”입니다; 우리는 우리가 장착 한 것과 정확히 동일한 모델에 적합합니다 .fitfit3fit<-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의 상수 다항식에 대해 . 이것은 단순히 인터셉트에 의해 적합 선을 수직으로 이동시키는 결과입니다. 이것이 도표가 다른 이유입니다.

XTX

fitfit2fit2_b

흥미로운 질문fit_bfit2_b같은 이유입니다 . 모든 모델 행렬의 fit_b 과 면가 fit2_b가 동일하지 않습니다 . 여기에서 우리는 궁극적 것을 기억해야 하고 동일한 정보를 가지고있다. 는 단지 선형적인 조합 이므로 본질적으로 결과가 동일합니다. 피팅 된 계수에서 관찰 된 차이 는 그것들을 직교하게하기 위해 값들의 선형 재조합을 반영한다 . (G. Grothendieck 도 여기 에 다른 예가 있습니다.)fit_bfit2_bfit2_bfit_bfit_b


답변