Можно ли указать нижнюю границу в переменной ответа во время сглаживания с гам?

Я пытаюсь подогнать сглаженную поверхность z против x а также y используя формулу z ~ s(x, y) с gam функция в mgcv пакет. Моя цель - предсказать ответ z основанный на новых значениях x а также y,

В моей реальной ситуации, z должно быть положительным числом отрицательным z было бы бессмысленно. Тем не менее, предсказанный z с иногда бывают отрицательными. Похоже, что для некоторого региона недостаточно данных в обучающих данных для оценки z точно.

Мой вопрос: есть ли способ указать нижнюю границу z во время гладкой gam так что позже я не получу отрицательный z с predict ?

Ниже приведен минимальный пример, который воспроизводит эту проблему.

library(mgcv)

x <- seq(0.1, 1, by = 0.01)
y <- seq(0.1, 1, by = 0.01)
dtt <- expand.grid(x = x, y = y)

set.seed(123)
dtt$xp <- dtt$x + rnorm(nrow(dtt)) / 100
dtt$yp <- dtt$y + rnorm(nrow(dtt)) / 100

dtt$z <- 1 / (dtt$xp^2 + dtt$yp^2)

m <- sample.int(nrow(dtt), 3000)

dtt.train <- dtt[m, ]
dtt.test <- dtt[!(1:nrow(dtt) %in% m), ]

fit <- gam(z ~ s(x, y), data = dtt.train)

p <- predict(fit, newdata = dtt.test)

plot(dtt.test$z, p, xlab = 'Real', ylab = 'Predicted', pch = 19, col = 1 + (p < 0))
abline(h = 0, v = 0)

Как видите, за красными точками. реальные значения являются положительными, но прогнозируемые значения являются отрицательными.

введите описание изображения здесь

0 ответов

Другие вопросы по тегам