3

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

背景

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

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

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

问题

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

具体来说,我正在寻找该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

我也找不到在 、 或 包中实现三次样条gammarss方法earth

4

3 回答 3

4

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

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

于 2011-08-22T02:14:58.623 回答
2

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

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

于 2013-07-23T21:10:36.163 回答
1

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

于 2011-08-22T01:36:20.193 回答