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:gammgcv: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

したがって、どちらのパッケージでもエラーではありません。あなたは で gam を要求しましたが、たまたま現在、 はそのニーズに適合しないとs(x)定義されていました。そこに古い機能をプラグインすることはできません。s(x)gam

于 2013-12-20T00:10:04.633 に答える