是否存在估计多元自然三次样条(或类似)函数的R库?

时间:2011-08-22 00:45:57

标签: r interpolation spline

注意:最初于2011年7月26日在Cross Validated (stats SE)发布,但没有正确答案。

背景

我有一个模型 f ,其中 Y = f( X

X 是来自 m 参数和 Y nxm 样本矩阵是模型输出的 nx 1 向量。

f 是计算密集型的,因此我想通过 X ,Y)使用多元三次样条逼近 f 点,这样我就可以在更多的点上评估 Y

问题

是否有一个R函数可以计算 X Y 之间的任意关系?

具体来说,我正在寻找splinefun函数的多变量版本,它为单变量情况生成样条函数。

e.g。这就是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

我也找不到在gammarssearth包中实现三次样条的方法。

3 个答案:

答案 0 :(得分:4)

实际上有几个包可以做到。我使用的是具有rcs的“rms”包,但是生存包还有pspline,splines包具有ns函数{}。 “自然样条”(用ns构造)也是三次样条。您需要在多变量公式中使用'*'运算符形成多变量拟合函数,从而创建“交叉”样条项。 你提供的例子不够丰富。

我想我很困惑,你想要完全适合。 R是一个统计包。近似估计是目标。通常,精确拟合更多是一个问题,因为它们会导致多重共线性。

答案 1 :(得分:1)

我不确定这是否正是您正在寻找的,但您可以在R包字段中尝试Tps()。它用于对空间数据进行薄板样条插值(2D等效三次样条),但最多需要四个协变量,尽管它会期望它们是欧几里得x,y,z +时间,所以你需要清楚您正在为特定情况选择正确的选项。如果要插值,请将平滑参数lambda设置为零。您也可以尝试R包polspline中的函数polymars()。

答案 2 :(得分:1)

看看为开展此类任务而开发的DiceKriging软件包。 http://cran.r-project.org/web/packages/DiceKriging/index.html

我已经提供了一个示例应用程序 https://stats.stackexchange.com/questions/13510/fitting-multivariate-natural-cubic-spline/65012#65012