核家族のルール〜ファジィマルチ集合で〜

  • ファジィマルチ集合は要素に確率を持たせることができる
    • ファジィマルチ集合に関する記事はこちら
  • メンデルの法則の処理にこれを使えるかどうかを試してみる
# 家系を作る
# ジェノタイプ不明者(第5カラムが2もしくは3)も入れる
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)
  • phase unknown
# さあやってみよう
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()
	#S<-rep(list(pair(gset(universe=A),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]]<-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]})