2014-02-05 6 views
0

Почему пригонка ухудшается после добавления второй пояснительной переменной?R VGAM package: подходит ниже, добавив второй пояснительный vairable

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, [email protected], col="red") 
lines(df$x, [email protected], col="blue") 
+1

Почему вы создаете матрицу при добавлении второго предиктора? почему не просто 'vgt2 = vgam (y ~ s (x, df = 2) + s (z, df = 2), data = df, family = gaussianff, trace = TRUE)'? – mnel

+0

@mnel, я думал, что так я должен передать свои аргументы. Что он вычисляет тогда, когда я передаю матрицу? .. –

+0

см. Мой ответ для полного описания того, что происходит – mnel

ответ

1

При добавлении переменной вы используете + не cbind.

vgam анализирует формулу, используя terms.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, которые начинаются с s как cbind это функция, которая определяет термин в формуле. Поэтому

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) 

т.е. нет условия сплайна не установлено.