Effiziente Faltung (in R)

9

Ich möchte die Faltung berechnen / bewerten

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

wobei eine Dichte und ist eine glatte Funktion mit kompaktem Träger . Die Faltung ist nicht in geschlossener Form verfügbar und ich muss sie numerisch integrieren. Meine Frage ist: Gibt es einen effizienten Weg, dies zu tun? Ich möchte es in R implementieren, also würde ich gerne sehen, ob es einen besseren Weg gibt als den Befehl zu verwenden .ϕ D.fϕD integrate()

Koch
quelle
2
Abhängig von den Umständen diskretisiere ich normalerweise entweder auf eine große Potenz von 2 Bins und verwende die schnelle Fourier-Transformation ( ?fft) oder verwende convolve. Das Einrichten des fft-Ansatzes erfordert etwas mehr Arbeit, ist jedoch besser, wenn Sie sich mehrmals mit etwas zusammenschließen müssen. Manchmal dauert es eine Weile, um mit convolve die richtigen Argumenteinstellungen herauszufinden.
Glen_b -State Monica
@Glen_b Danke. Für eine univariate Funktion denke ich, dass die direkte Integration dann schneller sein kann. f
Koch
2
Sie haben nach einem effizienten Weg gefragt - fft ist sehr schnell ; Es erfordert nur ein wenig Setup (Binning, Auffüllen mit Nullen).
Glen_b -Reinstate Monica
@Glen_b Ja, ich bin damit einverstanden, dass das fft sehr schnell ist, aber der vorherige Schritt kann den Prozess verlangsamen. Ich werde sowieso beide Methoden vergleichen. Vielen Dank.
Koch
Ich erinnere mich, convolvedass ich es mehrmals für diesen Zweck verwendet habe. Einfache Arbeitsbeispiele finden Sie unter stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 und stats.stackexchange.com/a/49444 .
whuber

Antworten:

9

Haben Sie sich dafür spezielle R-Pakete angesehen? Wie convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html

jmnavarro
quelle
Vielen Dank. Wenn ich das richtig verstehe, dient dieses Paket eher zum Falten numerischer Sequenzen als zu zwei Funktionen. Vermisse ich etwas
Koch
2
Nun, ich habe dieses Paket nicht verwendet, aber wenn Sie versuchen, die Faltung in R durchzuführen, haben Sie im Grunde zwei numerische Sequenzen, die die Werte Ihrer Funktionen sind, nicht wahr? Ich glaube nicht, dass Sie mit R mit der Funktionsdefinition arbeiten können.
jmnavarro