Convoluzione efficiente (in R)


9

Voglio calcolare / valutare la convoluzione

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

dove è una densità e è una funzione regolare con supporto compatto . La convoluzione non è disponibile in forma chiusa e devo integrarla numericamente. La mia domanda è: esiste un modo efficace per farlo? Voglio implementarlo in R, quindi, vorrei vedere se c'è un modo migliore che usare il comando .ϕ DfϕD integrate()


2
A seconda delle circostanze, di solito o discretizzo a una grande potenza di 2 bin, e uso la trasformata veloce di Fourier ( ?fft) o uso convolve. L'approccio fft richiede un po 'più di lavoro per la configurazione, ma è meglio se è necessario interagire con qualcosa più volte. A volte ci vuole un po 'per capire le giuste impostazioni degli argomenti con convolve.
Glen_b -Restate Monica

@Glen_b Grazie. Per una funzione univariata , penso che l'integrazione diretta possa essere più veloce, quindi. f
Cucina il

2
Hai chiesto un modo efficiente - fft è veramente veloce ; richiede solo un po 'di installazione (binning, riempimento con zeri).
Glen_b -Restate Monica

@Glen_b Sì, sono d'accordo che la FFT è davvero veloce, ma il passaggio precedente potrebbe rallentare il processo. Metterò a confronto entrambi i metodi, comunque. Grazie.
Cucina il

Ricordo di aver usato convolvepiù volte a questo scopo. Semplici esempi di lavoro compaiono su stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 e stats.stackexchange.com/a/49444 .
whuber

Risposte:


9

Hai dato un'occhiata a pacchetti R dedicati per questo? Ad esempio convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html


Grazie. Se ho capito bene, questo pacchetto è per contrapporre sequenze numeriche, piuttosto che due funzioni. Mi sto perdendo qualcosa?
Cucina il

2
Bene, non ho usato quel pacchetto, ma se stai cercando di fare la convoluzione in R, allora in pratica avrai due sequenze numeriche che saranno i valori delle tue funzioni, no? Non credo che R ti permetta di lavorare con la definizione della funzione.
jmnavarro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.