2

我试图重现 Hastie 等人(2008 年)的“统计学习要素”的图 5.4(第 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 值为中心这一事实与 Simon Wood 上周在 R-help 上回答的一个问题有关。出现了一个关于在 gam 公式中使用“+0”的含义的问题,并且(希望这是一个相当准确的总结......)西蒙的回答是假设样条拟合已经从拟合值。我假设他会为绘制例程做出类似的假设。他基本上暗示添加+0只是令人困惑的事情,并建议不要这样做。

“水平移动”与选择结位置以产生相同分位数的结位置有关,并且您的“新数据”在血压范围内均匀分布,而原始数据右偏,中间值为一个不同的位置。这是ns函数的效果,如果您改为为两次运行指定相同的结,则可以“修复”。

于 2012-10-23T02:45:17.100 回答