使用mvrnorm

时间:2018-11-29 04:05:32

标签: r

我使用mvrnorm从多正态分布生成数据,均值mu <- rep(0,4)Sigma是一些正定对称矩阵。但是,我发现我正在生成的向量中的最后一个元素始终是0,关于为什么会这样的任何想法?

> mvrnorm(n = 1, mu, Sigma, tol = 1e-6, empirical = FALSE, EISPACK = FALSE)
[1]  0.1813268 -0.8993918  0.7461007  0.0000000
> mvrnorm(n = 1, mu, Sigma, tol = 1e-6, empirical = FALSE, EISPACK = FALSE)
[1] 3.2539025 2.9855514 0.7313427 0.0000000
> mvrnorm(n = 1, mu, Sigma, tol = 1e-6, empirical = FALSE, EISPACK = FALSE)
[1] -0.8133201 -1.0011971 -0.3800518  0.0000000

谢谢!

编辑:谢谢您的回答,是的,我检查了Sigma,这有问题。

1 个答案:

答案 0 :(得分:1)

原因是您的Sigmatol = 1e-6下不被认为是满分。但是,mvrnorm进行排名检测的方式有点奇怪。参见MASS::mvrnorm内部:

eS <- eigen(Sigma, symmetric = TRUE)
ev <- eS$values
if (!all(ev >= -tol * abs(ev[1L]))) 
    stop("'Sigma' is not positive definite")
X <- matrix(rnorm(p * n), n)
#[...omitted...]
X <- drop(mu) + eS$vectors %*% diag(sqrt(pmax(ev, 0)), p) %*% t(X)

代替

ev >= tol * abs(ev[1L])

确实

ev >= -tol * abs(ev[1L])

因此,必须具有负特征值才能获得秩不足。