- これの続き
- 組み換えを考慮する前に、染色体の長さが均等でない場合を考えよう
- 前回は、すべての染色体の長さが同じものと仮定した。
- 全部でk種類の染色体があり、なる長さの染色体とする
- 同胞がシェアする期待値は
- ただしはk種類の染色体の父母由来を0,1であらわしたときに、1となるような染色体番号を要素とした集合であるものとする
- この式はとなって、もちろん、同胞がシェアする染色体部分の期待値はである。
- 問題は、分散である。簡単には出ないので、以下のようなソースで出してみる。
- 染色体の長さの分散が小さく、ゼロのときに。染色体の長さの分散が大きくなるにつれ、その値より大きくなる。1本の染色体がほぼ全長になったときが分散は最大で、、そのときは、に収束する。
- 逆に言えば、同胞がシェアする部分の期待値はで、その分散がであるとき、効果的染色体本数(同長の染色体であったと仮定したときの染色体本数をこう呼ぶこととする)と考えることもできる
- さて、組み換えがある場合は・・・続きはこちらこれの続き
- Javaソース
package siblingShare;
public class TestSibPairFrac {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int k=22;
int y=100;
int df1=1;
int df2=2;
/*
for(int i=0;i<f.length;i++){
System.out.print(f[i]+"\t");
}
*/
int repeat=10000;
double a1=0.5;
double a2=0.5;
for(int z=0;z<y;z++){
double[] f=new double[k];
for(int i=0;i<f.length;i++){
for(int j=0;j<z+1;j++){
f[i]+=Math.random();
}
//f[i]=1;
}
StatUtilsX.MiscUtilY.standard(f);
double mean0 = StatUtilsX.MiscUtilY.momentX(f,0,1);
double var0 = StatUtilsX.MiscUtilY.momentCentralX(f,df2);
double[] value=new double[repeat];
for(int i=0;i<repeat;i++){
for(int j=0;j<f.length;j++){
double r1=Math.random();
double r2=Math.random();
if((r1<a1 && r2<a2)||(r1>a1 && r2>a2)){
value[i]+=f[j];
}
}
}
double mean = StatUtilsX.MiscUtilY.momentX(value,0,1);
double var = StatUtilsX.MiscUtilY.momentCentralX(value,df2);
System.out.print("mean0\t" + mean0 +"\tvar0\t"+var0 +"\t");
System.out.println("mean\t" + mean +"\tvar\t"+var);
}
System.out.println(1/(4.0*k));
}
}