(<-) |
[../Alignment] |
[../] |
(->) |
3.6 Substitution Matrices
SubstitutionMatrix 는 일상의 bioinformatics work 에 극히 중요한 부분이다. 그것들은 두 개의 서로 다른 residue 가 얼마나 서로를 대치할 수 있는가를 구분하는 scoring term을 제공한다.
이것은 sequence comparison 에 필수적이다. Durbin et al. 에 의한 BiologicalSequenceAnalysis 은 SubstitutionMatrix 와 그것들의 사용에 관한 정말 멋진 introduction을 제공하였다. 유명한 SubstitutionMatrix 는 PAM 과 BLOSUM series 이다.
Biopython 많은 일반적인 SubstitutionMatrix를 제공하고, 또한 당신 자신의 SubstitutionMatrix를 만드는 기능을 제공한다.
3.6.1 흔한 common SubstitutionMatrix 사용하기
3.6.2 Alignment 로부터 당신 자신의 SubstitutionMatrix 만들기
SubstitutionMatrix class를 가지고 쉽게 할 수 있는 아주 멋진 것은 alignment 로부터 당신 자신의 SubstitutionMatrix를 만드는 것이다. 실제로, 이것은 보통 protein alignment 로 한다. 이 예에서는 처음에는 biopython alignment object를 얻을 것이고, 그 다음에 alignment 에 대한 정보를 계산할 summary object를 얻을 것이다.
from Bio import Clustalw from Bio.Alphabet import IUPAC from Bio.Align import AlignInfo # get an alignment object from a Clustalw alignment output c_align = Clustalw.parse_file('protein.aln', IUPAC.protein) summary_align = AlignInfo.SummaryInfo(c_align)
Sections 3.5.1 과 3.5.2 에 이에 대한 더 많은 정보가 있다.
이제, 우리는 summary_align object를 얻었고, 우리는 서로 다른 residue 가 서로를 대치한 수를 찾기 위해서 그것을 이용하길 원한다. 예제를 더 재미있게 하기 위해서, 우리는 단지 polar charged side chains을 가진 AminoAcid 에만 초점을 맞출 것이다. 다행히도, 이것은 replacement dictionary를 생성할 때 무시되어야 할 모든 character를 넘겨줌으로써 쉽게 이루어질 수 있다.
이와 같이 우리는 오직 charged 된 polar AminoAcid 에 대한 replacemet dictionary를 만들 것이다.
replace_info = summary_align.replacement_dictionary(["G", "A", "V", "L", "I", "M", "P", "F", "W", "S", "T", "N", "Q", "Y", "C"])
AminoAcid replacement 에 대한 이 정보는 아래와 같이 보이는 python dictionary 로 나타내어진다.
{('R', 'R'): 2079.0, ('R', 'H'): 17.0, ('R', 'K'): 103.0, ('R', 'E'): 2.0, ('R', 'D'): 2.0, ('H', 'R'): 0, ('D', 'H'): 15.0, ('K', 'K'): 3218.0, ('K', 'H'): 24.0, ('H', 'K'): 8.0, ('E', 'H'): 15.0, ('H', 'H'): 1235.0, ('H', 'E'): 18.0, ('H', 'D'): 0, ('K', 'D'): 0, ('K', 'E'): 9.0, ('D', 'R'): 48.0, ('E', 'R'): 2.0, ('D', 'K'): 1.0, ('E', 'K'): 45.0, ('K', 'R'): 130.0, ('E', 'D'): 241.0, ('E', 'E'): 3305.0, ('D', 'E'): 270.0, ('D', 'D'): 2360.0}
이 정보는 우리에게 replacement 의 accepted number를 주거나, 얼마나 자주 우리가 서로 다른 것들이 서로를 대치할 것을 기대할 수 있는지를 알려준다.
충분히 놀랍게도 이것이 우리가 나아가서 SubstitutionMatrix를 만들기 위해 필요한 정보의 모든 것이다. 처음에는 우리는 AcceptedReplacementMatrix (ARM)를 만들기 위해서 replacement dictionary information을 사용한다.
from Bio import SubsMat my_arm = SubsMat.SeqMat(replace_info)
이 accepted replacement matrix와 더불어 우리는 나아가 log odds matrix를 만든다. (ie. a standard type Substitution Matrix)
my_lom = SubsMat.make_log_odds_matrix(my_arm)
당신이 만든 log odds matrix 다음의 optional argument 로서 customize 가능하다.
exp_freq_table -- 각각의 alphabet 에 대해 기대되는 frequency 의 table을 pass 할 수 있다. 만약 이것이 작성된다면, 이것은 expected replacement를 계산할 때 passed accepted replacement matrix 대신에 사용될 것이다.
logbase - log odd matrix를 생성할 때 사용된 logarithm 의 base. Defaults 는 base 10.
factor - 각각의 matrix를 multiply 할 factor. 이것의 defaults 는 10이고, 보통 이것은 matrix number로 작업하기 쉽게 만든다.
round_digit - The digit to round to in the matrix. (matrix에서 정수화할 수) 이것의 defaults 는 0이다. 당신의 log odds matrix를 가지게 되었을 때, 당신은 그것을 print_mat function을 사용해서 예쁘게 보여줄수 있다. 우리의 생성된 matrix 에 대해서 이렇게 한 것은 다음과 같다.
(역자주 : 해석상의 어려움)
>>> my_lom.print_mat() D 6 E -5 5 H -15 -13 10 K -31 -15 -13 6 R -13 -25 -14 -7 7 D E H K R
아주 좋다! 이제 우리는 우리 자신이 쓸 SubstitutionMatrix를 가지게 되었다.