在使用gam平滑期间,是否可以在响应变量中指定下限?

时间:2018-03-30 07:43:29

标签: r smoothing gam mgcv

我正在尝试使用公式zx功能,使y的平滑表面与z ~ s(x, y)gam相符  在mgcv包中。我的目标是根据zx的新值预测回复y

在我的实际情况中,z应该是正数,否定z将毫无意义。但是,预测z s 有时是负面的。似乎对于某些地区,训练数据中没有足够的点来估算z 准确。

我的问题是:有没有办法在z平滑期间指定gam的下限,以便后来我不会得到否定z s使用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)

正如你所看到的,红点。实际值是正数但预测值是负值。

enter image description here

0 个答案:

没有答案