【问题标题】:using ns() for spline prediction使用 ns() 进行样条预测
【发布时间】:2012-10-22 23:28:44
【问题描述】:

我正在尝试重现 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")

剧情不一样。有谁知道这是为什么?非常感谢所有反馈。

【问题讨论】:

  • mdl 不是gam 对象,它是使用glm 而不是gam 创建的。
  • 你的意思是在 plot.gam() 中使用 glm 吗?那应该没问题, plot.gam() 也可以接受 lm 和 glm 对象。

标签: r statistics


【解决方案1】:

我认为他们的 y 值以不同值为中心这一事实与 Simon Wood 上周在 R-help 上回答的一个问题有关。出现了一个关于在 gam 公式中使用“+0”的含义的问题,并且(希望这是一个相当准确的总结......)Simon's answer 是假设样条拟合已经从它们的截距值中减去拟合值。我假设他会为绘制例程做出类似的假设。他基本上暗示添加 +0 只会使事情变得混乱,并建议不要这样做。

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

【讨论】:

  • 感谢您的回答。似乎还有比错过拦截更多的事情(如果我正确理解你的帖子),因为还有一些水平移动。
  • 谢谢,是的,这就是“水平移位”。我仍在研究 y 位移,因为截距没有对齐(基础矩阵的第一行等于零,它将 y 轴上的曲线固定在最小的 x 值,这不仅仅是添加的问题返回拟合回归模型的截距)。
  • 您可能缺少其他协变量的影响。尝试将您的两种方法与仅包含收缩压的更简单模型进行比较。
猜你喜欢
  • 1970-01-01
  • 2019-11-29
  • 2013-09-08
  • 2017-04-22
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
相关资源
最近更新 更多