【发布时间】:2017-09-07 17:54:00
【问题描述】:
我正在寻找一种用样条线插值数据的方法,但在端点处强制值和导数。这是我的数据:
library(tidyverse)
data <- tibble(x = 0:600, y = pnorm((-300:300)/100)+(runif(0:600)-0.5)/20)
# add noise
data$y[1] <- 0.35
data$y[2] <- 0.25
ggplot(data, aes(x = x, y = y)) + geom_point()
现在让我们用样条线拟合这些数据
fit <- lm(formula = y ~ splines::ns(x, 5),
data = data)
data$y_new <- predict.lm(fit)
ggplot(data, aes(x = x, y = y_new)) + geom_point(aes(y = y), alpha = 0.5) +
geom_point(color = 'red')
如您所见,由于存在噪声,左侧的样条曲线中存在轻微的向上曲率(右侧为向下曲率)。
当 x = 0 时,我想强制样条的值为 0,样条的导数为 0(水平)。到目前为止,我还无法做到这一点。
我也尝试过使用 Boundary.knots 参数,但这对我也没有帮助。
【问题讨论】: