Convolución eficiente (en R)

9

Quiero calcular / evaluar la convolución

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

donde es una densidad y es una función suave con soporte compacto . La convolución no está disponible en forma cerrada y necesito integrarla numéricamente. Mi pregunta es: ¿hay una manera eficiente de hacer esto? Quiero implementarlo en R, por lo tanto, me gustaría ver si hay una mejor manera que usar el comando .fϕD integrate()

cocinar
fuente
2
Dependiendo de las circunstancias, generalmente discretizo con una gran potencia de 2 contenedores y uso la transformación rápida de Fourier ( ?fft) o uso convolve. El enfoque fft requiere un poco más de trabajo para configurarlo, pero es mejor si necesita involucrarse con algo varias veces. A veces lleva un tiempo descubrir la configuración de argumento correcta con convolve.
Glen_b -Reinstala a Monica el
@Glen_b Gracias. Para una función univariada , creo que la integración directa puede ser más rápida, entonces. f
Cocine el
2
Usted solicitó una manera eficiente: fft es realmente rápido ; solo requiere un poco de configuración (agrupación, relleno con ceros).
Glen_b -Reinstale a Monica el
@Glen_b Sí, estoy de acuerdo en que el fft es realmente rápido, pero el paso anterior puede ralentizar el proceso. Compararé ambos métodos, de todos modos. Gracias.
Cocine el
Recuerdo haber usado convolvepara este propósito varias veces. Ejemplos de trabajo simples aparecen en stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 y stats.stackexchange.com/a/49444 .
whuber

Respuestas:

9

¿Has echado un vistazo a los paquetes R dedicados para eso? Como convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html

jmnavarro
fuente
Gracias. Si entiendo bien, este paquete es para convolucionar secuencias numéricas, en lugar de dos funciones. ¿Me estoy perdiendo de algo?
Cocine el
2
Bueno, no he usado ese paquete, pero si estás tratando de hacer la convolución en R, entonces básicamente tendrás dos secuencias numéricas que serán los valores de tus funciones, ¿no? No creo que R te permita trabajar con la definición de la función.
jmnavarro