2012-10-22 4 views
2

Hastie 외 (2008)의 "통계 학습 요소"의 그림 5.4 (147 페이지)의 왼쪽 위 플롯을 재현하려고합니다.스플라인 예측을 위해 ns() 사용

library(splines) 
library(gam) 
sa=read.table("http://www-stat.stanford.edu/~tibs/ElemStatLearn/datasets/SAheart.data", 
    sep=",",head=T,row.names=1) 
mdl=glm(chd~ns(sbp,4)+ns(tobacco,4)+ns(ldl,4)+famhist+ns(obesity,4)+ns(age,4),data=sa,family=binomial()) 
plot.gam(mdl,terms="ns(sbp, 4)") 

원하는 플롯을 제공합니다

은 이런 식으로 할 수있을만큼 간단합니다. 그러나

, 내가 직접 접근 방식의 내 원유 이해하고 적용하려고하는 경우 :

xvar=seq(min(sa$sbp),max(sa$sbp),length.out=200) 
basis=ns(xvar,4) 
sbpnames=c("ns(sbp, 4)1", "ns(sbp, 4)2", "ns(sbp, 4)3", "ns(sbp, 4)4") 
plot(xvar,basis%*%mdl$coef[sbpnames],type="l") 

플롯이 동일하지입니다. 왜이 사람인지 알 수 있습니까? 모든 의견은 높이 평가했습니다.

+0

'mdl'은'gam' 객체가 아니며,'gamm'이 아닌'glm'을 사용하여 생성됩니다. – mnel

+0

당신은 plot.gam()에서 glm의 사용을 의미합니까? plot.gam()은 lm과 glm 객체를 받아 들일 수 있습니다. –

답변

1

저는 그들이 y 값의 다른 값에 집중되어 있다는 사실은 사이먼 우드가 지난주에 R 도움말에 응답 한 질문과 관련이 있다고 생각합니다. 게이의 수식에 '+0'을 사용했을 때의 의미에 대해 질문했습니다. (이 사실이 합리적으로 정확한 요약이되기를 바랬습니다 ...) Simon's answer은 스플라인 피트에 맞음에서 빼기 값을 빼기로 가정했습니다. 값. 나는 루틴을 계획 할 때 비슷한 가정을했다고 가정한다. 그는 기본적으로 +0을 추가하는 것은 혼란스러운 일이었고하지 말 것을 권유했습니다.

"수평 이동"은 매듭 위치가 매듭 위치에 대해 동일한 분위를 만들기 위해 선택되고 "새 데이터"가 혈압 범위에 균일하게 분포되어있는 반면, 원래 데이터는 오른쪽으로 비뚤어졌습니다 다른 위치에있는 중앙값으로 이것은 ns 함수의 효과이며 두 실행에 대해 동일한 매듭 점을 지정하면 "고정"될 수 있습니다.

+0

답변 해 주셔서 감사합니다. 약간의 수평 이동이 있다는 점에서 누락 차단보다 더 많은 일이 일어나고있는 것처럼 보입니다. –

+0

"수평 이동"에 대한 답변이었습니다. 절편이 줄 지어 있지 않기 때문에 Y 축 이동을 계속하고 있습니다. (기본 행렬은 가장 작은 x 값에서 y 축의 곡선을 고정시키는 첫 번째 행과 동일한 0을 가지며, 단지 더하기 회귀 분석 모델의 절편을 되 돌린다). –

+0

다른 공변량의 효과가 누락되었을 수 있습니다. 수축기 혈압만을 포함하는보다 단순한 모델로 두 가지 방법을 비교해보십시오. –