data(tecator)
ind<-1:129
x=tecator$absorp.fdata
x.d2<-fdata.deriv(x,nderiv=2)
tt<-x[["argvals"]]
dataf=as.data.frame(tecator$y)
nbasis.x=11;nbasis.b=7
basis1=create.bspline.basis(rangeval=range(tt),nbasis=nbasis.x)
basis2=create.bspline.basis(rangeval=range(tt),nbasis=nbasis.b)
basis.x=list("x.d2"=basis1)
basis.b=list("x.d2"=basis2)
ldata=list("df"=dataf[ind,],"x.d2"=x.d2[ind])
res=fregre.gsam(Fat~s(Water,k=3)+s(x.d2,k=3),data=ldata,
family=gaussian(),basis.x=basis.x,basis.b=basis.b)
newldata=list("df"=dataf[-ind,],"x.d2"=x.d2[-ind])
pred<-predict.fregre.gsam(res,newldata)
plot(pred,tecator$y$Fat[-ind])
res.glm=fregre.glm(Fat~Water+x.d2,data=ldata,family=gaussian(),
basis.x=basis.x,basis.b=basis.b)
pred.glm<-predict.fregre.glm(res.glm,newldata)
newy<-tecator$y$Fat[-ind]
points(pred.glm,tecator$y$Fat[-ind],col=2)
res.plm=fregre.plm(Fat~Water+x.d2,data=ldata)
pred.plm<-predict.fregre.plm(res.plm,newldata)
points(pred.plm,tecator$y$Fat[-ind],col=3)
# Time-consuming
res.gkam=fregre.gkam(Fat~Water+x.d2,data=ldata)
pred.gkam=predict(res.gkam,newldata)
points(pred.gkam,tecator$y$Fat[-ind],col=4)
((1/length(newy))*sum((drop(newy)-pred)^2))/var(newy)
((1/length(newy))*sum((newy-pred.plm)^2))/var(newy)
((1/length(newy))*sum((newy-pred.glm)^2))/var(newy)
((1/length(newy))*sum((newy-pred.gkam)^2))/var(newy)
Run the code above in your browser using DataLab