부동소수점 지옥: R에서 다변량 정규 분포 샘플링이 재현 불가능한 이유
2025-05-22

이 글에서는 저자가 동료들이 겪었던 다변량 정규 분포 샘플링 관련 R 코드의 재현성 문제를 해결하는 과정을 설명합니다. 문제는 R이나 MASS 패키지의 버그 때문이 아니라 부동소수점 연산의 고유한 특성 때문이었습니다. `set.seed()`를 사용하여 난수 생성기(RNG)를 제어했음에도 불구하고, `MASS::mvrnorm()`의 부동소수점 반올림 오차로 인해 동일한 코드가 서로 다른 머신에서 다른 결과를 생성했습니다. 자세한 분석 결과, 고유값 분해를 사용하는 `MASS::mvrnorm()`은 작은 입력 섭동에 매우 민감하여 고유벡터의 부호가 반전되어 재현성이 저하될 수 있다는 것을 알게 되었습니다. 반면, Cholesky 분해를 사용하는 `mvtnorm::rmvnorm()`은 더욱 강력한 것으로 나타났습니다. 저자는 재현성을 높이기 위해 `method = "chol"`과 함께 `mvtnorm::rmvnorm()`을 사용할 것을 권장합니다.
개발
부동소수점 연산