rmf.matrix(rstiefel)
rmf.matrix()所属R语言包:rstiefel
Simulate a Random Orthonormal Matrix
模拟随机正交矩阵
译者:生物统计家园网 机器人LoveR
描述----------Description----------
Simulate a random orthonormal matrix from the von Mises-Fisher distribution.
模拟一个随机正交矩阵·冯·米塞斯Fisher分布。
用法----------Usage----------
rmf.matrix(M)
参数----------Arguments----------
参数:M
a matrix.
一个矩阵。
值----------Value----------
an orthonormal matrix of the same dimension as M.
一个标准正交矩阵的相同的尺寸M。
(作者)----------Author(s)----------
Peter Hoff
参考文献----------References----------
实例----------Examples----------
## The function is currently defined as[#功能目前被定义为]
Z<-matrix(rnorm(10*5),10,5)
U<-rmf.matrix(Z)
U<-rmf.matrix.gibbs(Z,U)
function (M)
{
if (dim(M)[2] == 1) {
X <- rmf.vector(M)
}
if (dim(M)[2] > 1) {
svdM <- svd(M)
H <- svdM$u %*% diag(svdM$d)
m <- dim(H)[1]
R <- dim(H)[2]
cmet <- FALSE
rej <- 0
while (!cmet) {
U <- matrix(0, m, R)
U[, 1] <- rmf.vector(H[, 1])
lr <- 0
for (j in seq(2, R, length = R - 1)) {
N <- NullC(U[, seq(1, j - 1, length = j - 1)])
x <- rmf.vector(t(N) %*% H[, j])
U[, j] <- N %*% x
if (svdM$d[j] > 0) {
xn <- sqrt(sum((t(N) %*% H[, j])^2))
xd <- sqrt(sum(H[, j]^2))
lbr <- log(besselI(xn, 0.5 * (m - j - 1), expon.scaled = TRUE)) -
log(besselI(xd, 0.5 * (m - j - 1), expon.scaled = TRUE))
if (is.na(lbr)) {
lbr <- 0.5 * (log(xd) - log(xn))
}
lr <- lr + lbr + (xn - xd) + 0.5 * (m - j -
1) * (log(xd) - log(xn))
}
}
cmet <- (log(runif(1)) < lr)
rej <- rej + (1 - 1 * cmet)
}
X <- U %*% t(svd(M)$v)
}
X
}
转载请注明:出自 生物统计家园网(http://www.biostatistic.net)。
注:
注1:为了方便大家学习,本文档为生物统计家园网机器人LoveR翻译而成,仅供个人R语言学习参考使用,生物统计家园保留版权。
注2:由于是机器人自动翻译,难免有不准确之处,使用时仔细对照中、英文内容进行反复理解,可以帮助R语言的学习。
注3:如遇到不准确之处,请在本贴的后面进行回帖,我们会逐渐进行修订。
|