- 多次元分割表の尺度別カテゴリ数がであるときの、表のセルの総数はである
- このような表にの行列を次のように与える
- 個の尺度の集合のべき集合の個の要素ごとに、それらが作る複合カテゴリ個に対応させた、長さのベクトルが算出されている
- 元の次元分割表の個のセルは個の複合カテゴリのいずれかに対応するので、それぞれのセルに対応する長さのベクトルを与える
- これにより、の行列ができる
- このようにしてできる行列をすべてのに関して連ねることで、行列ができる。ただし、上記では、の要素の一つであるに対応する記載がないが、これは、すべての要素が1であるような長さのベクトルであるとする
- これをRで算出する
ns<-c(2,4)
CV<-list()
for(i in 1:length(ns)){
CV[[i]]<-CategoryVector(ns[i])
}
t<-array(1,ns)
taddress<-which(t>0,arr.ind=TRUE)
R<-prod(ns)
CVext<-list()
for(i in 1:length(ns)){
tmp<-matrix(0,length(CV[[i]][1,]),R)
for(j in 1:R){
tmp[,j]<-CV[[i]][taddress[j,i],]
}
CVext[[i]]<-tmp
}
s<-as.set(1:length(ns))
ps<-set_power(s)
X<-NULL
Y<-NULL
cnt<-1
for(i in ps){
if(set_is_empty(i)){
tmpX<-rep(1,R)
}else{
tmplist<-c()
for(j in i){
tmplist<-c(tmplist,j)
}
N<-length(tmplist)
tmpX<-NULL
if(N==1){
tmpX<-CVext[[tmplist]]
}else{
initX<-CVext[[tmplist[1]]]
vals<-NULL
for(j in 1:R){
tmpvals<-initX[,j]
print(tmpvals)
for(k in 2:N){
tmpvals<-outer(tmpvals,CVext[[tmplist[k]]][,j],FUN="*")
}
tmpvals<-c(tmpvals)
}
tmpX<-t(vals)
}
}
if(is.null(dim(tmpX)))tmpX<-matrix(tmpX,nrow=1)
Y<-rbind(Y,tmpX)
X[[cnt]]<-tmpX
cnt<-cnt+1
}
Y
X
v2<-runif(R)
P<-Y%*%v2
sum(v2^2)
sum((solve(Y)%*%P)^2)
-
- ns=c(2,3,4,2)の場合のXのイメージを見てみよう