我正在使用 R 中的 mgcv 包将 GAM 模型拟合到数据。我的一些预测变量是圆形的,所以我使用的是周期性平滑器。我在交叉验证中遇到了一个问题,我的保留数据集可能包含训练数据范围之外的值。由于 gam 包自动为平滑选择结,这会导致错误(请参阅我的相关问题-感谢@nograpes 和 @DWin 对那里错误的解释)。
如何手动指定周期性平滑的外部结?
示例代码
第一个块生成一些数据。
library(mgcv)
set.seed(223) # produces error.
# set.seed(123) # no error.
# generate data:
x <- runif(100,min=-pi,max=pi)
linPred <- 2*cos(x) # value of the linear predictor
theta <- 1 / (1 + exp(-linPred)) #
y <- rbinom(100,1,theta)
plot(x,theta)
df <- data.frame(x=x,y=y)
下一个块用周期性平滑拟合 GAM 模型:
gamFit <- gam(y ~ s(x,bs="cc",k=5),data=df,family=binomial())
summary(gamFit)
plot(gamFit)
它将在更平滑术语的规范中的某个地方,s(x,bs="cc",k=5)
我相信你将能够设置一些结,但这对我来说在谷歌搜索的帮助下并不明显gam
。
如果您按上述方式设置种子,此块将适合一些保留数据并产生错误:
# predict y values for new data:
x.2 <- runif(100,min=-pi,max=pi)
df.2 <- data.frame(x=x.2)
predict(gamFit,newdata=df.2)
理想情况下,我只会设置外部结,然后gam
选择其余的。
如果这个问题对于 CrossValidated 来说比 SO 更好,我们深表歉意。