Anmerkung: keine richtigen Antworten nach einem Monat habe ich zu reposted SO
Hintergrund
Ich habe ein Modell, , wobei
ist eine Matrix von Abtastwerten aus Parametern und ist der Vektor von Modellausgaben.m Y n × 1
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 ) Y
Frage
Gibt es eine R-Funktion, die eine beliebige Beziehung zwischen X und Y berechnet?
Insbesondere suche ich nach einer multivariaten Version der splinefun
Funktion, die eine Spline-Funktion für den univariaten Fall generiert.
zB splinefun
funktioniert 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.
quelle
Antworten:
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.
quelle
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.
quelle
predict(foo,x)
, zurückzukehreny
?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)
rpart
earth
quelle