Convolution efficace (en R)

9

Je veux calculer / évaluer la convolution

g(x)=Df(xt)ϕ(t)dt,

où est une densité et est une fonction lisse à support compact . La convolution n'est pas disponible sous forme fermée et je dois l'intégrer numériquement. Ma question est: existe-t-il un moyen efficace de le faire? Je veux l'implémenter dans R, donc, je voudrais voir s'il y a une meilleure façon que d'utiliser la commande .ϕ DfϕD integrate()

cuisinier
la source
2
Selon les circonstances, je discrète généralement sur une grande puissance de 2 cases et j'utilise la transformée de Fourier rapide ( ?fft) ou j'utilise convolve. L'approche fft prend un peu plus de travail à mettre en place, mais est meilleure si vous avez besoin de convoluer avec quelque chose plusieurs fois. Parfois, il faut un certain temps pour déterminer les bons paramètres d'argument avec convolve.
Glen_b -Reinstate Monica
@Glen_b Merci. Pour une fonction univariée , je pense que l'intégration directe peut alors être plus rapide. f
Cuisinier
2
Vous avez demandé un moyen efficace - fft est vraiment rapide ; cela nécessite juste un peu de configuration (binning, padding avec des zéros).
Glen_b -Reinstate Monica
@Glen_b Oui, je suis d'accord que le fft est vraiment rapide, mais l'étape précédente peut ralentir le processus. Je vais quand même comparer les deux méthodes. Je vous remercie.
Cuisinier
Je me souviens avoir utilisé convolveà cette fin plusieurs fois. Des exemples de travail simples apparaissent sur stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 et stats.stackexchange.com/a/49444 .
whuber

Réponses:

9

Avez-vous jeté un œil aux packages R dédiés pour cela? Comme convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html

jmnavarro
la source
Merci. Si je comprends bien, ce package est destiné à convoluer des séquences numériques, plutôt que deux fonctions. Suis-je en train de manquer quelque chose?
Cuisinier
2
Eh bien, je n'ai pas utilisé ce paquet, mais si vous essayez de faire la convolution dans R, vous aurez essentiellement deux séquences numériques qui seront les valeurs de vos fonctions, n'est-ce pas? Je ne pense pas que R vous permette de travailler avec la définition de la fonction.
jmnavarro