Inferno de Ponto Flutuante: Por que sua Amostragem Normal Multivariada em R não é Reprodutível

Esta publicação detalha a jornada de depuração da autora ao ajudar colegas a resolver um problema de reprodutibilidade em seu código R envolvendo amostragem de distribuição normal multivariada. O problema não surgiu de erros no R ou no pacote MASS, mas sim das peculiaridades inerentes da aritmética de ponto flutuante. Apesar do uso de `set.seed()` para controlar o gerador de números aleatórios (RNG), o mesmo código produziu resultados diferentes em máquinas diferentes devido a erros de arredondamento de ponto flutuante em `MASS::mvrnorm()`. Uma análise aprofundada revelou que `MASS::mvrnorm()`, usando decomposição de autovetores, é altamente sensível a pequenas perturbações de entrada, potencialmente invertendo os sinais dos autovetores e quebrando a reprodutibilidade. `mvtnorm::rmvnorm()`, empregando decomposição de Cholesky, mostra-se mais robusta. A autora recomenda o uso de `mvtnorm::rmvnorm()` com `method = "chol"` para melhor reprodutibilidade.
Leia mais