2
3維樣條我想的表面適合於一些值:插值作爲R
x = 1:10
y = 10:1
z = sample(1:10,10)
我想樂趣類似spline_function(z ~ x + y)
。 R中的實際樣條函數似乎只需要x
和y
,以便我不能有二維x座標。在R中做這件事的方法是什麼?我知道局部多項式等loess
等,但樣條線真的是我正在尋找。
3維樣條我想的表面適合於一些值:插值作爲R
x = 1:10
y = 10:1
z = sample(1:10,10)
我想樂趣類似spline_function(z ~ x + y)
。 R中的實際樣條函數似乎只需要x
和y
,以便我不能有二維x座標。在R中做這件事的方法是什麼?我知道局部多項式等loess
等,但樣條線真的是我正在尋找。
一個很好的選擇,是mgcv包附帶R的所有版本,具有通過通過張量的產品和te()
兩個或多個變量的s()
和各向異性處罰迴歸樣條兩個或多個變量的各向同性懲罰迴歸樣條。
如果不想懲罰迴歸樣條曲線,可以使用參數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)
真棒 - 謝謝。 – Alex
這個問題的回答可能是你的一個例子...? http://stackoverflow.com/questions/7142180/is-there-an-r-library-that-estimates-a-multivariate-natural-cubic-spline-or-sim – Frank