Вот код:
function (n = 1, mu, Sigma, tol = 1e-06, empirical = FALSE, EISPACK = FALSE)
{
p <- length(mu)
if (!all(dim(Sigma) == c(p, p)))
stop("incompatible arguments")
if (EISPACK)
stop("'EISPACK' is no longer supported by R", domain = NA)
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)
if (empirical) {
X <- scale(X, TRUE, FALSE)
X <- X %*% svd(X, nu = 0)$v
X <- scale(X, FALSE, TRUE)
}
X <- drop(mu) + eS$vectors %*% diag(sqrt(pmax(ev, 0)), p) %*%
t(X)
nm <- names(mu)
if (is.null(nm) && !is.null(dn <- dimnames(Sigma)))
nm <- dn[[1L]]
dimnames(X) <- list(nm, NULL)
if (n == 1)
drop(X)
else t(X)
}
Строка, которая мне интересна, такова:
x <- eS$vectors %*% diag(sqrt(ev)) %*% t(x) # ignoring drop(mu)
...
t(x)
Почему
X ^ T =UVZ ^ T, где Z - стандартизированный MVN?
Я думал, что это будет X = UVZ, где X ~ MVN (0, UV (I) (UV) ^ T) = MVN (0,Сигма)?
В ответ на ответ Сион Тхе Гоха:
Я могу видеть алгебру, и она работает только так, просто рассматривая измерения, но весь акттранспонирование всего кажется странным, учитывая свойства многовариантной нормали.То есть X = UVZ
Я провел некоторое рецензирование и обнаружил, что на самом деле это Matrix Normal , и аффинное преобразование там работает аналогичным образом.То есть X = Z (UV) ^ T.
Я не уверен, есть ли что-то глупое, что мне не хватает в понимании этого или я упускаю картину полностью, почему все транспонированов отношении, скажем, аффинного преобразования Википедии MVN