Функция R pmvnorm: почему значения и ошибки различаются каждый раз, когда я запускаю эту функцию с одними и теми же входными данными?

Насколько я понимаю, pmvnorm в библиотеке mvtnorm - это функция для вычисления 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

Кто-нибудь может объяснить, почему это происходит?


person FairyOnIce    schedule 17.02.2014    source источник


Ответы (1)


Ознакомьтесь с первой ссылкой в ​​?pmvnorm. Например, на http://www.math.wsu.edu/faculty/genz/papers/mvn.pdf. Короче говоря, pmvnorm использует алгоритм выборки Монте-Карло для вычисления функции распределения многомерного нормального распределения.

person shadow    schedule 17.02.2014