note: sans réponse correcte après un mois, j'ai republié sur SO
Contexte
J'ai un modèle, , où Y = f ( X )
est unematrice n × m d'échantillons à partir de m paramètres et Y est levecteur n × 1 des sorties du modèle.
est un calcul intensif, donc je voudrais approximer f à l' aide d'une spline cubique multivariée passant par ( X , Y ) points, afin que je puisse évaluer Y à un plus grand nombre de points.
Question
Existe-t-il une fonction R qui calculera une relation arbitraire entre X et Y?
Plus précisément, je recherche une version multivariée de la splinefun
fonction, qui génère une fonction spline pour le cas univarié.
par exemple, voici comment splinefun
fonctionne le cas univarié
x <- 1:10
y <- runif(10)
foo <- splinefun(x,y)
foo(1:10) #returns y, as example
all(y == foo(1:10))
## TRUE
Ce que j'ai essayé
J'ai examiné le package mda , et il semble que ce qui suit devrait fonctionner:
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
mais je ne pouvais trouver aucun moyen de mettre en œuvre une spline cubique mars
mise à jour depuis l'offre de la prime, j'ai changé le titre - S'il n'y a pas de fonction R, j'accepterais, par ordre de préférence: une fonction R qui génère une fonction de processus gaussienne, ou une autre fonction d'interpolation multivariée qui passe par les points de conception, de préférence dans R, sinon Matlab.
la source
Réponses:
Ce document présenté à UseR! 2009 semble résoudre un problème similaire
http://www.r-project.org/conferences/useR-2009/slides/Roustant+Ginsbourger+Deville.pdf
Il suggère le package DiceKriging http://cran.r-project.org/web/packages/DiceKriging/index.html
En particulier, vérifiez les fonctions km et prédisez.
Voici un exemple d'interpolation tridimensionnelle. Il semble simple de généraliser.
la source
Vous avez besoin de plus de données pour un ajustement spline. mgcv est en effet un bon choix. Pour votre demande spécifique, vous devez définir la spline cubique comme fonction de base bs = 'cr' et ne pas la pénaliser avec fx = TRUE. Les deux options sont définies pour un terme fluide défini avec s (). Predict fonctionne comme prévu.
la source
predict(foo,x)
à reveniry
?Vous ne donnez aucun détail sur la forme de la fonctionF( X) ; il se peut qu'une fonction constante par morceaux soit une approximation suffisamment bonne, auquel cas vous souhaiterez peut-être ajuster un arbre de régression (avec package
rpart
par exemple). Sinon, vous voudrez peut-être regarder le packageearth
, en plus de ce qui a déjà été suggéré.la source