首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么gam::step.gam返回NULL?

为什么gam::step.gam返回NULL?
EN

Stack Overflow用户
提问于 2018-03-16 16:39:52
回答 1查看 135关注 0票数 2

关于'gam‘包,尽管help("step.gam")中的示例(如下面所示)工作得很好,从模型中考虑的更平滑的术语's(x,12)’将产生NULL。为什么?

s(x,12)项最终没有包含在模型step.object中.那么,为什么要把它从考虑中删除是一个问题呢?

工作良好:

代码语言:javascript
复制
data(gam.data)
gam.object <- gam(y~x+z, data=gam.data)
step.object <-step.gam(gam.object, scope=list("x"=~1+x+s(x,4)+s(x,6)+s(x,12),"z"=~1+z+s(z,4)))

不太好:

代码语言:javascript
复制
step.object <-step.gam(gam.object, scope=list("x"=~1+x+s(x,4)+s(x,6),"z"=~1+z+s(z,4)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-17 19:47:43

如果您使用trace=2运行代码,

代码语言:javascript
复制
data(gam.data)
gam.object <- gam(y~x + z, data=gam.data)
step.object <- step.Gam(gam.object, scope=list("x"=~1+x+s(x,4)+s(x,6),"z"=~1+z+s(z,4)),
               trace = 2)

它将打印有关算法结果的更多信息:

代码语言:javascript
复制
Start:  y ~ x + z; AIC= 127.7316 
Trial:  y ~  1 + z ; AIC= 234.8821 
Trial:  y ~  s(x, 4) + z ; AIC= 44.0543 
Trial:  y ~  x + 1 ; AIC= 126.5148 
Trial:  y ~  x + s(z, 4) ; AIC= 131.028 
Step:1 y ~ s(x, 4) + z ; AIC= 44.0543 
Trial:  y ~  s(x, 6) + z ; AIC= 43.7495 
Trial:  y ~  s(x, 4) + 1 ; AIC= 43.1799 
Trial:  y ~  s(x, 4) + s(z, 4) ; AIC= 47.1024 
Step:2 y ~ s(x, 4) ; AIC= 43.1799 
Trial:  y ~  s(x, 6) + 1 ; AIC= 42.6681 
Step:3 y ~ s(x, 6) ; AIC= 42.6681 

问题在最后一步,即第三步,由于默认情况下搜索方向是向后的和向前的,它将从复杂性的角度搜索所有的可能性。有两个试验可以做,即s(x,4) + 1s(x,6) + z。然而,这两种方法都是在步骤1中计算的,因此没有进一步计算试验。

通常情况下,当AIC在所有试验中逐步增加时,搜索算法应该终止。在这种情况下,AIC在第2步中下降,导致第3步,而在第3步中没有进行任何尝试,因此该算法没有终止,也没有进一步的计算,从而导致了NULL的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49325683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档