сплайн: разница между smooth.spline () и bSpline ()? - PullRequest
0 голосов
/ 30 мая 2019

Может кто-нибудь объяснить мне три вопроса, связанных с smooth.spline ().

1 °) Почему узлы, созданные в smooth.spline, неравномерно распределены?

2 °) Какой тип сплайна используется smooth.spline? Когда я сравниваю smooth.spline без ограничений (spar = 0) и сравниваю его с линейной моделью с использованием B-сплайна (функция bSpline), я получаю очень близкие кривые, но они идентичны, а параметры отличаются.

3 °) Как я могу получить сплайн-матрицу из smooth.spline, как у bSpline?

--- Данные получены из справки bSpline: искусственный пример ---

y18 <- c(1:3, 5, 4, 7:3, 2*(2:5), rep(10, 4))
data <- data.frame(y18, x=seq(0,1,length=18))
xx <- seq(0, 1, len = 201)
s2 <- smooth.spline(y=data$y18, x=data$x, nknots = 9, spar=0 )
p  <- predict(s2, xx)

bsx  <- data.frame(bSpline(x=data$x   , knots=s2$fit$knot[5:11], 
degree=3, intercept = FALSE)) 
data <- data.frame(data, bsx)

bs100 <- data.frame(bSpline(x=0:100/100, knots=s2$fit$knot[5:11], 
degree=3, intercept = FALSE)) 
bs100 <- data.frame(x=0:100/100, bs100)

lm_y18 <- lm(data=data[,-2], y18 ~ .)
bs100$y <- predict(lm_y18, bs100)

---- вопрос 1 ----

s2$fit$knot                # I was expecting to have: 1:7/8
diff(s2$fit$knot)

---- вопрос 2 ----

ggplot() + geom_point(data=data, aes(x=x, y=y18)) + 
  geom_line(aes(x=p$x, y=p$y)) +
  geom_line(aes(x=p02$x, y=p02$y)) +
  geom_line(aes(x=bs100$x, y=bs100$y), color=2) +
  scale_x_continuous(labels = scales::percent) +
  geom_vline(xintercept=s2$fit$knot, lty=2, color="grey")
cbind(s2$fit$coef,lm_y18$coefficients, s2$fit$coef-lm_y18$coefficients)
...