The Genes, They are a-Changing

August 08, 2017


Evolution

Evolution : The Change in allele frequencies in a population over time.

進化 : 時間とともに個体群(population)の中で起こる対立遺伝子(allele)の変化頻度。

allele(対立遺伝子) : 遺伝子の別バージョンと言える

進化にかかわる4つの力
  1. (Natural) selection (自然)選択

  2. Genetic drift 遺伝子的変化

  3. Migration 移住

  4. Mutation 突然変異

Hardy-Weinberg model

  • 進化にかかわる力は無い

  • 対立遺伝子は2種類。遺伝子A から派生しているA1とA2とする。

  • 遺伝子は diploid(遺伝的物質を2セット持っている)として扱う。 haploid(遺伝的物質を1セットだけのもの:精子、卵子)

diploidは、減算分裂(meiosis)をしてhaploid:gametes(配偶子)となる。

配偶子どうしが結合してdiploid:zegote(結合子)となる

父親からの配偶子を精子、母親からの配偶子を卵子

1セットづつ遺伝子を受け取った結合子を複製して個体となる

ハーディ・ワインベルグ モデルでは1つだけの遺伝子を導入する

その遺伝子を A 、 対立遺伝子の1つを A1、 もう一つを A2 とする。

ここでは、diploid system(人間や一般的な動物の持つ) を扱うものとする。

遺伝子の組合せはというと3種類ある

同じ型の対立遺伝子を持つ場合をホモ接合(homosygous)

異なる型の対立遺伝子を持つ場合をヘテロ接合(heterozygous)

100個体あるとします

遺伝子の組み合わせのことを遺伝子型と呼ぶことにします

個体数を下記の通りとします

遺伝子型 個体数 割合
A1A1 15 15%
A1A2 50 50%
A2A2 35 35%
合計 100 100%

次に、対立遺伝子の頻度を確認してみましょう

Hardy-Weinberg Frequencies

ここで、単純化のためにいくつかの前提条件を導入します

– 無限の個体数(遺伝子的変化の影響を受けない)

– 世代間で個体は重ならない(新しい世代が誕生すると、前の世代はすぐさま死亡する)

– 性的な再生は考慮しない、対立遺伝子はランダムにくっ付きあい 新しい世代を生成し、新しい遺伝子型(genotype)の頻度となる

– 進化に影響する4つの力は無い

上記の条件をもとに次の世代がどの様いなるか計算をします

遺伝子型の頻度は

対立遺伝子の頻度は

こちらは前の世代の頻度と変わっていない、 言い換えると、進化が無いということ

進化にとっては、対立遺伝子の変化が必要

それではさらに次の世代の頻度はどうなるでしょう

対立遺伝子の頻度が変わっていないので、遺伝子型の頻度は前回と同じになります

結局、世代を重ねてもこの値を繰り返すだけです

この1世代進んだ遺伝子型頻度を ハーディ・ワインベルグ頻度 と言いい、変わることはありません


Programming

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
var calcBtn = document.querySelector('#calcBtn');
calcBtn.addEventListener('click', calc);

// genotype frequencies
var a1a1 = 0.15;
var a2a2 = 0.35;
var a1a2 = 1 -(a1a1 + a2a2);

// allele frequencies
var p = a1a1 + (a1a2 / 2);
var q = 1 - p;

var table = document.querySelector('#resultTable');

function calc(){

  table.innerHTML = '';

  var tHead = table.createTHead();
  var hRow = tHead.insertRow();
  hRow.insertCell().innerHTML = 'Generation'; 
  hRow.insertCell().innerHTML = 'a1a1';
  hRow.insertCell().innerHTML = 'a1a2';
  hRow.insertCell().innerHTML = 'a2a2';

  createRow(0);

  for (let i = 1; i < 6; i++){
    nextGeneration();
    createRow(i);
  }
}

function createRow(i){

  let row = table.insertRow();
  row.insertCell().innerHTML = i; 
  row.insertCell().innerHTML = a1a1;
  row.insertCell().innerHTML = a1a2;
  row.insertCell().innerHTML = a2a2;

}

function nextGeneration(){
  a1a1 = p * p;
  a1a1 = round_3_decimals(a1a1);
  a1a2 = 2 * p * q;
  a1a2 = round_3_decimals(a1a2);
  a2a2 = q * q;
  a2a2 = round_3_decimals(a2a2);
}

function round_3_decimals(value){
    return Math.round(value * 1000) /1000;
}