这
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包中的错误吗?
发布于 2013-12-20 00:10:04
mgcv:gam调用mgcv:interpret.gam,这是失败的地方。
interpret.gam似乎解析了包含's‘在内的特殊函数的公式,然后在公式的环境中计算s(x)。这意味着它会从来电者那里找到任何电流。它可能会返回一些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)来提供一个gam,而且目前恰好定义了s(x)与gam的需求不兼容。你不能把任何旧的功能都插进去。
https://stackoverflow.com/questions/20693865
复制相似问题