使用方差矩阵和相关矩阵时,结果不同。为什么会这样?
为方便起见,我会直接写下结果。
方差矩阵 - 命名为co
0.1234 0.125
0.1250 0.245
相关矩阵 - 命名为co(由cov2cor函数制作)
1.0000 0.7189
0.7189 1.0000
结果
pmvnorm(mean = c(1,1),sigma = co,lower = rep(-Inf,2),upper = c(0.7,4)
的 0.1965493
pmvnorm(mean = c(1,1),corr = coo,lower = rep(-Inf,2),upper = c(0.7,4)
的 0.3820885
我制作了一个协方差矩阵,我们得到了一个使用协方差矩阵的相关矩阵。并且实施了这两个值,结果不同。
是代码。
install.packages( “mvtnorm”)
库(mvtnorm)
co < - 矩阵(c(0.1234,0.125,0.125,0.245),2,2)
coo&lt; - cov2cor(co)
pmvnorm(mean = c(1,1),sigma = co,lower = rep(-Inf,2),upper = c(0.7,4)
pmvnorm(mean = c(1,1),corr = coo,lower = rep(-Inf,2),upper = c(0.7,4)
请让我知道原因。
答案 0 :(得分:0)
根据?pmvnorm
(强调我的)
sigma:维数n的协方差矩阵。 'corr'或者 'sigma'可以指定。 如果给出'sigma',问题是 标准化。如果没有'corr'或'sigma',那么 单位矩阵用于'sigma'。
因此,为了使两个计算保持一致,您需要在给出相关矩阵时给出标准化上限。
# Using covariance matrix sigma
cov <- matrix(c(0.1234,0.125,0.125,0.245), 2, 2);
x1 <- pmvnorm(mean = c(1, 1), sigma = cov, lower = -Inf, upper = c(0.7, 4));
x1;
#[1] 0.1965493
#attr(,"error")
#[1] 1e-15
#attr(,"msg")
#[1] "Normal Completion"
# Using correlation matrix corr
# Note: Need to scale the upper limits
cor <- cov2cor(cov);
x2 <- pmvnorm(mean = c(0, 0), corr = cor, lower = -Inf, upper = (c(0.7, 4) - c(1, 1)) / sqrt(diag(cov)));
x2;
#[1] 0.1965493
#attr(,"error")
#[1] 1e-15
#attr(,"msg")
#[1] "Normal Completion"
PS。它有点隐藏,但?pmvnorm
包含了两种方法互补性的简单例子。
# Correlation and Covariance
a <- pmvnorm(lower=-Inf, upper=c(2,2), sigma = diag(2)*2)
b <- pmvnorm(lower=-Inf, upper=c(2,2)/sqrt(2), corr=diag(2))
stopifnot(all.equal(round(a,5) , round(b, 5)))