【问题标题】:R function pmvnorm: Why do values and errors differ every time I run this function with the same inputs?R函数pmvnorm:为什么每次使用相同的输入运行此函数时值和错误都不同?
【发布时间】:2014-03-16 09:38:12
【问题描述】:

据我了解,mvtnorm 库中的 pmvnorm 是一个在多元正态分布上计算 CDF 的函数。所以它是一个确定性函数。但是,我发现每次使用相同的输入运行此函数时,结果都会发生变化。这是一个小例子。

 library(mvtnorm)
 lower <- c( -Inf, -0.07,  0.81,  -Inf,  0.89,  -Inf,  1.33,  1.21,  -Inf)
 upper <- c( 1.00,  0.34,  0.98, -0.04,  1.07,  0.01,  1.48,  1.38,  0.09)

 sigma <- matrix(c(0.03, 0.00, -0.01, 0.00, 0.00, 0.00, 0.00, 0.00, 0.02,
                   0.00, 1.00,  0.66, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64,
                  -0.01, 0.66,  0.99, 0.66, 0.64, 0.64, 0.64, 0.64, 0.64,
                   0.00, 0.64,  0.66, 1.00, 0.66, 0.64, 0.64, 0.64, 0.64,
                   0.00, 0.64,  0.64, 0.66, 1.00, 0.66, 0.64, 0.64, 0.64,
                   0.00, 0.64,  0.64, 0.64, 0.66, 1.00, 0.66, 0.64, 0.64,
                   0.00, 0.64,  0.64, 0.64, 0.64, 0.66, 1.00, 0.66, 0.64,
                   0.00, 0.64,  0.64, 0.64, 0.64, 0.64, 0.66, 1.00, 0.66,
                   0.02, 0.64,  0.64, 0.64, 0.64, 0.64, 0.64, 0.66, 1.00),
                   byrow=TRUE,length(lower))

 set.seed(1)
 (try1 <- pmvnorm(lower=lower,upper=upper,sigma=sigma))

这给了我价值观:

 [1] 4.42436e-09
 attr(,"error")
 [1] 4.312159e-13
 attr(,"msg")
 [1] "Normal Completion"

现在我用不同的种子重新评估函数。

 set.seed(2)
 (try2 <- pmvnorm(lower=lower,upper=upper,sigma=sigma))

然后我得到:

 [1] 4.424396e-09
 attr(,"error")
 [1] 4.048187e-13
 attr(,"msg")
 [1] "Normal Completion"

 try1 == try2 

给我:

 [1] FALSE

谁能解释为什么会这样?

【问题讨论】:

    标签: r distribution gaussian normal-distribution


    【解决方案1】:

    查看?pmvnorm 中给出的第一个参考。例如http://www.math.wsu.edu/faculty/genz/papers/mvn.pdf。简而言之,pmvnorm 使用蒙特卡洛采样算法来计算多元正态分布的分布函数。

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多