Я подгоняю модели GAM к данным с помощью пакета mgcv в R. Некоторые из моих предикторов являются круговыми, поэтому я использую периодическое сглаживание. Я столкнулся с проблемой перекрестной проверки, когда мой набор данных удержания может содержать значения за пределами диапазона данных обучения. Поскольку пакет 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
или поиска в Google.
Этот блок будет соответствовать некоторым задержанным данным и выдаст ошибку, если вы установите начальное значение, как указано выше:
# 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.