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


10

수동 다항식 확장과 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)두 줄을 동일하게 만듭니다. 그런데 왜?


4
이것은 귀하의 질문에서 벗어난 주제이지만 종종 논평에 매우 개방적입니다. 코드를 읽을 때 가장 먼저 눈에 띄는 것은 사용 =하고 <-일관되지 않은 할당입니다. 나는 이것을 정말로하지 않을 것입니다. 정확히 혼란 스럽지는 않지만 코드에 많은 시각적 노이즈를 추가하여 아무런 이점이 없습니다. 당신은 당신의 개인 코드에 사용하기 위해 하나 또는 다른 하나에 정착하고 그것을 고수해야합니다.
Matthew Drury 17 년

코딩에 도움을 주셔서 감사합니다! 질문 수정. @MatthewDrury
Haitao Du

3
<-번거 로움을 덜어 주는 임의의 후속 팁 : alt+-.
JAD

코딩 팁 덕분에 @JarkoDubbeldam. 나는 키보드 단축키를 좋아한다
Haitao Du 17

답변:


12

정확하게 알고 있듯이 첫 번째 경우에는 "원시"다항식을 사용하고 두 번째 경우에는 직교 다항식을 사용하기 때문입니다. 따라서 나중의 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의 상수 다항식에 대해 . 이것은 단순히 인터셉트에 의해 적합 선을 수직으로 이동시키는 결과입니다. 이것이 도표가 다른 이유입니다. XTXfitfit2fit2_b

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


큰 답변을 주셔서 감사합니다. 최종 그래프의 경우 @kjetilb halvorsen에서 배웠습니다. 이것을 설명하는 또 하나의 추상적 인 방법은 모델 자체가 특정 선형 부분 공간, 즉 디자인 매트릭스에 의해 정의 된 열 공간에만 의존한다는 것입니다. 그러나 매개 변수는이 부분 공간뿐만 아니라 사용 된 특정 변수, 즉 열 자체에 의해 주어진 부분 공간에 기초합니다. 예를 들어, 모델의 예측은 선택한 기준이 아닌 선형 부분 공간에만 의존합니다.
Haitao Du

당신이 신경 쓰지 않기를 바랍니다, 나는 조금 다시 포맷 ..
Haitao Du

@ hxd1011 : 전혀 문제가 없습니다. 시간을내어 "빗질"해 주셔서 감사합니다.
usεr11852
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.