s() в 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()
функция, но это не должно произойти, верно? Это ошибка в mgcv
или же VGAM
пакет?
1 ответ
Решение
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
необходимо. Вы не можете просто вставить любую старую функцию туда.