0

这个

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()了功能,但这不应该发生对吗?这是错误mgcv还是VGAM包装错误?

4

1 回答 1

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需求不兼容。您不能只在其中插入任何旧功能。

于 2013-12-20T00:10:04.633 回答