Lắp đa biến, spline khối tự nhiên


17

lưu ý: không có câu trả lời đúng sau một tháng, tôi đã đăng lại vào SO

Lý lịch

Tôi có một mô hình, , trong đóY = f ( X )fY=f(X)

m Y n × 1X là ma trận của các mẫu từ tham số và là vectơ của đầu ra mô hình.n×mmYn×1

f ( X , Y ) Yf là chuyên sâu tính toán, vì vậy tôi muốn tính gần đúng bằng cách sử dụng một khối spline đa biến qua các điểm , để tôi có thể đánh giá ở số điểm lớn hơn.f(X,Y)Y

Câu hỏi

Có hàm R nào sẽ tính toán mối quan hệ tùy ý giữa X và Y không?

Cụ thể, tôi đang tìm kiếm một phiên bản đa biến của splinefunhàm, tạo ra hàm spline cho trường hợp đơn biến.

ví dụ: đây là cách làm splinefunviệc cho trường hợp đơn biến

x <- 1:10
y <- runif(10)
foo <- splinefun(x,y)
foo(1:10) #returns y, as example
all(y == foo(1:10))
## TRUE

Những gì tôi đã cố gắng

Tôi đã xem xét gói mda và có vẻ như sau đây sẽ hoạt động:

library(mda)
x   <- data.frame(a = 1:10, b = 1:10/2, c = 1:10*2)
y   <- runif(10)
foo <- mars(x,y)
predict(foo, x) #all the same value
all(y == predict(foo,x))
## FALSE

nhưng tôi không thể tìm ra cách nào để thực hiện một spline hình khối trong mars

cập nhật kể từ khi cung cấp tiền thưởng, tôi đã thay đổi tiêu đề - Nếu không có chức năng R, tôi sẽ chấp nhận, theo thứ tự ưu tiên: một hàm R tạo ra hàm xử lý gaussian hoặc một hàm nội suy đa biến khác đi qua các điểm thiết kế, tốt nhất là trong R, Matlab khác.


thử chức năng gam (), nó cho phép mọi kích thước của khối vuông
user5563

Câu trả lời:


11

Bài viết này được trình bày tại UseR! Năm 2009 dường như giải quyết một vấn đề tương tự

http://www.r-project.org/conferences/useR-2009/slides/Roustant+Ginsbourger+Deville.pdf

Nó gợi ý gói DiceKriging http://cran.r-project.org/web/packages/DiceKriging/index.html

Đặc biệt, kiểm tra các chức năng km và dự đoán.

Dưới đây là một ví dụ về nội suy ba chiều. Nó có vẻ đơn giản để khái quát.

x <- c(0, 0.4, 0.6, 0.8, 1)
y <- c(0, 0.2, 0.3, 0.4, 0.5)
z <- c(0, 0.3, 0.4, 0.6, 0.8)

model <- function(param){
2*param[1] + 3*param[2] +4*param[3]
}


model.in <- expand.grid(x,y,z)
names(model.in) <- c('x','y','z')

model.out <- apply(model.in, 1, model)

# fit a kriging model 
m.1 <- km(design=model.in, response=model.out, covtype="matern5_2")

# estimate a response 
interp <- predict(m.1, newdata=data.frame(x=0.5, y=0.5, z=0.5), type="UK",    se.compute=FALSE)
# check against model output
interp$mean
# [1]  4.498902
model(c(0.5,0.5,0.5))
# [1] 4.5

# check we get back what we put in
interp <- predict(m.1, newdata=model.in, type="UK", se.compute=FALSE)
all.equal(model.out, interp$mean)
# TRUE

6

Bạn cần thêm dữ liệu cho phù hợp spline. mgcv thực sự là một lựa chọn tốt. Đối với yêu cầu cụ thể của bạn, bạn cần đặt spline hình khối làm hàm cơ bản bs = 'cr' và cũng không bị phạt với fx = TRUE. Cả hai tùy chọn được đặt cho một thuật ngữ trơn tru được đặt bằng s (). Dự đoán hoạt động như mong đợi.

library(mgcv)
x <- data.frame(a = 1:100, b = 1:100/2, c = 1:100*2)
y <- runif(100)
foo <- gam(y~a+b+s(c,bs="cr",fx=TRUE),data=x)
plot(foo)
predict(foo,x)

Cảm ơn sự giúp đỡ của bạn, nhưng nếu đây là một spline hình khối, tôi không nên predict(foo,x)quay trở lại y?
David LeBauer

Xin lỗi, không nhận thấy rằng bạn muốn một xấp xỉ hoàn hảo. Sau đó, dường như mgcv là không giúp được gì nhiều: stop ( "Cơ sở chỉ xử lý 1D smooths") (từ svn.r-project.org/R-packages/trunk/mgcv/R/smooth.r )
Alex

0

Bạn không cung cấp chi tiết nào về hình thức của hàm ; có thể là hàm hằng số piecewise là một xấp xỉ đủ tốt, trong trường hợp đó bạn có thể muốn khớp với cây hồi quy ( ví dụ với gói ). Nếu không, bạn có thể muốn xem xét gói , ngoài những gì đã được đề xuất.f(X)rpartearth


1
dạng nằm ngoài phạm vi của vấn đề này, nhưng nó là mô hình thảm thực vật toàn cầu năng động được mô tả trong phần phụ lục của Medvigy et al 2009f(X)
David LeBauer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.