【发布时间】: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