mg cv 中的 R语言 s() 在加载 VGAM 包时不起作用



This

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包中的错误?

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需求不兼容。你不能只是在那里插入任何旧函数。

最新更新