Passender multivariater, natürlicher kubischer Spline


17

Anmerkung: keine richtigen Antworten nach einem Monat habe ich zu reposted SO

Hintergrund

Ich habe ein Modell, , wobeifY=f(X)

X ist eine Matrix von Abtastwerten aus Parametern und ist der Vektor von Modellausgaben.m Y n × 1n×mmYn×1

f ist rechenintensiv, daher möchte ich mit einem multivariaten kubischen Spline durch Punkte approximieren , damit ich an einer größeren Anzahl von Punkten auswerten kann .( X , Y ) Yf(X,Y)Y.

Frage

Gibt es eine R-Funktion, die eine beliebige Beziehung zwischen X und Y berechnet?

Insbesondere suche ich nach einer multivariaten Version der splinefunFunktion, die eine Spline-Funktion für den univariaten Fall generiert.

zB splinefunfunktioniert dies für den univariaten Fall

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

Was ich probiert habe

Ich habe das mda- Paket überprüft , und es scheint, dass Folgendes funktionieren sollte:

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

aber ich konnte keinen Weg finden, einen Cubic-Spline in zu implementieren mars

Update seit dem Angebot der Prämie, änderte ich den Titel - Wenn es keine R-Funktion gibt, würde ich in der Reihenfolge der Präferenz akzeptieren: eine R-Funktion, die eine Gaußsche Prozessfunktion ausgibt, oder eine andere multivariate Interpolationsfunktion, die vorzugsweise durch die Konstruktionspunkte geht in R, sonst Matlab.


versuchen gam () -Funktion, es ermöglicht jede Dimension von kubischen Splines
— user5563

Antworten:


11

Dieses Papier präsentiert bei UseR! 2009 scheint ein ähnliches Problem anzugehen

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

Es wird das DiceKriging-Paket http://cran.r-project.org/web/packages/DiceKriging/index.html vorgeschlagen

Insbesondere die Funktionen km prüfen und vorhersagen.

Hier ist ein Beispiel für eine dreidimensionale Interpolation. Die Verallgemeinerung scheint unkompliziert zu sein.

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

Sie benötigen mehr Daten für eine Spline-Anpassung. mgcv ist in der Tat eine gute Wahl. Für Ihre spezielle Anforderung müssen Sie den kubischen Spline als Basisfunktion bs = 'cr' festlegen und ihn auch nicht mit fx = TRUE bestrafen lassen. Beide Optionen werden für einen glatten Term festgelegt, der mit s () festgelegt wird. Predict funktioniert wie erwartet.

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)

Vielen Dank für Ihre Hilfe, aber wenn dies ein kubischer Spline wäre, sollte ich nicht damit rechnen predict(foo,x), zurückzukehren y?
— David LeBauer

Sorry, habe nicht bemerkt, dass du eine perfekte Annäherung willst. Dann hilft mgcv scheinbar nicht viel: stop ("Basis verarbeitet nur 1D-Smooths") (von svn.r-project.org/R-packages/trunk/mgcv/R/smooth.r )
— Alex

0

Sie machen keine Angaben zur Form der Funktion ; Möglicherweise ist eine stückweise konstante Funktion eine ausreichend gute Annäherung. In diesem Fall möchten Sie möglicherweise einen Regressionsbaum anpassen ( z. B. mit Paket ). Andernfalls möchten Sie möglicherweise zusätzlich zu den bereits vorgeschlagenen Paketen das Paket betrachten .f(X)rpartearth


1
Die Form von sprengt den Rahmen dieses Problems, ist jedoch ein dynamisches globales Vegetationsmodell, das im Anhang von Medvigy et al. 2009f(X)
— David LeBauer,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.