создать мульти-нормальные данные в R, используя mvrnorm - PullRequest
0 голосов
/ 29 ноября 2018

Я использовал 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 голосов
/ 29 ноября 2018

Причина в том, что ваш Sigma не считается полным рангом под tol = 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])

Поэтому для получения дефицита ранга у вас должны быть отрицательные собственные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...