LoginSignup
12
9

More than 5 years have passed since last update.

k-mer についての、説明時の資料

Last updated at Posted at 2015-09-02

k-mer

現在のアセンブラで主流となってる「ド・ブラン(de Brujin1)グラフ」を使ったアセンブリで使用される、配列断片長の事。

で、ド・ブラングラフに関しては、

を読め。で話が終了。

が、インフォマティシャン以外の人に向けて、もう、ほんのちょっとだけ実例が欲しい場合の資料として。

本職の人は読む必要が無い、つか読まないで。

適当な例。

以下は、 E.coli K-12 の適当な部分を適当に持ってきた配列。

A:  GCTTTTTTTTTCGACCAAAGGTAACGAGGTAAC
B:  AGGTAACAACCATGCGAGTGTTGAAGTTC

で、コンセンサスが判らないものとして、 A, B のリードが得られてると仮定。

今回は、 5mer で 1bp スライドのスライディングウィンドウ的な断片を作成。それを並べてグラフを作成してアセンブリする。

目次と、配列断片を得る

$ function get_frag(){
   perl -le 'while(1){ $a = substr $ARGV[0], $b ++ , 5 ; last if length $a < 5 ; print join "\t", $b, $a }' "$1"
}
$ get_frag GCTTTTTTTTTCGACCAAAGGTAACGAGGTAAC
1       GCTTT
2       CTTTT
3       TTTTT
4       TTTTT
5       TTTTT
6       TTTTT
7       TTTTT
8       TTTTC
9       TTTCG
10      TTCGA
11      TCGAC
12      CGACC
13      GACCA
14      ACCAA
15      CCAAA
16      CAAAG
17      AAAGG
18      AAGGT
19      AGGTA
20      GGTAA
21      GTAAC
22      TAACG
23      AACGA
24      ACGAG
25      CGAGG
26      GAGGT
27      AGGTA
28      GGTAA
29      GTAAC
$ get_frag AGGTAACAACCATGCGAGTGTTGAAGTTC
1       AGGTA
2       GGTAA
(ommitted)
24      AAGTT
25      AGTTC

A, B それぞれの目次があるので1から順にリード内の並びは再構成出来る。

断片のテーブルを作成する

上記、 A, B のコマンド結果を適当な1ファイルに保存。

$ perl -Mvars=%h -lane '$h{$F[1]} ++ }{ print join "\t", $h{$_}, $_ for sort { $h{$b} <=> $h{$a} } keys %h ' FILE
   5 TTTTT
   3 AGGTA
   3 GGTAA
   3 GTAAC
   1 AAAGG
   1 AACAA
   1 AACCA
(omitted)

指定長の断片の出現頻度が得られる2

これを、目次と照らし合わせて3、オイラー経路として解析する、、、と。

グラフを描く

例なので目次を便りに簡略化。

1       GCTTT
2       CTTTT
3       TTTTT   # polyT
4       TTTTT   #
5       TTTTT   #
6       TTTTT   #
7       TTTTT   #
8       TTTTC
↓
18      AAGGT
19      AGGTA   # 3
20      GGTAA   # 3
21      GTAAC   # 3
22      TAACG
↓
26      GAGGT
27      AGGTA   # 3
28      GGTAA   # 3
29      GTAAC   # 3
1       AGGTA   # 3
2       GGTAA   # 3
3       GTAAC   # 3
4       TAACA
↓
25      AGTTC

まあ、見たまんまな訳だけど、一応整理して並べると

  • A の 1~18 までは(polyT はあるものの)目次通り => A_frag1 ( GCTTTTTTTTTCGACCAA )
  • A の 19,20,21 => segment ( AGG )
  • A の 22~26 => A_frag2 ( TAACG )
  • B の 4~25 => B_frag ( TAACAACCATGCGAGTGTTGAA )
        A_frag1
         ↓
+---->  segment  ----> B_frag
|        ↓
+-----  A_frag2

で、並び順は、

A_frag1 => segment => A_frag2 => segment => B_frag

になる。

よって答えは、経路の最後の 4 塩基を足して

GCTTTTTTTTTCGACCAA . AGG . TAACG . AGG . TAACAACCATGCGAGTGTTGAA + GTTC

アライメント結果は、

    GCTTTTTTTTTCGACCAAAGGTAACGAGGTAACAACCATGCGAGTGTTGAAGTTC
A:  GCTTTTTTTTTCGACCAAAGGTAACGAGGTAAC
B:                            AGGTAACAACCATGCGAGTGTTGAAGTTC

で、ぐだぐだと述べて来た、この 5mer を k-mer = 5 と表記する訳。
k-mer = 20 なら 20塩基だし、 50 なら 50塩基。

ちょっと昔の次世代シーケンサーは、リード長が 100bp にも満たなかったから、k-mer 20 辺りでやるのが当たり前とか言われてたけど、最近 300bp 読めてるんだから、当然、もっとデカい値でのアセンブルが最適なものも出てくるよね。って話が続くんだけど、、、


  1. 普通に有名人が居るんだから、ド・ブランで良くね? 

  2. 実際には、当然 reverse-complement を考慮。簡略化した例なので割愛。 

  3. それぞれの断片と、リードの目次を登録したテーブルみたいのを作成したら、それがハッシュテーブルと言われてるもの。に近いもの? って感じ??? 

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9