В R я использую функцию smooth.spline {stats}, чтобы подогнать сплайн через некоторые значения функции.
x=seq(0, 1,0.01)
y=sin(x*23) - 0.6*cos(x*7)
plot(x,y)
ss= smooth.spline(x=x, y=y, df=35)
plot(ss)
Теперь объект ss содержит все значения подобранного сплайна, необходимые для рисования и оценки сплайна в любой заданной точке.
ss$fit
$knot
[1] 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000
$nk
[1] 6
$min
[1] 1
$range
[1] 3
$coef
[1] 0.5549946 0.4366268 0.1988102 1.1388495 0.7444880 0.5479000
attr(,"class")
[1] "smooth.spline.fit"
Как я могу использовать коэффициенты и узлы из объекта ss$fit для вычисления значения сплайн-функции в точке xa. Я знаю, что могу использовать прогноз, но я хотел бы вычислить значение вручную.
Моя попытка описана в следующей функции, которая не дает ожидаемых результатов:
estimateSpline <- function(xv, fit){
knots = unique(fit$knot)
knots = knots[ 2 : (length(knots)-1) ]
len = length(knots)
xv = (xv - fit$min) / fit$range
Gbase = rep(xv, len )
Gbase = Gbase - knots
Gbase[Gbase < 0] = 0
Gbase = c(rep(xv,4), Gbase)
Gpow = c(seq(0, 3, 1), rep (3, len))
Gvec = Gbase ^ Gpow
res = fit$coef %*% Gvec
return (res)
}
Я понимаю теорию, лежащую в основе сплайнов, и я прочитал много документов о математике, стоящей за этим.
Может ли кто-нибудь помочь мне оценить значение подобранной сплайн-функции в любой произвольной точке xv?
Я не полностью понимаю формат данных, количество и порядок параметров, выдаваемых smooth.spline, поэтому я могу реконструировать результаты функции predict.
Спасибо
predict.smooth.spline
? Он делает именно то, за что вы, кажется, цепляетесь. Если вам нужна помощь в отладке вашей домашней функции прогнозирования, пожалуйста, опубликуйте, каким, по вашему мнению, должен быть результат и почему. - person Carl Witthoft   schedule 05.01.2015predict.smooth.spline.fit
, который фактически использует процедуру Фортрана,bvalus
, которая, в свою очередь, вызываетbvalue
. Вы можете увидеть код с комментариями здесь: svn.r-project.org/R/trunk/src/library/stats/src/bvalue.f - person James   schedule 05.01.2015