浮動小数点地獄:Rでの多変量正規分布サンプリングが再現不可能な理由
2025-05-22
この記事では、著者が同僚が抱えていた、多変量正規分布サンプリングに関するRコードの再現性問題を解決する過程について説明しています。問題は、RやMASSパッケージのバグではなく、浮動小数点演算の固有の特性に起因していました。`set.seed()`を使用して乱数生成器(RNG)を制御していたにもかかわらず、`MASS::mvrnorm()`における浮動小数点の丸め誤差により、同じコードが異なるマシンで異なる結果を生成しました。詳細な分析の結果、固有値分解を使用する`MASS::mvrnorm()`は、小さな入力摂動に対して非常に敏感であり、固有ベクトルの符号が反転して再現性が損なわれる可能性があることが分かりました。一方、Cholesky分解を使用する`mvtnorm::rmvnorm()`はより堅牢であることが判明しました。著者は、再現性を向上させるために`mvtnorm::rmvnorm()`を`method = "chol"`と共に使用することを推奨しています。
開発