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よりも優れている場合はお詫びします。