加载VGAM包时,mgcv中的s()不起作用

时间:2013-12-19 23:45:00

标签: r mgcv vgam

这个

x <- rnorm(100)
y <- rnorm(100) 
gam(y ~ s(x))
## Family: gaussian 
## Link function: identity 

## Formula:
## y ~ s(x)

## Estimated degrees of freedom:
## 1  total = 2 

## GCV score: 0.8116283
加载VGAM包时

分解:

library(VGAM)
gam(y ~ s(x))
##Error: $ operator is invalid for atomic vectors

两者都实现s()功能,但这不应该发生吗?这是mgcvVGAM包中的错误吗?

1 个答案:

答案 0 :(得分:4)

mgcv:gam调用mgcv:interpret.gam这是失败的地方。

interpret.gam似乎解析了特殊函数的公式,包括's',然后在公式的环境中计算s(x)。这意味着它将从呼叫者那里找到当前的's'。这可能会返回gam不喜欢的内容。

你无法解决这个问题:

> gam(y ~ mgcv::s(x))
Error in model.frame.default(formula = y ~ mgcv::s(x), drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'mgcv::s(x)'
> gam(y ~ mgcv:::s(x))
Error in model.frame.default(formula = y ~ mgcv:::s(x), drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'mgcv:::s(x)'

但你可以这样:

> s=mgcv:::s
> gam(y ~ s(x))

Family: gaussian 
Link function: identity 

Formula:
y ~ s(x)

Estimated degrees of freedom:
1  total = 2 

GCV score: 0.9486058

所以它不是任何一个包中的错误。您曾要求使用s(x),并且当前定义的s(x)恰好与gam的需求不兼容。你不能只在那里插入任何旧功能。