Nr<-sample(2:10,1)
Nc<-sample(2:10,1)
library(MCMCpack)
Pr<-rdirichlet(1,rep(1,Nr))
Pc<-rdirichlet(1,rep(1,Nc))
Pmat<-t(Pr) %*% Pc
Pmat
qr(Pmat)$rank
- m次元分割表の正確確率検定について考える
- m次元ある
- 各次元にカテゴリある
- 複合カテゴリはある
- この種類あるカテゴリの生起確率をとすれば、であって、これは、正単体(頂点数がで次元空間にある正単体)の内部として表される
- 今、m次元分割表があって、その周辺度数が与えられたとき、上のどこの点なら、OKかには制約があるはず
- その制約を数学的に書き記すことを考える
- 簡単な例から入る方がわかりやすいので、の例で考える
- 今、周辺が決まっていれば、なるがある
- 行列の代わりに、その対数をとったものを成分とする行列を考える
- に気を付ければ
- さらに
- と変形できる
- ここで、0,1でできた行列は成分数がである。これを、その長さのベクトルに見立てて考えれば
- と
- を使って
- と表すことができる(も長さのベクトルにしてある)
- 周辺度数を等しくするm次元分割表が2つあるとき、その表成分を長さのベクトルにしてものはとなる。このような表の集合はのfiberと呼ぶ
- 対数が出てきたのは、確率の積を和の計算に変えて、行列計算に持ち込めるから(でもある)
- 途中からの説明は、に限定していないので、がは任意の説明として受け取れるだろう
- さて。実際の観測表がであるとする。これと周辺度数を等しくする表はを等しくするものとする
- そのような観測をする生起確率は
-
- これは、行列とベクトルの計算について、少し気を付けて式変形をすると得られる
- 正確な生起確率が計算できた
- これを、fiberの成分のすべての表の生起確率の和に対する比率にすると、の出てこない式が得られる
- 言い換えると、観察テーブルのセルの値と、fiberに含まれるテーブルのセルの値とだけで計算できることになる
- まず、fiberの成分のすべての表の生起確率の和を出そう
- であるから
- ここでとして0,1からなる特殊な行列を使ったが、すべてのセルが分割表的に平等な扱いになるような条件を満足すればよく、その条件は、行列Aのすべての列の和が等しいという条件(らしい)
- ちょっとRメモ
n<-2
rs<-sample(2:4,n,replace=TRUE)
R<-prod(rs)
A<-matrix(0,n,R)
N<-100
for(i in 1:R){
s<-sample(1:n,N,replace=TRUE)
A[,i]<-c(tabulate(s,nbins=n))
}
A
Arr<-array(0,rs)
address<-which(Arr==0,arr.ind=TRUE)
A<-matrix(0,sum(rs),R)
counter<-1
for(i in 1:n){
for(j in 1:rs[i]){
these<-which(address[,i]==j)
A[counter,these]<-1
counter<-counter+1
}
}
A
g<-rnorm(length(A[,1]))
logp<-t(A)%*%g
p<-exp(logp)
p<-p/sum(p)
p
- 正確確率は、場合の数が大きすぎてできないが、モンテカルロで近似はできる
- その時に使うのが、マルコフ基底、メトロポリス-ヘイスティング サンプリング
- 周辺度数を守るようにしか動けないので、そのような動きを取りまとめたのがマルコフ基底
- OKな動きのうち、どの動きをするかをランダムに決め、そのうえで、動くか動かないかに関して、位置の相対的な生起確率に基づいて確率的に決める動きが、メトロポリス-ヘイスティング。これをすることで、をくまなく、生起確率に応じてサンプリングすることができる
- こちらに続く