Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的三维样条曲线中插值_R_Interpolation_Spline_Loess - Fatal编程技术网

在R中的三维样条曲线中插值

在R中的三维样条曲线中插值,r,interpolation,spline,loess,R,Interpolation,Spline,Loess,我希望将曲面拟合到某些值: x = 1:10 y = 10:1 z = sample(1:10,10) 我想做一些有趣的事情,比如样条函数(z~x+y)。R中的实际样条函数似乎只取x和y,因此我不能有二维x坐标。在R中是如何做到这一点的?我知道局部多项式等的,但样条曲线才是我真正想要的。一个好的选择是mgcv包,它与所有版本的R一起提供。它通过s()具有两个或多个变量的各向同性惩罚回归样条曲线和通过张量积和te()的两个或多个变量的各向异性惩罚回归样条曲线 如果不希望使用惩罚回归样条曲线,可以

我希望将曲面拟合到某些值:

x = 1:10
y = 10:1
z = sample(1:10,10)

我想做一些有趣的事情,比如
样条函数(z~x+y)
。R中的实际样条函数似乎只取
x
y
,因此我不能有二维x坐标。在R中是如何做到这一点的?我知道局部多项式等的
,但样条曲线才是我真正想要的。

一个好的选择是mgcv包,它与所有版本的R一起提供。它通过
s()具有两个或多个变量的各向同性惩罚回归样条曲线
和通过张量积和
te()
的两个或多个变量的各向异性惩罚回归样条曲线

如果不希望使用惩罚回归样条曲线,可以使用参数
fx=TRUE
来修复已知的自由度样条曲线

下面是来自
?te

# following shows how tensor pruduct deals nicely with 
# badly scaled covariates (range of x 5% of range of z )
require(mgcv)
test1 <- function(x, z ,sx=0.3, sz=0.4) { 
  x <- x*20
  (pi ** sx * sz) * (1.2 * exp(-(x - 0.2)^2 / sx^2 - ( z - 0.3)^2 / sz^2) +
  0.8 * exp(-(x - 0.7)^2 / sx^2 -(z - 0.8)^2 / sz^2))
}
n <- 500

old.par<-par(mfrow=c(2,2))
x <- runif(n) / 20
z<-runif(n)
xs <- seq(0, 1, length=30) / 20
zs <- seq(0, 1, length=30)
pr <- data.frame(x=rep(xs, 30), z=rep(zs, rep(30, 30)))
truth <- matrix(test1(pr$x, pr$z), 30, 30)
f <- test1(x, z)
y <- f + rnorm(n) * 0.2

## model 1 with s() smooths
b1 <- gam(y ~ s(x,z))
persp(xs, zs, truth)
title("truth")
vis.gam(b1)
title("t.p.r.s")

## model 2 with te() smooths
b2 <- gam(y ~ te(x, z))
vis.gam(b2)
title("tensor product")

## model 3 te() smooths specifying margin bases
b3 <- gam(y ~ te(x, z, bs=c("tp", "tp")))
vis.gam(b3)
title("tensor product")
par(old.par)
#下面展示了张量普鲁杜德如何很好地处理
#比例不好的协变量(范围为x z范围的5%)
要求(mgcv)

测试1这个问题可能会回答你的。。。?我想知道是否有更好的选择,我已经为一个函数实现了这个想法,该函数的形状比显示的形状要少,并且在边界附近发现了非常差的性能。在这个例子中,这也发生在x~0附近。