Я работаю с кубическими c циклическими c сплайнами в пакете mgcv.
Я понимаю, что матрица модели для mgcv включает в себя пересечение и была репараматизирована с использованием QR-разложения + разложения по собственным значениям, как отмечено в заметки Саймона Вуда . Но я абсолютно не могу понять, как преобразовать бета-значения из mgcv обратно в бета-версии для исходной базисной функции.
Я создаю игрушечный пример:
require(mgcv)
set.seed(6)
x <- sort(runif(200)*10)
z <- runif(200)
f <- sin(x*2*pi/10)+.5
y <- f + rnorm(200,0, 0.1)
plot(y)
И подгоняю модель с функцией гам (mgcv). Для справки я также определяю исходную основную функцию сплайна cycli c с теми же узлами:
## finished simulating data, now fit model...
knots_x <- seq(0,10,length=12)
b <- gam(y ~ s(x,bs="cc",k=12), knots=list(x=knots_x))
plot(x,y);plot(b,select=1,shade=TRUE);lines(x,f-mean(f),col=2)
## Create cyclic spline basis (so day 1 and 365 connect)
B <- cSplineDes(x,knots= knots_x, ord=4) ## get cyclic spline model matrix
plot(x,B[,1],type="l"); for (i in 2:11) lines(x,B[,i],col=i)
Мне кажется, что я не могу понять, как работать с обратными словами для восстановления бета-версий в оригинале. основание:
head(B)
head(model.matrix.gam(b))
Я работал с заметками Саймона и нашел разложение QR, но у меня все еще короткий столбец, чтобы размеры работали.
qr.X(attributes(b$smooth[[1]])$qrc)