Random Exchangeable Partitions

  • Random Exchangeable Partitions
    • Partition(分割)を考える
      • 何を分割するのかが問題になる。ある正の整数Nを分割する。このとき\{1,2,...,N\}という集合を排他的な部分集合に分割する、という考え方もあるが、それだと、「1から正の整数Nまでの整数集合を分割する」と表現する方がより正確であることを考えると、「正の整数Nを分割する」というときには、それを\{n_1,...,n_k\};\sum n_i = Nという分割を指すと考えるたい。いわゆる整数分割である
    • Exchangeable(交換可能)とは
      • 長さNの数字列をいろいろに分割した集合を考えた時に、分割した後で、1,2,...,Nの数の並びをシャッフルしてできる分割の集合が、元の分割の集合とシャッフル後の分割の集合とが分布として同じになるとき、この分割の作り方とその作り方によって作られる分割の集合が、「交換可能〜交換しても分布として同じ」と言う
    • Randomとは
      • 上記で、分割の作り方のことを書いたがその作り方が、ランダムである・確率過程的である、ということ
  • 有限のRandom Exchangeable Partitionsを悉皆列挙するとすれば…
library(partitions)
N <- 3
# 整数分割
prts <- parts(N)
prts
# 整数分割ごとに分割画分の成分を表示
for(i in 1:length(prts[1,])){
	tmp <- prts[,i]
	tmp. <- cumsum(tmp)
	tmp.. <- tmp.[which(tmp!=0)]
	print("---")
	print((1:N)[1:tmp..[1]])
	if(length(tmp..)>1){
		for(j in 2:length(tmp..)){
			print((1:N)[(tmp..[j-1]+1):tmp..[j]])
		}
	}
}
# 順列
prms <- perms(N)
# ある順列でシャッフルした場合の成分列挙
# 分割画分の成分は亜集合として同一

for(i in 1:length(prts[1,])){
	tmp <- prts[,i]
	tmp. <- cumsum(tmp)
	tmp.. <- tmp.[which(tmp!=0)]
	print("---")
	print((prms[,2])[1:tmp..[1]])
	if(length(tmp..)>1){
		for(j in 2:length(tmp..)){
			print((prms[,2])[(tmp..[j-1]+1):tmp..[j]])
		}
	}
}
> prts
          
[1,] 3 2 1
[2,] 0 1 1
[3,] 0 0 1

[1] "---"
[1] 1 2 3
[1] "---"
[1] 1 2
[1] 3
[1] "---"
[1] 1
[1] 2
[1] 3


[1] "---"
[1] 1 3 2
[1] "---"
[1] 1 3
[1] 2
[1] "---"
[1] 1
[1] 3
[1] 2