我想找出gam模型的最佳结点,以下是代码:
s<-c(3:20)
n<-1
aic<-0
kt<-""
for(i in s){g<-gam(data$y~data$x1+
s(data$t,bs="cr",k=i)+as.factor(data$DOW),family=poisson
,method="REML")
aic[n]<-AIC(g)
kt[n]<-paste("A",i)
n<-n+1
}
result<-data.frame(aic,kt)
result
我得到了每个模型的AIC列表,有3到20节。然后我试图得到AIC vs knots的散点图;代码:
plot(s,aic, xlab="number of knot",ylab="AIC",main="AIC~no.of knot")
情节看起来不像U形,所以我增加了结数,3:50然后3:100。但他们仍然没有接近U形。 AIC正在减少到结数= 20。然后它对于下一个增加的结来说保持不变。 here is the plot
编辑: 为了解决这个问题,我尝试使用以下代码对此gam模型进行交叉验证:
library(caret)
b<-
train(data$y~data$x1+data$t+data$DOW,method = "gam",family="poisson",
na.action = na.pass,
trControl = trainControl(method = "LOOCV", number = 1, repeats = 1),
tuneGrid = data.frame(method = "GCV.Cp", select = FALSE))
问题是,它显示错误,因为y包含几个缺失值。我是新的gam,mgcv和交叉验证。任何人都可以帮我处理这些代码吗?