Как использовать сглаживающие сплайны в игре в пакете R mgcv - PullRequest
1 голос
/ 01 июля 2019

Вопрос в том, является ли это правильным способом задания узлов в сглаживающем сплайне в гамме в мгкв?

Запутанная часть заключается в том, что в виньетке говорится, что k - это размерность основы, используемая для представления гладкого термина.

(Ранее я думал, что в настройке «cr» размерность базы равна 3. После прочтения стр. 149-150 (GAM, введение в R) кажется, что в игре используется набор из k базисов). написать сплайны кубической регрессии.)

Однако в посте ниже показано, что k - это количество узлов. Это подтверждается кодом ниже

# reference
# https://stackoverflow.com/questions/40056566/mgcv-how-to-set-number-and-or-locations-of-knots-for-splines

library(mgcv)
## toy data
set.seed(0); x <- sort(rnorm(400, 0, pi))  ## note, my x are not uniformly sampled
set.seed(1); e <- rnorm(400, 0, 0.4)
y0 <- sin(x) + 0.2 * x + cos(abs(x))
y <- y0 + e

## fitting natural cubic spline
cr_fit <- gam(y ~ s(x, bs = 'cr', k = 20))
cr_knots <- cr_fit$smooth[[1]]$xp  ## extract knots locations
par(mfrow = c(1,2))
plot(x, y, col= "blue", main = "natural cubic spline");
lines(x, cr_fit$linear.predictors, col = 2, lwd = 2)
abline(v = cr_knots, lty = 2)

enter image description here Затем, чтобы использовать сглаживающий сплайн, я должен назначить узлы вручную в аргументе gam? Попытка кода ниже:

## fitting natural cubic spline, smoothing spline
cr_fit <- gam(y ~ s(x, bs = 'cr', k = length(x)), knots=list(x))
cr_knots <- cr_fit$smooth[[1]]$xp  ## extract knots locations


## summary plot
par(mfrow = c(1,2))
plot(x, y, col= "blue", main = "natural cubic spline");
lines(x, cr_fit$linear.predictors, col = 2, lwd = 2)
abline(v = cr_knots, lty = 2)
plot(x,cr_knots)
cr_fit$sp

enter image description here

Правильно ли это понимание?

Если да, то как я могу реализовать метод сглаживающих сплайнов с помощью gam в mgcv?

...