примечание: первоначально опубликовано Перекрестная проверка (статистика SE) 07-26-2011, без правильных ответов на сегодняшний день.
Справочная информация
У меня есть модель, f , где Y = f ( X )
X - матрица nxm выборок из m параметров и Y - вектор nx 1 выходов модели.
f требует значительных вычислительных ресурсов, поэтому я хотел бы приблизительно f использовать многомерный кубический сплайн через ( X , Y) баллов, чтобы я мог оценить Y при большем количестве баллов.
Вопрос
Есть лиФункция R, которая вычислит произвольное соотношение между X и Y ?
В частности, я ищу многовариантную версию функции splinefun
, которая генерирует функцию сплайна для одномерного случая.
например, вот как splinefun
работает для одномерного случая
x <- 1:100
y <- runif(100)
foo <- splinefun(x,y, method = "monoH.FC")
foo(x) #returns y, as example
Проверка, что функция интерполирует точно через точки, прошла успешно:
all(y == foo(1:100))
## TRUE
Что я пробовал
Я рассмотрелпакет mda , и похоже, что должно работать следующее:
library(mda)
x <- data.frame(a = 1:100, b = 1:100/2, c = 1:100*2)
y <- runif(100)
foo <- mars(x,y)
predict(foo, x) #all the same value
однако функция не интерполируется точно через расчетные точки:
all(y == predict(foo,x))
## FALSE
Iтакже не удалось найти способ реализации кубического сплайна в пакетах gam
, marss
или earth
.