- 3. 組換え体を作る
- 同一の染色体上に複数の多型があるときに、伝達にあたって、多型間で組換えがおきるかどうかを考慮した上で、同一染色体上のアレルはまとまって(ハプロタイプとして)伝達される
- 組換えが起きるかどうかは確率的であるので、その起きやすさを値で指定する必要がある
- 「遺伝的距離」で与えることとする
- 「遺伝的距離」がわからないときは「物理的距離」から、適当に推定することになる
- "モルガンは、遺伝学的方法で定められた、染色体の上での遺伝子間の距離を表す単位。生殖細胞ができる減数分裂1回当たり、相同染色体間に平均1回の交叉が起こる距離を1モルガンとし、その1/100を1センチモルガン(cM)とする。1cMは約1000キロベースペア(1000kbp、100万塩基対)に相当するといわれている。"(こちらから)
Dg<-runif(Ns-1)
rands.crossing<-runif(length(Dg))
Cross<-which((Dg-rands.crossing)>0)
Cross
hap1<-Haps[1,]
hap2<-Haps[2,]
rec.hap1<-hap1
rec.hap2<-hap2
if(length(Cross)>0){
for(i in 1:length(Cross)){
tmp.tail1<-rec.hap1[(Cross[i]+1):Ns]
tmp.tail2<-rec.hap2[(Cross[i]+1):Ns]
rec.hap1[(Cross[i]+1):Ns]<-tmp.tail2
rec.hap2[(Cross[i]+1):Ns]<-tmp.tail1
}
}
Cross
hap1
hap2
rec.hap1
rec.hap2
-
- Crossの情報がhap1,hap2,rec.hap1,rec.hap2のハプロタイプ状態と合致するかどうかを目視で確認する
- これを関数化する
Rec.Haplotype<-function(hap1,hap2,d){
Ns<-length(hap1)
rands.crossing<-runif(length(d))
Cross<-which((d-rands.crossing)>0)
rec.hap1<-hap1
rec.hap2<-hap2
if(length(Cross)>0){
for(i in 1:length(Cross)){
tmp.tail1<-rec.hap1[(Cross[i]+1):Ns]
tmp.tail2<-rec.hap2[(Cross[i]+1):Ns]
rec.hap1[(Cross[i]+1):Ns]<-tmp.tail2
rec.hap2[(Cross[i]+1):Ns]<-tmp.tail1
}
}
matrix(c(rec.hap1,rec.hap2),byrow=TRUE,nrow=2)
}
rec.haps<-Rec.Haplotype(Haps[1,],Haps[2,],Dg)
rec.haps