- こちらで濃淡がいろいろな分布とその上のディリクレ分布のことをやっている
- こちらでフローサイトメータをやっている
- まずまずな樹状形の分布をランダム発生させてみる
- 適当に枝分かれルールを作り、枝の長さをつくり、それを順次「生やす」ことで木型を作る
- 枝は生えるところから減衰するように粗密を作る
- 作成した木は梢に行くにしたがって薄くなる折れ線木
- これに乱雑項を入れる
library(vegan)
library(GPArotation)
library(igraph)
library(rgl)
library(MCMCpack)
my.FACS.pts <- function(d,n.steps=10,n.pt.range=100:1000,NN=100,min.v=5,max.v=10,v=0.3){
X <- matrix(0,0,d)
tmp.ns <- sample(n.pt.range,n.steps,replace=TRUE)
tmp.Ls <- runif(n.steps,min.v,max.v)
for(i in 1:n.steps){
tmp.n <- tmp.ns[i]
tmp.X <- matrix(0,tmp.n,d)
tmp.L <- tmp.Ls[i]
tmp.V <- seq(from=0,to=1,length=tmp.n*NN)
tmp.prob <- (tmp.V-mean(tmp.V))^2
tmp.prob <- tmp.prob/sum(tmp.prob)
tmp.S <- tmp.V[sort(sample(1:length(tmp.V),tmp.n,replace=TRUE,prob=tmp.prob))]*tmp.L
tmp.X[,1] <- tmp.S
tmp.R <- Random.Start(d)
tmp.X <- tmp.X %*% tmp.R
if(i > 1){
tmp.st <- sample(1:length(X[,1]),1)
tmp.st.2 <- 1
st.pt <- X[tmp.st,]
connect.pt <- tmp.X[tmp.st.2,]
tmp.X <- t(t(tmp.X) + st.pt - connect.pt)
}
X <- rbind(X,tmp.X)
}
X <- X + rnorm(length(X),0,v)
X.curve <- X
for(i in 1:d){
X.curve[,i] <- sign(X.curve[,i]) * abs(X.curve[,i]^2)
}
X <- X.curve
return(X)
}
d <- 3
n.steps <- 10
n.pt.range <- 100:1000
NN <- 100
my.X <- my.FACS.pts(d,n.steps,n.pt.range,NN)
plot(as.data.frame(my.X))