rbing.Op(rstiefel)
rbing.Op()所属R语言包:rstiefel
Simulate a p*p Orthogonal Random Matrix
模拟一个P * P正交随机矩阵。
译者:生物统计家园网 机器人LoveR
描述----------Description----------
Simulate a p*p random orthogonal matrix from the Bingham distribution using a rejection sampler.
模拟p*p随机正交矩阵从宾汉分布的拒绝取样器。
用法----------Usage----------
rbing.Op(A, B)
参数----------Arguments----------
参数:A
a symmetric matrix.
一个对称矩阵。
参数:B
a diagonal matrix with decreasing entries.
下降条目的对角矩阵。
值----------Value----------
A random pxp orthogonal matrix simulated from the Bingham distribution.
随机PXP正交矩阵从宾汉分布模拟。
注意----------Note----------
This only works for small matrices, otherwise the sampler
这仅适用于小矩阵,否则采样
(作者)----------Author(s)----------
Peter Hoff
参考文献----------References----------
实例----------Examples----------
Z<-matrix(rnorm(10*5),10,5) ; A<-t(Z)%*%Z
B<-diag(sort(rexp(5),decreasing=TRUE))
U<-rbing.Op(A,B)
U<-rbing.matrix.gibbs(A,B,U)
## The function is currently defined as[#功能目前被定义为]
function (A, B)
{
b <- diag(B)
bmx <- max(b)
bmn <- min(b)
if(bmx>bmn)
{
A <- A * (bmx - bmn)
b <- (b - bmn)/(bmx - bmn)
vlA <- eigen(A)$val
diag(A) <- diag(A) - vlA[1]
vlA <- eigen(A)$val
nu <- max(dim(A)[1] + 1, round(-vlA[length(vlA)]))
del <- nu/2
M <- solve(diag(del, nrow = dim(A)[1]) - A)/2
rej <- TRUE
cholM <- chol(M)
nrej <- 0
while (rej) {
Z <- matrix(rnorm(nu * dim(M)[1]), nrow = nu, ncol = dim(M)[1])
Y <- Z %*% cholM
tmp <- eigen(t(Y) %*% Y)
U <- tmp$vec %*% diag((-1)^rbinom(dim(A)[1], 1, 0.5))
L <- diag(tmp$val)
D <- diag(b) - L
lrr <- sum(diag((D %*% t(U) %*% A %*% U))) - sum(-sort(diag(-D)) *
vlA)
rej <- (log(runif(1)) > lrr)
nrej <- nrej + 1
}
}
if(bmx==bmn) { U<-rustiefel(dim(A)[1],dim(A)[1]) }
U
}
转载请注明:出自 生物统计家园网(http://www.biostatistic.net)。
注:
注1:为了方便大家学习,本文档为生物统计家园网机器人LoveR翻译而成,仅供个人R语言学习参考使用,生物统计家园保留版权。
注2:由于是机器人自动翻译,难免有不准确之处,使用时仔细对照中、英文内容进行反复理解,可以帮助R语言的学习。
注3:如遇到不准确之处,请在本贴的后面进行回帖,我们会逐渐进行修订。
|