Convolução eficiente (em R)

9

Quero calcular / avaliar a convolução

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

onde é um densidade e é uma função suave com suporte compacto . A convolução não está disponível em formato fechado e preciso integrá-la numericamente. Minha pergunta é: Existe uma maneira eficiente de fazer isso? Quero implementá-lo em R, portanto, gostaria de ver se existe uma maneira melhor do que usar o comando .fϕD integrate()

cozinhar
fonte
2
Dependendo das circunstâncias, geralmente discreto para uma grande potência de 2 posições, e uso a transformação rápida de fourier ( ?fft) ou o uso convolve. A abordagem fft exige um pouco mais de trabalho para configurar, mas é melhor se você precisar convolver várias vezes. Às vezes, leva um tempo para descobrir as configurações de argumento corretas com convolve.
Glen_b -Reinstate Monica
@Glen_b Thanks. Para uma função univariada , acho que a integração direta pode ser mais rápida, então. f
Cozinhe
2
Você pediu uma maneira eficiente - fft é realmente rápido ; requer apenas um pouco de configuração (binning, preenchimento com zeros).
Glen_b -Reinstate Monica
@Glen_b Sim, eu concordo que o fft é realmente rápido, mas a etapa anterior pode atrasar o processo. Vou comparar os dois métodos, de qualquer maneira. Obrigado.
Cozinhe
Lembro-me de usar convolvepara esse fim várias vezes. Exemplos simples de trabalho aparecem em stats.stackexchange.com/a/41263 , stats.stackexchange.com/a/41255 e stats.stackexchange.com/a/49444 .
whuber

Respostas:

9

Você deu uma olhada nos pacotes R dedicados para isso? Como convolve, https://stat.ethz.ch/R-manual/R-devel/library/stats/html/convolve.html

jmnavarro
fonte
Obrigado. Se bem entendi, este pacote é para envolver seqüências numéricas, em vez de duas funções. Estou esquecendo de algo?
Cozinhe
2
Bem, eu não usei esse pacote, mas se você estiver tentando fazer a convolução em R, basicamente terá duas seqüências numéricas que serão os valores de suas funções, não é? Eu não acho que R permita que você trabalhe com a definição de função.
Jmnavarro