L'enfer des nombres à virgule flottante : pourquoi votre échantillonnage normal multivarié en R n'est pas reproductible

2025-05-22
L'enfer des nombres à virgule flottante : pourquoi votre échantillonnage normal multivarié en R n'est pas reproductible

Cet article détaille le processus de débogage suivi par l'auteure pour aider ses collègues à résoudre un problème de reproductibilité dans leur code R concernant l'échantillonnage de distribution normale multivariée. Le problème ne provenait pas d'erreurs dans R ou dans le package MASS, mais des bizarreries inhérentes à l'arithmétique à virgule flottante. Malgré l'utilisation de `set.seed()` pour contrôler le générateur de nombres aléatoires (RNG), le même code a produit des résultats différents sur des machines différentes en raison d'erreurs d'arrondi à virgule flottante dans `MASS::mvrnorm()`. Une analyse approfondie a révélé que `MASS::mvrnorm()`, utilisant la décomposition en valeurs propres, est très sensible aux petites perturbations d'entrée, pouvant inverser les signes des vecteurs propres et ainsi compromettre la reproductibilité. `mvtnorm::rmvnorm()`, utilisant la décomposition de Cholesky, s'avère plus robuste. L'auteure recommande d'utiliser `mvtnorm::rmvnorm()` avec `method = "chol"` pour améliorer la reproductibilité.

Développement