- log-linear modelにおける期待値は次のように考える
- k次元表の各セルは、そのセルが、第1,2,...,k番目の尺度において、それぞれ番目のカテゴリであるというように指定することができる
- これをと表すことにする
- 他方、周辺度数制約の複体表現において、あるFacetを考えると、このFacetに対応する周辺度数が計算できる
- 表の任意のセルは、任意のFacet,Fの周辺度数の中に、対応する値がある。これをと書くこととする
- このとき、log-linear modelでは各セルの期待値がを満足し、が表のサンプル総数になるように調整したもの、とする
- これを関数にしてみよう
LogLinearExp<-function(Table,r,Facets){
E<-array(1,r)
address<-which(E==1,arr.ind=TRUE)
FacetList<-list()
margList<-list()
margAddress<-list()
cnt<-1
for(i in Facets){
FacetList[[cnt]]<-as.integer(i)
if(length(FacetList[[cnt]])==1){
margList[[cnt]]<-as.matrix(apply(Table,FacetList[[cnt]],sum))
}else{
margList[[cnt]]<-as.array(apply(Table,FacetList[[cnt]],sum))
}
margAddress[[cnt]]<-which(margList[[cnt]]<Inf,arr.ind=TRUE)
cnt<-cnt+1
}
for(i in 1:length(address[,1])){
for(j in 1:length(FacetList)){
short.address<-address[i,FacetList[[j]]]
if(length(short.address)==1)short.address<-c(short.address,1)
diff<-apply((t(margAddress[[j]])-short.address)^2,2,sum)
marg.address<-which(diff==0)
E[i]<-E[i]*margList[[j]][marg.address]
}
}
E<-E/sum(E)*sum(Table)
E
}
k<-3
r<-sample(2:4,k,replace=TRUE)
R<-prod(r)
A<-array(1:R,r)
s<-as.set(1:k)
powset<-set_power(s)
cnt<-1
thres<-0.1
Faces<-list()
for(i in powset){
if(runif(1)<thres){
Faces[[cnt]]<-i
cnt<-cnt+1
}
}
Facets<-MakeFacets(Faces)
print(Facets)
A.e<-LogLinearExp(A,r,Facets)
m.A<-CalcAllMarginals(A,k)
m.A.e<-CalcAllMarginals(A.e,k)
for(i in 1:length(m.A)){
in.facet<-FALSE
for(j in Facets){
if(as.set(m.A[[i]]$elems) <= j){
in.facet<-TRUE
}
}
if(in.facet){
print("in facet")
}else{
print("not in facet")
}
print(m.A[[i]])
print(m.A.e[[i]])
}