Существует ли библиотека R, которая оценивает многомерную естественную кубическую сплайн (или подобную) функцию? - PullRequest
3 голосов
/ 22 августа 2011

примечание: первоначально опубликовано Перекрестная проверка (статистика 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.

Ответы [ 3 ]

4 голосов
/ 22 августа 2011

На самом деле несколько пакетов могут сделать это.Я использую пакет "rms", который имеет rcs, но пакет для выживания также имеет pspline, а пакет splines имеет функцию ns {}.«Естественные сплайны» (построенные с помощью ns) также являются кубическими сплайнами.Вам нужно будет сформировать многомерную функцию подгонки с оператором '*' в многомерной формуле, создавая "скрещенные" сплайн-члены.что предложенный вами пример был недостаточно богатым.

Полагаю, я сбит с толку, что вам нужны точные совпадения.R является статистическим пакетом.Приблизительная оценка является целью.Обычно точные подгонки являются большей проблемой, потому что они приводят к мультиколлинеарности.

1 голос
/ 24 июля 2013

Посмотрите на пакет DiceKriging, который был разработан для выполнения подобных задач. http://cran.r -project.org / веб / пакеты / DiceKriging / index.html

Я предоставил пример приложения на https://stats.stackexchange.com/questions/13510/fitting-multivariate-natural-cubic-spline/65012#65012

1 голос
/ 22 августа 2011

Я не уверен, что это именно то, что вы ищете, но вы можете попробовать Tps () в полях пакета R.Он предназначен для выполнения интерполяции сплайнов тонких пластин (2D-эквивалент кубических сплайнов) для пространственных данных, но займет до четырех ковариат, хотя он будет ожидать, что они будут евклидовым временем x, y, z +, поэтому вам необходимо четкочто вы выбираете правильные варианты для вашего конкретного случая.Если вы хотите интерполировать, установите параметр сглаживания лямбда в ноль.Вы также можете попробовать функцию polymars () в пакете polspline R.

...