- いくつかの基準カテゴリがあって、それらに遠近関係があるという。多次元だと視覚化しにくいので、2次元のしかも円周上に配置する。その上で、たくさんあるその他もろもろの点を、その基準カテゴリに帰属する「割合」を基に、その2次元円内にプロットする方法の話
- 昨日の記事でも触れた血球細胞の1細胞RNAseqの論文(こちら)から、基準カテゴリを定め、全細胞をプロットしよう、という話
d <- 2
Ng <- 7
X <- matrix(rnorm(d*Ng,0,3),ncol=d)
X[2,] <- X[1,]+rnorm(d,0,0.4)
X[4,] <- X[3,] + rnorm(d,0,0.6)
X[6,] <- X[5,] + rnorm(d,0,0.1)
n.per.gr <- sample(10:1000,Ng)
Y <- matrix(0,0,d)
for(i in 1:Ng){
tmp <- matrix(0,n.per.gr[i],d)
for(j in 1:d){
tmp[,j] <- rnorm(n.per.gr[i],X[i,j])
}
Y <- rbind(Y,tmp)
}
plot(as.data.frame(Y))
U <- matrix(0,length(Y[,1]),Ng)
for(i in 1:length(Y[,1])){
tmp <- rep(0,Ng)
for(j in 1:Ng){
tmp[j] <- 1/exp(0.5*sum((Y[i,]-X[j,])^2))
}
U[i,] <- tmp/sum(tmp)
}
plot(as.data.frame(U))
V <- t(U) %*% U
V. <- V
for(i in 1:Ng){
for(j in 1:Ng){
V.[i,j] <- V[i,j]/sum(V[i,])/sum(V[,j])
}
}
D <- exp(-1000*V.)
D
library(TSP)
tsp <- TSP(D)
tsp
tour <- solve_TSP(tsp)
ord <- c()
for(i in 1:Ng){
ord <- c(ord,tour[[i]])
}
ord <- c(ord,ord[1])
D.tour <- rep(0,Ng)
for(i in 1:Ng){
D.tour[i] <- D[ord[i],ord[i+1]]
}
a <- cumsum(D.tour)/sum(D.tour)*2*pi
x.gr <- cos(a)
y.gr <- sin(a)
xy.all <- matrix(0,sum(n.per.gr),2)
for(i in 1:Ng){
xy.all[,1] <- xy.all[,1] + U[,i] *x.gr[i]
xy.all[,2] <- xy.all[,2] + U[,i] *y.gr[i]
}
t <- seq(from=0,to=2*pi,length=1000)
x <- cos(t)
y <- sin(t)
plot(x,y,type="l")
points(x.gr,y.gr,col=1:Ng,pch=20,cex=5)
points(xy.all,pch=20,cex=0.1)