如何计算R中的多元正态分布函数

如何计算R中的多元正态分布函数,r,normal-distribution,R,Normal Distribution,这是我尝试的,利用这个包 样本数据集 库(mvtnorm) 种子集(2357) df首先,您不需要模拟任何东西来研究pmvnorm函数: pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf), mean=c(80,0,0), corr=diag(rep(1,3))) 结果是0.5,正如您预期的那样 你的平均向量大约是(79,0,0),所以让我们试试: pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf)

这是我尝试的,利用这个包

样本数据集
库(mvtnorm)
种子集(2357)

df首先,您不需要模拟任何东西来研究
pmvnorm
函数:

pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf), mean=c(80,0,0), corr=diag(rep(1,3)))
结果是
0.5
,正如您预期的那样

你的平均向量大约是
(79,0,0)
,所以让我们试试:

pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf), mean=c(79,0,0), corr=diag(rep(1,3)))
现在的结果是
0.8413447
。没什么事。通过只指定相关矩阵,您告诉软件假定所有方差都是统一的。在您的模拟中,方差分别为400、25和25:与您在参数中指定的值非常不同

正确的计算使用数据的协方差矩阵,而不是其相关矩阵:

pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf), mean=means, sigma=cov(df))

结果是
0.5178412
,与数据完全一致。

@Frank感谢您的帮助编辑。我会在以后的帖子中记住大会!
pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf), mean=c(79,0,0), corr=diag(rep(1,3)))
pmvnorm(lower=rep(-Inf, 3), upper=c(80, Inf, Inf), mean=means, sigma=cov(df))