R语言mvtnorm包pmvnorm函数返回NaN的原因及替代方案咨询
我正在将多元概率作为目标函数进行非线性优化,最初误以为问题出在优化算法上,最终定位到是mvtnorm包的使用存在问题。
问题复现代码
library(mvtnorm) pmvnorm( lower = c(-1.281552 , 7.089083, 0.5193308), upper = c(-1.200552, Inf, Inf), corr = diag(1, nrow =3) )
执行上述代码时,每10-20次就会返回NaN,而非预期的3.047822e-15。请问这是什么原因?是否存在可避免此类不稳定性的mvtnorm::pmvnorm()替代函数?
编辑补充
- 根据评论区@LMc提示,设置
seed = 10L可复现该错误 - 评论区@PBull已给出优质解答
- 评论区@Gregor Thomas提到使用
Miwa()可修复问题(但该方法会将-Inf/+Inf近似为-1e4/1e4)
会话信息
R version 4.3.1 (2023-06-16)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise LinuxMatrix products: default
BLAS: /usr/lib64/libblas.so.3.4.2
LAPACK: /usr/lib64/liblapack.so.3.4.2locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=Ctime zone: America/New_York
tzcode source: system (glibc)attached base packages:
[1] stats graphics grDevices utils datasets methods baseother attached packages:
[1] mvtnorm_1.2-4loaded via a namespace (and not attached):
[1] compiler_4.3.1 tools_4.3.1 rstudioapi_0.16.0
内容的提问来源于stack exchange,提问作者statneutrino

