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 необходимо. Вы не можете просто вставить любую старую функцию туда.

Другие вопросы по тегам