2

Hastie et al (2008) の "Elements of Statistical Learning" の Figure 5.4 (page 147) の左上のプロットを再現しようとしています。

このようにするのは簡単です:

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")

プロットは同じではありません。これがなぜなのか誰にもわかりますか?すべてのフィードバックに感謝します。

4

1 に答える 1

1

それらがy値の異なる値に集中しているという事実は、SimonWoodが先週R-helpで回答した質問に関連していると思います。gamの式で「+0」を使用することの意味について質問がありました。(これがかなり正確な要約になることを期待して...)Simonの答えは、スプラインフィットでは、インターセプト値が適合値。私は彼がルーチンをプロットするために同様の仮定をしただろうと思います。彼は基本的に、+ 0を追加することは単に混乱を招くことを意味し、それを行わないようにアドバイスしました。

「水平シフト」は、結び目位置が等しい分位数を生成するように選択され、「新しいデータ」が血圧の範囲全体に均一に分布しているのに対し、元のデータは中央値で右に歪んでいるという事実に関連しています。別の場所。これはns関数の効果であり、代わりに両方の実行に同じノットを指定した場合は「修正」される可能性があります。

于 2012-10-23T02:45:17.100 に答える