Получить полиномиальные коэффициенты из интерполяционных сплайнов в R

У меня есть набор измеренных значений, которые я хотел бы интерполировать в R используя кубические сплайны. Поскольку это всего лишь кусочно-полиномы, я впоследствии хотел бы интегрировать интерполяционную функцию алгебраически. Поэтому мне нужны коэффициенты. Есть ли способ получить это?
призвание splines::interpSpline(foo, bar)$coef кажется, не возвращает фактические полиномиальные коэффициенты.

1 ответ

Решение

Выход из splines::interpSpline(x,y)$coef дает полиномиальные коэффициенты части между x(i) и x(i+1) в терминах степеней (xx(i)), а не степеней x. Это имеет смысл, потому что результирующие коэффициенты имеют разумный размер и их легче интерпретировать: например, каждый постоянный член равен просто y(i), квадратичный коэффициент дает вогнутость в x(i) и так далее.

Например, этот вывод

> x <- c(1,3,6,9)
> y <- c(3,1,4,1)
> splines::interpSpline(x,y)$coef
     [,1]        [,2]       [,3]        [,4]
[1,]    3 -1.54054054  0.0000000  0.13513514
[2,]    1  0.08108108  0.8108108 -0.16816817
[3,]    4  0.40540541 -0.7027027  0.07807808
[4,]    1 -1.70270270  0.0000000  0.00000000

Значит это

  • на отрезке [1,3] многочлен имеет вид 3 - 1.54054054*(x-1) + 0.13513514*(x-1)^3
  • на отрезке [3,6] многочлен равен 1 + 0.08108108*(x-3) + 0.8108108*(x-3)^2 - 0.16816817*(x-3)^3
  • на интервале [6,9] многочлен равен 4 + 0.40540541*(x-6) - 0.7027027*(x-6)^2 + 0.07807808*(x-6)^3

Я не вижу особого смысла в последней строке, которая описывает линейное продолжение сплайна за x=9, правой конечной точкой данных.

Интегрировать их не сложнее, чем интегрировать степени x, но, конечно, нужно выбрать константы интеграции, если целью является получение непрерывного антипроизводного. Выбор формы полиномов облегчает работу с константами интегрирования. Предполагая, что мы выбираем антипроизводное со значением 0 в левой конечной точке, остальное выглядит следующим образом:

  • на интервале [1,3] антидериватив является 3*(x-1) - 1.54054054*(x-1)^2/2 + 0.13513514*(x-1)^4/4
  • на интервале [3,6] антидеривативное C1 + 1*(x-3) + 0.08108108*(x-3)^2/2 + 0.8108108*(x-3)^3/3 - 0.16816817*(x-3)^4/4, Здесь C1 - значение предыдущего антидериватива при x=3.
  • на интервале [6,9] антидеривативное средство C2 + 4*(x-6) + 0.40540541*(x-6)^2/2 - 0.7027027*(x-6)^3/3 + 0.07807808*(x-6)^4/4, Здесь C2 - значение предыдущего антидериватива при x=6.
Другие вопросы по тегам