- CRANのphomページ
- phomパッケージが準拠しているのは、こちらのToplogy and Data by G. Carlsson
- phomパッケージがすること
- 空間の点の集合として得られたデータを用いる
- (単体的)複体を構成
- 複体のホモロジーを計算する
- phomパッケージの複体構成法
- Vietoris-Rips
- Lazy-Witness
- Vietoris-Rips
- 2点間の「距離」が指定値以下であるような2点間のみを連結する
- できた森から(単体的)複体の条件に合うように、2次元以上の複体の構成を決める
- Lazy-Witness
- Vietoris-Ripsよりノイズの影響に対して強い
- 比較的少数の代表点がトポロジーを決めるのでは、という考えに基づいた構成法
- ある閾値によって、「入っている・入っていない」の判断をしながら構成する
- 構成しながら、「すでに構成体に入っている点」は相手にせず、作業行程でつながっていない点を入れていく
- Homologyを計算する
- 複体ができると、そのホモロジーを計算することになる
- その作業は「filtered chain complexのホモロジー計算」と呼ばれるものである(らしい)
- トポロジー代数がこの背景の諸々を支えている(が、使えればいいので、ブラックボックス化して使おう)
- Homology計算では
- dim 0は位相空間の数、dim 1は、穴、dim 2はさらに高次の穴…
- interval値が大きいほど「本物らしさ」が大きい
- 2次元円の中空の度合いを変化させたときの、次元別のintervalの値の変化を見よう
- 右に行くにつれ、円周になっていく
- 最上段はその様子
- 中段は、dim 0 のinterval
- 下段は、dim 1 のinterval
- 一つながりの位相空間であることは、dim 0 のintervalが比較的大きいものが1つだけある(しかも、中空の程度に寄らず)ことが示されている
- dim 1(円)が一つあることが、右に行くほど確実になっていることがdim 1のintervalの大きくなることで示されている


- 3次元球とその中空化。点の数が少ないと、3次元球の中空というよりも、2次元円がたくさんある(3次元球面上の円がたくさん見つかる)ような推定結果になる(Npt=100とかだと)
- 点の数を増やすとdim 2 が1つ見つかるようになる

library(phom)
k<-2
Npt<-100
r1<-1
r2s<-seq(from=0,to=1,length=5)
max.dim<-2
max.f<-0.7
intervals<-list()
par(ask=FALSE)
par(mfcol=c(3,5))
for(i in 1:length(r2s)){
r2<-r2s[i]
rs<-runif(Npt,min=r2,max=r1)
d<-matrix(rnorm(k*Npt),ncol=k)
d<-d/sqrt(apply(d^2,1,sum))*rs
intervals[[i]]<-pHom(d,max.dim,max.f,mode="lw",metric="euclidean")
plot(d)
for(j in 0:max.dim){
title.st<-paste("dim",j)
plotBarcodeDiagram(intervals[[i]],j,max.f,title=title.st)
}
}
par(mfcol=c(1,1))
r1<-1
r2s<-seq(from=0,to=1,length=5)
max.dim<-2
max.f<-0.8
intervals<-list()
par(ask=FALSE)
par(mfcol=c(2,5))
for(i in 1:length(r2s)){
r2<-r2s[i]
rs<-runif(Npt,min=r2,max=r1)
d<-matrix(rnorm(k*Npt),ncol=k)
d<-d/sqrt(apply(d^2,1,sum))*rs
intervals[[i]]<-pHom(d,max.dim,max.f,mode="lw",metric="euclidean")
plot(d)
for(j in 0:max.dim){
title.st<-paste("dim",j)
}
plotPersistenceDiagram(intervals[[i]],max.dim,max.f,title=title.st)
}
par(mfcol=c(1,1))
library(phom)
k<-3
Npt<-500
r1<-1
r2s<-seq(from=0,to=1,length=5)
max.dim<-k
max.f<-0.6
intervals<-list()
par(ask=FALSE)
par(mfcol=c(2,5))
for(i in 1:length(r2s)){
r2<-r2s[i]
rs<-runif(Npt,min=r2,max=r1)
d<-matrix(rnorm(k*Npt),ncol=k)
d<-d/sqrt(apply(d^2,1,sum))*rs
intervals[[i]]<-pHom(d,max.dim,max.f,mode="lw",metric="euclidean")
plot(d)
for(j in 0:max.dim){
title.st<-paste("dim",j)
}
plotPersistenceDiagram(intervals[[i]],max.dim,max.f,title=title.st)
}
par(mfcol=c(1,1))