Konvolusi yang efisien (dalam R)

9

Saya ingin menghitung / mengevaluasi konvolusi

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

di mana adalah kepadatan dan φ adalah fungsi mulus dengan dukungan kompak D . Konvolusi tidak tersedia dalam bentuk tertutup dan saya perlu mengintegrasikannya secara numerik. Pertanyaan saya adalah: Apakah ada cara yang efisien untuk melakukan ini? Saya ingin mengimplementasikannya di R, jadi, saya ingin melihat apakah ada cara yang lebih baik daripada menggunakan perintah .fϕD integrate()

memasak
sumber
2
Tergantung pada keadaan saya biasanya diskritisasi ke kekuatan besar 2 sampah, dan menggunakan fast fourier transform ( ?fft) atau gunakan convolve. Pendekatan fft membutuhkan sedikit lebih banyak pekerjaan untuk diatur tetapi lebih baik jika Anda perlu terlibat dengan sesuatu beberapa kali. Terkadang butuh beberapa saat untuk mengetahui pengaturan argumen yang tepat dengan berbelit-belit.
Glen_b -Reinstate Monica
@ Glen_b Terima kasih. Untuk fungsi univariat , saya pikir integrasi langsung mungkin lebih cepat. f
Masak
2
Anda meminta cara yang efisien - fft sangat cepat ; itu hanya membutuhkan sedikit pengaturan (binning, padding dengan nol).
Glen_b -Reinstate Monica
@ Glen_b Ya, saya setuju fft sangat cepat, tetapi langkah sebelumnya dapat memperlambat proses. Saya akan membandingkan kedua metode itu. Terima kasih.
Masak
Saya ingat menggunakan convolveuntuk tujuan ini beberapa kali. Contoh kerja sederhana muncul di stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 , dan stats.stackexchange.com/a/49444 .
whuber

Jawaban:

9

Sudahkah Anda melihat paket R khusus untuk itu? Seperti convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html

jmnavarro
sumber
Terima kasih. Jika saya mengerti dengan benar, paket ini adalah untuk menggabungkan urutan numerik, bukan dua fungsi. Apakah saya melewatkan sesuatu?
Masak
2
Yah, saya belum pernah menggunakan paket itu, tetapi jika Anda mencoba melakukan konvolusi dalam R, maka pada dasarnya Anda akan memiliki dua urutan numerik yang akan menjadi nilai dari fungsi Anda, bukan? Saya tidak berpikir R memungkinkan Anda bekerja dengan definisi fungsi.
jmnavarro