0

2 番目の説明変数を追加すると、適合が悪化するのはなぜですか?

require("VGAM")
df = data.frame(x = c(1,2,3,4,5,6,7,8,9,10), y = c(1,4,8,15,25,36,48,65,80,105), z =        c(0,0,0,1,100,400,900,1600,1800,200)  )
vgt1 = vgam(y~s(x, df=2), data=df,family=gaussianff, trace=TRUE)
vgt2 = vgam(y~cbind(s(x, df=2),s(z, df=2)), data=df,family=gaussianff, trace=TRUE)

plot(df$x, df$y, col="black")
lines(df$x, vgt1@predictors, col="red")
lines(df$x, vgt2@predictors, col="blue")
4

1 に答える 1

1

変数を追加するときは、+cbind を使用しません。

vgamterms.formulaを検索するために使用する式を解析しますspecials = 's'。つまりs、スプラインを表すためにラップされている項です。

したがって

vgt2 = vgam(y~s(x, df=2)+s(z, df=2), data=df,family=gaussianff, trace=TRUE)

は、あなたが望むものを提供します (そして、これは よりも逸脱度が低くなりますvgt1)。

あなたが合うとき

vgt2 = vgam(y~cbind(s(x, df=2),s(z, df=2)), data=df,family=gaussianff, trace=TRUE)

terms.formula式内の用語を識別する関数と同様に、specialsで始まるものは見つかりません。したがってscbind

gam(y~cbind(s(x, df=2),s(z, df=2)), data=df,family=gaussianff, trace=TRUE)

と同等です

gam(y~cbind(x,y), data=df,family=gaussianff, trace=TRUE)

これは、用語で

vgam(y~x+z, data=df,family=gaussianff, trace=TRUE)

つまり、スプライン項は当てはまりません。

于 2014-02-05T02:22:46.583 に答える