CategoryVector<-function (d = 3)
{
if(d == 1){
return(matrix(1,ncol=1,nrow=1))
}
df <- d - 1
diagval <- 1:d
diagval <- sqrt((df + 1)/df) * sqrt((df - diagval + 1)/(df -
diagval + 2))
others <- -diagval/(df - (0:(d - 1)))
m <- matrix(rep(others, df + 1), nrow = df + 1, byrow = TRUE)
diag(m) <- diagval
m[upper.tri(m)] <- 0
as.matrix(m[, 1:df])
}
Simplex.Vector <- function(n){
if(n==1){
return(matrix(1,ncol=1,nrow=1))
}
X <- CategoryVector(n)
X <- cbind(rep(1/sqrt(n),n),sqrt((n-1)/n)*X)
X
}
Make.X <- function(rs){
ret <- matrix(1,ncol = 1, nrow =1)
for(i in 1:length(rs)){
ret <- Simplex.Vector(rs[i]) %x% ret
}
t(ret)
}
rs <- c(2,3)
X <- Make.X(rs)
X