Efektywny splot (w R)


9

Chcę obliczyć / ocenić splot

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

gdzie oznacza gęstość i jest gładka funkcja o zwartym nośniku . Splot nie jest dostępny w formie zamkniętej i muszę go zintegrować numerycznie. Moje pytanie brzmi: czy jest na to skuteczny sposób? Chcę zaimplementować go w języku R, więc chciałbym sprawdzić, czy istnieje lepszy sposób niż użycie polecenia .fϕD integrate()


2
W zależności od okoliczności zwykle dyskretyzuję do dużej potęgi 2 pojemników i używam szybkiej transformacji Fouriera ( ?fft) lub używam convolve. Podejście do fft wymaga nieco więcej pracy, ale jest lepsze, jeśli musisz coś z sobą skręcić kilka razy. Czasami znalezienie konwójnych ustawień argumentów zajmuje trochę czasu.
Glen_b

@Glen_b Dzięki. Myślę, że w przypadku funkcji jednowymiarowej bezpośrednia integracja może być szybsza. f
Gotuj

2
Prosiłeś o skuteczny sposób - fft jest naprawdę szybki ; wymaga tylko trochę konfiguracji (binowanie, wypełnianie zerami).
Glen_b

@Glen_b Tak, zgadzam się, że fft jest naprawdę szybki, ale poprzedni krok może spowolnić proces. W każdym razie porównam obie metody. Dziękuję Ci.
Gotuj

Pamiętam, że użyłem convolvedo tego celu kilka razy. Proste przykłady działania są dostępne na stronie stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 oraz stats.stackexchange.com/a/49444 .
whuber

Odpowiedzi:


9

Przyjrzałeś się do tego dedykowanym pakietom R? Jak convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html


Dzięki. Jeśli dobrze rozumiem, ten pakiet służy do konwertowania sekwencji numerycznych zamiast dwóch funkcji. Czy coś brakuje?
Gotuj

2
Cóż, nie korzystałem z tego pakietu, ale jeśli próbujesz przeprowadzić splot w R, to w zasadzie będziesz mieć dwie sekwencje liczbowe, które będą wartościami z twoich funkcji, prawda? Nie sądzę, że R pozwala ci pracować z definicją funkcji.
jmnavarro
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.