- ファジィマルチ集合は要素に確率を持たせることができる
- メンデルの法則の処理にこれを使えるかどうかを試してみる
p<-matrix(
c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15,16,17,18,19,
0, 0, 0, 0, 2, 2, 4, 4, 6, 6, 0, 0, 12, 13,13,13,13,13,13,
0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 0, 0, 11, 10,10,10,10,10,10,
0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1,1,1,1,1,1,
3,1,1,1,3,1,1,1,1,2,1,1,2,1,1,1,1,1,1),
ncol=5)
A<-c( "20", "21", "22", "23")
P<-runif(length(A))
P<-P/sum(P)
g<-matrix(c("0", "0",
"20", "21",
"22", "21",
"20", "21",
"0" , "0" ,
"21", "21",
"20", "21",
"20", "21",
"21", "21",
"0" , "0" ,
"21", "20",
"23", "23",
"0" , "0" ,
"23", "21",
"21", "21",
"23", "21",
"21", "21",
"23", "21",
"23", "21"),
ncol=2,byrow=TRUE)
# さあやってみよう
library(sets)
unknown="0"
S<-rep(list(gset(universe=A)),ns)
ns<-length(p[,1])
for(i in 1:ns){
if(g[i,1]==unknown){
# ジェノタイプが不明で親がいなければ、集団のアレル頻度をとる
if(p[i,2]==0){
S[[i]]<-gset(A,P,universe=A)
}else{
# ジェノタイプが不明で親がいれば、親のアレル集合の平均をとる
S[[i]]<-gset_mean(S[[p[i,2]]],S[[p[i,3]]])
}
}else{
# ジェノタイプがわかっているときは、その2つのアレルを重み0.5で足し合わせる
S[[i]]<-gset(g[i,1],0.5,universe=A)
S[[i]]<-S[[i]] + gset(g[i,2],0.5,universe=A)
}
}
print(S)
> print(S)
[[1]]
{"20" [0.3477105], "21" [0.5306108], "22" [0.02601289], "23" [0.0956658]}
[[2]]
{"20" [0.5], "21" [0.5]}
[[3]]
{"21" [0.5], "22" [0.5]}
[[4]]
{"20" [0.5], "21" [0.5]}
[[5]]
{"20" [0.4238552], "21" [0.5153054], "22" [0.01300644], "23" [0.0478329]}
[[6]]
{"21"}
[[7]]
{"20" [0.5], "21" [0.5]}
[[8]]
{"20" [0.5], "21" [0.5]}
[[9]]
{"21"}
[[10]]
{"20" [0.25], "21" [0.75]}
[[11]]
{"20" [0.5], "21" [0.5]}
[[12]]
{"23"}
[[13]]
{"20" [0.25], "21" [0.25], "23" [0.5]}
[[14]]
{"21" [0.5], "23" [0.5]}
[[15]]
{"21"}
[[16]]
{"21" [0.5], "23" [0.5]}
[[17]]
{"21"}
[[18]]
{"21" [0.5], "23" [0.5]}
[[19]]
{"21" [0.5], "23" [0.5]}
- phase knownにするには、個人はアレルのペア(2-tuple)を持つ。タプルを使うところが「phase known」。アレルはfuzzy multi setで、確率付き集合とする
unknown="0"
set(gset(universe=A))
S<-list()
ns<-length(p[,1])
for(i in 1:ns){
if(g[i,1]==unknown){
if(p[i,2]==0){
S[[i]]<-pair(gset(A,P,universe=A),gset(A,P,universe=A))
}else{
S[[i]]<-pair(gset_mean(S[[p[i,3]]][[1]],S[[p[i,3]]][[2]]),gset_mean(S[[p[i,2]]][[1]],S[[p[i,2]]][[2]]))
}
}else{
tmp<-gset(g[i,1],0.5,universe=A)
tmp<-tmp+gset(g[i,2],0.5,universe=A)
S[[i]]<-pair(tmp,tmp)
}
}
print(S)
> print(S)
[[1]]
({"20" [0.3477105], "21" [0.5306108], "22" [0.02601289], "23" [0.0956658]}, {"20"
[0.3477105], "21" [0.5306108], "22" [0.02601289], "23" [0.0956658]})
[[2]]
({"20" [0.5], "21" [0.5]}, {"20" [0.5], "21" [0.5]})
[[3]]
({"21" [0.5], "22" [0.5]}, {"21" [0.5], "22" [0.5]})
[[4]]
({"20" [0.5], "21" [0.5]}, {"20" [0.5], "21" [0.5]})
[[5]]
({"20" [0.3477105], "21" [0.5306108], "22" [0.02601289], "23" [0.0956658]}, {"20" [0.5], "21"
[0.5]})
[[6]]
({"21"}, {"21"})
[[7]]
({"20" [0.5], "21" [0.5]}, {"20" [0.5], "21" [0.5]})
[[8]]
({"20" [0.5], "21" [0.5]}, {"20" [0.5], "21" [0.5]})
[[9]]
({"21"}, {"21"})
[[10]]
({"20" [0.5], "21" [0.5]}, {"21"})
[[11]]
({"20" [0.5], "21" [0.5]}, {"20" [0.5], "21" [0.5]})
[[12]]
({"23"}, {"23"})
[[13]]
({"20" [0.5], "21" [0.5]}, {"23"})
[[14]]
({"21" [0.5], "23" [0.5]}, {"21" [0.5], "23" [0.5]})
[[15]]
({"21"}, {"21"})
[[16]]
({"21" [0.5], "23" [0.5]}, {"21" [0.5], "23" [0.5]})
[[17]]
({"21"}, {"21"})
[[18]]
({"21" [0.5], "23" [0.5]}, {"21" [0.5], "23" [0.5]})
[[19]]
({"21" [0.5], "23" [0.5]}, {"21" [0.5], "23" [0.5]})