- こちらなどでpermutohedronについて書いた
- パーミュテーション(順列)はマルチプルテスティングでも用いる
- 順列が多次元空間でどのように配置されるかは、気にしているところ(こちらなど)
- そんなパーミュテーションが多次元球面配置されるのだが、その「座標」を求める方法とその図示がこちら
- たとえば、人のケースコントロールスタディではの組み合わせをパーミュテーショナルに発生させる。そのような、組み合わせがもたらす分割表に対応する点も球面に配置できる。
CategoryVector<-
function (nc = 3)
{
df <- nc - 1
d <- df + 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])
}
n1<-3
n2<-2
N<-n1+n2
X<-CategoryVector(N)
library(gtools)
c<-combinations(N,n1)
p<-matrix(0,length(c[,1]),N)
for(i in 1:length(c[,1])){
p[i,c[i,]]<-1
}
Ph<-p%*%X
library(rgl)
Emax<-1000000
Ecounter<-0
E<-NULL
DifID<-NULL
for(i in 1:(length(p[,1])-1)){
for(j in (i+1):length(p[,1])){
tmp<-p[i,]-p[j,]
Ecounter<-Ecounter+1
if(length(which(tmp==0))==N-2 & length(which(abs(tmp)==1))==2){
E<-rbind(E,Ph[i,])
E<-rbind(E,Ph[j,])
DifID<-rbind(DifID,sort(which(abs(tmp)==1)))
}
if(Ecounter==Emax){
break
}
}
if(Ecounter==Emax){
break
}
}
plot3d(Ph[,1],Ph[,2],Ph[,3])
C<-DifID%*% matrix(c(1,N+1),2,1)
segments3d(E[,1:3],col=rainbow(C),lwd=3)
image(Ph%*%t(Ph))