Pasuje do wielowymiarowego, naturalnego sześciennego splajnu


17

uwaga: bez poprawnych odpowiedzi po miesiącu, przeszedłem do SO

tło

Mam model, , gdzie Y = f ( X )faY=fa(X)

jestmacierzą n × m próbek z m parametrów, a Y jestwektorem n × 1 wyników modelu.Xn×mmYn×1

jest intensywne obliczeniowo, więc chciałbym aproksymować f za pomocą wielowymiarowego splajnu sześciennego przezpunkty ( X , Y ) , aby móc ocenić Y w większej liczbie punktów.fafa(X,Y)Y

Pytanie

Czy istnieje funkcja R, która obliczy dowolną zależność między X i Y?

W szczególności szukam wielowymiarowej wersji splinefunfunkcji, która generuje funkcję splajnu dla przypadku jednowymiarowego.

np. tak splinefundziała przypadek jednoczynnikowy

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

Co próbowałem

Sprawdziliśmy na MDA pakiet, a wydaje się, że powinien pracować co następuje:

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

ale nie mogłem znaleźć żadnego sposobu na implementację splajnu sześciennego mars

zaktualizuj od czasu zaoferowania nagrody, zmieniłem tytuł - Jeśli nie ma funkcji R, zaakceptowałbym, w kolejności preferencji: funkcję R, która wyprowadza funkcję procesu gaussowskiego, lub inną funkcję interpolacji wielowymiarowej, która przechodzi przez punkty projektowe, najlepiej w R, inaczej Matlab.


wypróbuj funkcję gam (), pozwala na dowolny wymiar splajnów sześciennych
— user5563

Odpowiedzi:


11

Artykuł zaprezentowany na UseR! Wydaje się, że rok 2009 rozwiązuje podobny problem

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

Sugeruje pakiet DiceKriging http://cran.r-project.org/web/packages/DiceKriging/index.html

W szczególności sprawdź funkcje km i przewiduj.

Oto przykład trójwymiarowej interpolacji. Uogólnienie wydaje się proste.

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

Potrzebujesz więcej danych do dopasowania splajnu. mgcv rzeczywiście jest dobrym wyborem. Dla konkretnego żądania musisz ustawić splajn sześcienny jako funkcję podstawową bs = 'cr', a także nie karać go za pomocą fx = TRUE. Obie opcje są ustawione na gładki termin, który jest ustawiany za pomocą s (). Prognozowanie działa zgodnie z oczekiwaniami.

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)

Dziękuję za pomoc, ale jeśli to byłby sześcienny splajn, czy nie powinienem oczekiwać predict(foo,x)powrotu y?
— David LeBauer,

Przepraszamy, nie zauważyłem, że chcesz uzyskać idealne przybliżenie. Zatem najwyraźniej mgcv nie jest zbyt pomocny: stop („Podstawa obsługuje tylko wygładzanie 1D”) (od svn.r-project.org/R-packages/trunk/mgcv/R/smooth.r )
— Alex

0

Nie podajesz żadnych szczegółów co do formy funkcji fa(X); może być tak, że cząstkowa stała funkcja jest wystarczająco dobrym przybliżeniem, w którym to przypadku możesz chcieć dopasować drzewo regresji ( rpartna przykład z pakietem ). W przeciwnym razie możesz spojrzeć na pakiet earth, oprócz tego, co już zostało zasugerowane.


1
forma fa(X)wykracza poza zakres tego problemu, ale jest to dynamiczny model globalnej wegetacji opisany w załączniku Medvigy i in. 2009
— David LeBauer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.