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

时间:2018-03-16 16:39:52

标签: r gam

关于' gam'包,虽然下面显示的help("step.gam")中的示例工作正常,但删除了更平滑的术语(x,12)'从模型中考虑产生NULL。为什么呢?

s(x,12)术语最终不会被包含在模型step.object中......那么为什么将它从考虑中移除是一个问题呢?

工作正常:

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

不太好:

step.object <-step.gam(gam.object, scope=list("x"=~1+x+s(x,4)+s(x,6),"z"=~1+z+s(z,4)))

1 个答案:

答案 0 :(得分:1)

如果您使用trace=2

运行代码
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)

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

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 

问题出在最后一步,即步骤3.由于默认情况下搜索方向是向后和向前的,因此它将在复杂性方面搜索一个顺序差异的所有可能性。可以进行两项试验,即s(x,4) + 1s(x,6) + z。但是,这两个都已经在步骤1中计算出来,因此没有进一步计算试验。

通常,搜索算法应在步骤增加期间在所有试验中的AIC时终止。在这种情况下,在步骤2期间AIC减少,这导致步骤3,但是在步骤3中没有进行试验。因此算法不终止并且没有进一步的计算,导致{{1的结果}}