如果您想使用黄土模型,可以使用变换来确保变量保持负值。您收到警告是因为您的所有点都在一条线上,因此更改了一些数据:
set.seed(123)
n = 100
x <- c(0, runif(n, min=1, max=100), 100)
y <- c(0, runif(n, min=1, max=100), 100)
depth <- rbeta(n+2, 1, 50)*100
depth <- -depth
range(depth)
[1] -13.27248715 -0.01520178
使用你原来的例子,你会得到:
dep.lo <- loess(depth~x*y, degree=2, span=.25)
coord.fit <- expand.grid(x=seq(1,100,1), y=seq(1,100,1))
coord.fit$depth <- as.numeric(predict(dep.lo, newdata=coord.fit))
range(coord.fit$depth)
[1] -7.498542 2.397855
变换可以是log(-depth)
例如:
tiny = 1e-3
nlogdepth = log(-depth + tiny) # adding 'tiny' to ensure depth is not 0
dep.lo <- loess(nlogdepth~x*y, degree=2, span=.25)
coord.fit <- expand.grid(x=x, y=y)
coord.fit$depth <- -exp(as.numeric(predict(dep.lo, newdata=coord.fit))) + tiny
range(coord.fit$depth)
[1] -16.9366043 -0.1091614