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.